1. ホーム
  2. sql

PostgreSQLのテーブルからすべてのNOT NULL制約を一度に削除する方法

2023-11-16 14:20:56

質問

テーブルからすべてのNOT NULL制約を一度に削除することは可能ですか?

多くのNOT NULL制約を持つ大きなテーブルがあり、それらを別々に削除するよりも高速なソリューションを検索しています。

どのように解決するのですか?

同じalterステートメントでグループ化すればよい。

alter table tbl alter col1 drop not null,
                alter col2 drop not null,
                …


を書きたい気分なら、カタログから関連するカラムのリストを取得することもできます。 ブロックを行う を書き、必要なSQLを生成することもできます。例えば、次のようなものです。

select a.attname
  from pg_catalog.pg_attribute a
 where attrelid = 'tbl'::regclass
   and a.attnum > 0
   and not a.attisdropped
   and a.attnotnull;

(なお、これには主キー関連のフィールドも含まれるので、それらをフィルタリングしておくとよいでしょう)

これを行う場合、忘れずに quote_ident() を使うことを忘れないでください。