すべてのキーと制約を含むデータなしで、テーブルの構造を新しいテーブルにコピーする方法はありますか?
回答:
単純なスキーマコピーの場合は、like句を使用します。
CREATE TABLE new_table_name ( like old_table_name including all)
さて、SQLで取得できる最も近いものは次のとおりです。
create table new (
like old
including defaults
including constraints
including indexes
);
しかし、すべてをコピーするわけではありません。欠落している最も重要なものは外部キーです。また、トリガーもコピーされません。他のことについてはよくわかりません。
もう1つの方法は、テーブル構造をダンプし、dumpで名前を変更して、再度ロードすることです。
pg_dump -s -t old databases | sed 's/old/new/g' | psql
ただし、このような単純なsedは、他の場所でも古いものから新しいものに変わることに注意してください(たとえば、テーブルの列に「is_scolded」という名前がある場合は、「is_scnewed」になります)。
問題はむしろ、なぜそれが必要なのかということです。さまざまな目的のために、私はさまざまな手法を使用するからです。
including constraints
PostgreSQL 8.3では機能しません
pgAdminを見てください-あなたがやりたいことをする最も簡単な方法です。
テーブルを右クリックし、スクリプト-作成します。
CREATE TABLE new (like old, extra_column text);