我正在使用 PostgreSQL。我必须NOT NULL
在我的数据库的所有表中存在的列上设置属性。我知道如何在一张桌子上设置,使用:
ALTER TABLE table_name ALTER COLUMN column_name SET NOT NULL;
但是我的数据库中有大约 400 个表,所以我需要立即执行此操作,有人可以吗?
先感谢您!
我正在使用 PostgreSQL。我必须NOT NULL
在我的数据库的所有表中存在的列上设置属性。我知道如何在一张桌子上设置,使用:
ALTER TABLE table_name ALTER COLUMN column_name SET NOT NULL;
但是我的数据库中有大约 400 个表,所以我需要立即执行此操作,有人可以吗?
先感谢您!
使用: psql
_\gexec
SELECT format(
'ALTER TABLE %I.%I ALTER column_name SET NOT NULL;',
table_schema,
table_name
)
FROM information_schema.tables
WHERE table_schema NOT IN ('pg_catalog', 'information_schema') \gexec
或者,您可以运行该语句,将输出保存到脚本并执行该脚本。
您还可以DO
使用 PL/pgSQL 代码编写一个语句,该语句循环查询结果并将EXECUTE
其作为动态 SQL 执行。
正如 laurenz 所说,您可以通过执行DO
以下语句中的 ALTER 命令来实现它,
DO $$
DECLARE
selectrow record;
BEGIN
FOR selectrow IN
SELECT format(
'ALTER TABLE %I.%I ALTER %s SET NOT NULL;',
table_schema,
table_name,
'my_column'
) AS script
FROM information_schema.tables
WHERE table_schema NOT IN ('pg_catalog', 'information_schema')
LOOP
EXECUTE selectrow.script
END LOOP;
END;
$$;