Скопировать структуру таблицы в новую таблицу

Есть ли способ скопировать структуру таблицы в новую таблицу без данных, включая все ключи и ограничения?

Ответ 1

Ну, ближе всего вы можете получить с SQL:

create table new (
    like old
    including defaults
    including constraints
    including indexes
);

Но он не будет копировать все. Самые важные вещи, которые отсутствуют, - FOREIGN KEYs. Кроме того, триггеры также не копируются. Не уверен в других вещах.

Другой способ - сбросить структуру таблицы, изменить ее имя в дампе и снова загрузить ее:

pg_dump -s -t old databases | sed 's/old/new/g' | psql

Но будьте осторожны, что такое упрощенное sed также изменится с старого на новое в других местах (например, если в вашем столбце таблицы с именем "is_scolded" оно станет "is_scnewed" ).

Вопрос на самом деле скорее: зачем он вам нужен, потому что для различных целей я бы использовал разные методы.

Ответ 2

Для простой копии схемы используйте подобное предложение.

CREATE TABLE new_table_name ( like old_table_name including all)

Ответ 3

Взгляните на pgAdmin - на сегодняшний день самый простой способ сделать то, что вы хотите.
Щелкните правой кнопкой мыши на таблице, Scripts - Create.

Ответ 4

Как насчет

CREATE TABLE sample_table_copy AS (SELECT * FROM sample_table WHERE 1 = 2)

ответ postgresql.org