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

2024-03-19

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

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


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

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

如果您想编写一个,您还可以从目录中检索相关列的列表do block http://www.postgresql.org/docs/current/static/sql-do.html生成所需的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()如果您需要处理列名称中潜在的奇怪字符。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何一次性从 PostgreSQL 表中删除所有 NOT NULL 约束 的相关文章

随机推荐