【PostgreSQL】テーブルをコピーしたらindexや制約がコピーされないぞ?
過去データの取り込み作業でテーブルにデータを流し込む作業をしているのだけど、念のためのバックアップを作って何かあれば戻せるように準備していたのだが、index
や制約がコピーされてないことに気づき調査開始。
単純にコピー作って戻す方法(ダメな方法)
hoge=# CREATE TABLE shop_sales_back AS SELECT * FROM shop_sales; hoge=# DROP TABLE shop_sales hoge=# ALTER TABLE shop_sales_back RENAME TO shop_sales;
indexや制約を意識した方法(良い方法)
hoge=# CREATE TABLE shop_sales_back AS SELECT * FROM shop_sales; #テーブルは消さずに、データだけ空っぽにする hoge=# TRUNCATE TABLE shop_sales; hoge=# INSERT INTO shop_sales (SELECT * from shop_sales_back);
テーブルは消さずに中身だけ削除! コピーしたテーブルから再度データを流し込むって感じですね。
また、別の方法としてテーブル定義の情報含めてpg_dump
してリストアする方法がありそうなのだけど何がどう違うのか分かってないので、先輩に聞いてみよう。
pg_dumpしてリストアする方法
# ダンプ $ pg_dump —username=user --table shop_sales hoge > hoge.sql # リストア $ psql —username=user hoge < hoge.sql
indexや制約を確認する方法
$ psql hoge hoge=# \d table_name