如何一次性从 PostgreSQL 表中删除所有 NOT NULL 约束

新手上路,请多包涵

是否可以一次性从表中删除所有 NOT NULL 约束?

我有一个带有很多 NOT NULL 约束的大表,我正在寻找一种比单独删除它们更快的解决方案。

原文由 Stefan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 528
2 个回答

您可以将它们全部分组在同一个 alter 语句中:

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


如果您想编写一个 do 块 来生成所需的 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() 以防您需要处理列名中可能出现的奇怪字符。

原文由 Denis de Bernardy 发布,翻译遵循 CC BY-SA 3.0 许可协议

ALTER TABLE table_name ALTER COLUMN [SET NOT NULL|删除非空]

原文由 jameel 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进