Есть ли способ скопировать структуру таблицы в новую таблицу без данных, включая все ключи и ограничения?
Скопировать структуру таблицы в новую таблицу
Ответ 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)