PostgreSQL: скопировать таблицу вместе с данными
Скопировать структуру и строки таблицы в PostgreSQL можно командой CREATE TABLE new_table AS TABLE old_table. Этот короткий способ переносит данные и вычисляемые значения, но не копирует индексы, ограничения и триггеры; для структуры используйте LIKE.
Создать копию со строками
CREATE TEMP TABLE source_items (id int PRIMARY KEY, title text NOT NULL);
INSERT INTO source_items VALUES (1, 'Первый'), (2, 'Второй');
CREATE TEMP TABLE items_copy AS TABLE source_items;
SELECT count(*) FROM items_copy;
-- результат: 2CREATE TABLE AS выводит столбцы и данные результата, но не переносит все свойства исходной таблицы.
Скопировать структуру и ограничения
CREATE TEMP TABLE source_items (id int PRIMARY KEY, title text NOT NULL);
INSERT INTO source_items VALUES (1, 'Первый'), (2, 'Второй');
CREATE TEMP TABLE items_structure (LIKE source_items INCLUDING ALL);
INSERT INTO items_structure SELECT * FROM source_items;INCLUDING ALL копирует поддерживаемые атрибуты, включая индексы и defaults. Некоторые зависимости и внешние ключи всё равно нужно проверить отдельно.
Только структуру или только данные
CREATE TEMP TABLE source_items (id int PRIMARY KEY, title text NOT NULL);
INSERT INTO source_items VALUES (1, 'Первый'), (2, 'Второй');
CREATE TEMP TABLE empty_copy AS TABLE source_items WITH NO DATA;
CREATE TEMP TABLE data_copy (LIKE source_items);
INSERT INTO data_copy SELECT * FROM source_items;Цель | Способ |
|---|---|
Быстрая копия результата и строк |
|
Скопировать структуру таблицы |
|
Структура без строк |
|
Перенести таблицу в другую базу?
SQL-команда CREATE TABLE AS работает внутри текущего подключения. Для межбазового переноса используйте pg_dump/pg_restore, COPY через файл или проверенное расширение postgres_fdw.