環境
- OS: Windows10
- PostgreSQL:9.5
FKをすべて削除する方法
データ投入時等で、一旦制約を削除したい場合ってあると思います。
テーブル等が大量にある場合はとても大変な作業です。
一括で削除する方法を紹介します。
SELECT 'ALTER TABLE "'||nspname||'"."'||relname||'" DROP CONSTRAINT "'||conname||'";'
FROM pg_constraint
INNER JOIN pg_class ON conrelid=pg_class.oid
INNER JOIN pg_namespace ON pg_namespace.oid=pg_class.relnamespace
WHERE contype='f'
ORDER BY CASE WHEN contype='f' THEN 0 ELSE 1 END,contype,nspname,relname,conname
補足
以下のコマンドで出力をファイルに変更することができます。
\o [ファイル名]
標準出力に戻す方法は以下を以下を実行するだけです。
\o
参考
Automatically dropping and creating constraints
https://www.hagander.net/blog/automatically-dropping-and-creating-constraints-131/