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

标签 sql postgresql constraints sql-drop notnull

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

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

最佳答案

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

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

如果您想写一个do block,您还可以从目录中检索相关列的列表。生成所需的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()

关于sql - 如何一次性从 PostgreSQL 表中删除所有 NOT NULL 约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20146475/

相关文章:

java - 用截击发送对象

python - Django cms迁移错误数量(0)的约束

mysql - 如何在多表连接中引用父表?

不同行集的 SQL Sybase 行计数

MySQL 将 uuid 与主键匹配

postgresql - 为什么postgres选择了错误的执行计划

R和postgreSQL表操作

sql - 如果名称类似,则删除索引

java - 在约束布局上设置最大高度

python - 如何创建 "at least n"约束?