Gibt es eine Möglichkeit, die Struktur einer Tabelle ohne Daten, einschließlich aller Schlüssel und Einschränkungen, in eine neue Tabelle zu kopieren?
Antworten:
Verwenden Sie für eine einfache Schemakopie die like-Klausel.
CREATE TABLE new_table_name ( like old_table_name including all)
Nun, das Beste, was Sie mit SQL erreichen können, ist:
create table new (
like old
including defaults
including constraints
including indexes
);
Aber es wird nicht alles kopiert. Die wichtigsten Dinge, die fehlen, sind AUSLÄNDISCHE SCHLÜSSEL. Auch - Trigger werden ebenfalls nicht kopiert. Ich bin mir bei anderen Dingen nicht sicher.
Eine andere Möglichkeit besteht darin, die Tabellenstruktur zu sichern, ihren Namen in dump zu ändern und sie erneut zu laden:
pg_dump -s -t old databases | sed 's/old/new/g' | psql
Beachten Sie jedoch, dass eine solche vereinfachte Bereinigung auch an anderen Stellen von alt zu neu geändert wird (wenn Sie beispielsweise in Ihrer Tabellenspalte den Namen "is_scolded" haben, wird sie zu "is_scnewed").
Die Frage ist wirklich eher: Warum brauchst du sie - weil ich für verschiedene Zwecke verschiedene Techniken verwenden würde.
including constraints
funktioniert nicht unter PostgreSQL 8.3
Um eine Tabelle vollständig zu kopieren, kann auch die Kurzform mit dem Befehl TABLE verwendet werden:
CREATE TABLE films2 AS
TABLE films
WITH NO DATA;
Weitere Details hier
Schauen Sie sich pgAdmin an - bei weitem der einfachste Weg, das zu tun, was Sie wollen.
Klicken Sie mit der rechten Maustaste auf Tabelle, Skripte - Erstellen.
Wie wäre es mit
CREATE TABLE sample_table_copy AS (SELECT * FROM sample_table WHERE 1 = 2)
CREATE TABLE new (like old, extra_column text);