Скопировать структуру таблицы в новую таблицу - PullRequest
59 голосов
/ 03 августа 2009

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

Ответы [ 5 ]

64 голосов
/ 14 марта 2015

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

CREATE TABLE new_table_name ( like old_table_name including all)
63 голосов
/ 03 августа 2009

Ну, самое близкое, что вы можете получить с помощью SQL:

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

Но это не будет копировать все. Наиболее важные вещи, которые отсутствуют, это иностранные ключи. Также - триггеры тоже не копируются. Не уверен насчет других вещей.

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

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

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

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

11 голосов
/ 03 августа 2009

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

9 голосов
/ 28 июня 2018

Чтобы полностью скопировать таблицу, можно также использовать краткую форму с помощью команды TABLE:

CREATE TABLE films2 AS
    TABLE films
    WITH NO DATA;

Подробнее здесь

7 голосов
/ 30 апреля 2015

Как насчет

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

postgresql.org ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...