如何在PostgreSQL中将所有列的默认值设置为null

时间:2011-03-02 17:23:49

标签: sql postgresql default-value information-schema

我想为多个表中的每个列设置默认值,等于Null。我可以在information_schema.columns.column_default下查看默认约束。当我试图跑     update information_schema.columns set column_default = Null where table_name = '[table]' 它抛出“错误:无法更新视图提示:您需要一个无条件的ON UPDATE DO INSTEAD规则。”

最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

您需要为每列运行ALTER TABLE语句。永远不要试图通过操作系统表来做类似的事情(即使你找到了正确的一个 - INFORMATION_SCHEMA只包含真实系统表的视图)

但您可以根据information_schema视图中的数据生成所有必需的ALTER TABLE语句:

SELECT 'ALTER TABLE '||table_name||' ALTER COLUMN '||column_name||' SET DEFAULT NULL;'
FROM information_schema.columns
WHERE table_name = 'foo';

将输出保存为SQL脚本,然后运行该脚本(不要忘记提交更改)