Чи є спосіб скопіювати структуру таблиці в нову таблицю без даних, включаючи всі ключі та обмеження?
Відповіді:
Для простої копії схеми використовуйте подібне речення.
CREATE TABLE new_table_name ( like old_table_name including all)
Ну, найближче, що ви можете отримати з SQL:
create table new (
like old
including defaults
including constraints
including indexes
);
Але це не все скопіює. Найголовніше, чого не вистачає, це ІНОЗЕМНІ КЛЮЧІ. Також - тригери також не копіюються. Не впевнений в інших речах.
Інший спосіб - скинути структуру таблиці, змінити її назву в дамп і завантажити знову:
pg_dump -s -t old databases | sed 's/old/new/g' | psql
Але будьте обережні, що такий спрощений sed також змінить старий на новий в інших місцях (наприклад, якщо у вашій таблиці є стовпець з назвою "is_scolded", він стане "is_scnewed").
Питання насправді полягає швидше: навіщо це вам потрібно - адже для різних цілей я б використовував різні техніки.
including constraints
не працює на PostgreSQL 8.3
Щоб повністю скопіювати таблицю, також можна використовувати коротку форму за допомогою команди TABLE:
CREATE TABLE films2 AS
TABLE films
WITH NO DATA;
Детальніше тут
Погляньте на pgAdmin - на сьогоднішній день найпростіший спосіб робити те, що хочете.
Клацніть правою кнопкою миші на таблиці, Сценарії - Створити.
Як на рахунок
CREATE TABLE sample_table_copy AS (SELECT * FROM sample_table WHERE 1 = 2)
CREATE TABLE new (like old, extra_column text);