列出 postgresql 表中所有非空约束

cpp*_*ner 4 postgresql constraints psql

我试图在终端中使用 psql 来查找数据库中所有可为空的列。如果我使用

select * from information_schema.check_constraints;
Run Code Online (Sandbox Code Playgroud)

我得到如下信息

 constraint_catalog | constraint_schema  |       constraint_name        |                                         check_clause                                         
--------------------+--------------------+------------------------------+----------------------------------------------------------------------------------------------
 foo                | public             | 12345_67890_1_not_null       | bar IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

不幸的是,该bar列出现在许多表中。我可以获得public像这样列出列名和表名的所有约束的列表的最简单方法是什么?

Lon*_*Rob 9

NOT NULL要获取特定表中的列列表,您可以执行以下操作:

SELECT table_schema, table_name, column_name FROM information_schema.columns
WHERE is_nullable = 'NO';
Run Code Online (Sandbox Code Playgroud)

从这里,您可以通过使用您选择的脚本语言迭代此查询的结果并执行以下操作来删除约束:

ALTER TABLE "schema_name"."table_name" ALTER "column_name" DROP NOT NULL;
Run Code Online (Sandbox Code Playgroud)