簡體   English   中英

如何一次將 NOT NULL 設置為我數據庫的所有表中存在的列?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM