既存テーブルのバックアップと削除
前提として。
テーブルAを複製し、テーブルBを作る場合
CREATE TABLE "tbl_b" AS SELECT * FROM "tbl_a"
複製元のテーブル名称がtbl_a_yyyymmdd等になっており、テーブル名称にtbl_aを含むテーブルすべてを複製したい場合
まずは、以下SQLを実行し、テーブルの数分のSQLを発行し、
抽出結果のSQLをコピーし、それを実行する。
relnameはテーブル、インデックス、ビューなどの名前を表しているので、変更しなくてOK
pg_stat_user_tablesはPostgreSQLのユーザテーブル情報を指しており、こちらも変更せずそのままでOK。
WHERE句でテーブル名のLIKE検索をする。
SELECT
'CREATE TABLE '||'"'||relname||'_backup" AS '||'SELECT * FROM ' ||'"'||relname||'";'
FROM
pg_stat_user_tables
WHERE
relname LIKE 'tbl_a%';
逆にバックアップ作成後に、バックアップ元のテーブルのみを削除したい場合
SELECT
'DROP TABLE '||'"'||relname||'"'||';'
FROM
pg_stat_user_tables
WHERE
relname LIKE 'tbl_a%'
AND
relname NOT LIKE '%_backup'
;