[英]How to set NOT NULL to a column present in all the tables of my database at once?
我正在使用 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
或者,您可以運行該語句,將 output 保存到腳本並執行該腳本。
您還可以使用 PL/pgSQL 代碼編寫DO
語句,循環查詢結果並使用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;
$$;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.