Czy istnieje sposób na skopiowanie struktury tabeli do nowej tabeli bez danych, w tym wszystkich kluczy i ograniczeń?
Odpowiedzi:
W przypadku prostej kopii schematu użyj klauzuli like.
CREATE TABLE new_table_name ( like old_table_name including all)
Cóż, najbliższy SQL to:
create table new (
like old
including defaults
including constraints
including indexes
);
Ale nie skopiuje wszystkiego. Najważniejsze rzeczy, których brakuje, to KLUCZE OBCE. Również - wyzwalacze również nie są kopiowane. Nie jestem pewien innych rzeczy.
Innym sposobem jest zrzucenie struktury tabeli, zmiana jej nazwy w dump i ponowne załadowanie:
pg_dump -s -t old databases | sed 's/old/new/g' | psql
Ale uwaga, taki uproszczony sed zmieni się również ze starego na nowy w innych miejscach (na przykład jeśli masz w swojej tabeli kolumnę o nazwie „is_scolded”, stanie się ona „is_scnewed”).
Pytanie tak naprawdę brzmi raczej: po co ci to potrzebne - ponieważ do różnych celów użyłbym różnych technik.
including constraints
nie działa na PostgreSQL 8.3
Aby całkowicie skopiować tabelę, można również użyć krótkiego formularza za pomocą polecenia TABELA:
CREATE TABLE films2 AS
TABLE films
WITH NO DATA;
Więcej szczegółów tutaj
Spójrz na pgAdmin - zdecydowanie najłatwiejszy sposób robienia tego, co chcesz.
Kliknij prawym przyciskiem myszy tabelę, Skrypty - Utwórz.
Co powiesz na
CREATE TABLE sample_table_copy AS (SELECT * FROM sample_table WHERE 1 = 2)
CREATE TABLE new (like old, extra_column text);