簡體   English   中英

如何一次將所有表列設置為 NOT NULL?

[英]How to set all table columns to NOT NULL at once?

這甚至可能嗎,如果可以的話怎么辦? 如果不是,那么我會對一種不需要逐個鍵入每個列名的方式感到滿意。 我的用例是我從查詢創建一個表,並希望所有列都不是 NULL 因為我后來使用 Slick 做 ORM 並且所有這些列類型不是 Z37A6259CC46[X9DFFAE299A ])。 這是 static 數據,因此列值不會是 null 也不會改變。

與 MySQL 不同,Postgres 並沒有發現原始查詢列都不是 NULL。

我想避免在我的腳本中一一添加約束,並且每當更改查詢架構時都容易破壞解決方案,即

CREATE TABLE dentistry_procedure AS SELECT * FROM ...
ALTER TABLE dentistry_procedure ALTER column * SET NOT NULL;

如何?

您可以使用元數據表並構建動態查詢:

SELECT format('ALTER TABLE %I '||STRING_AGG(format('ALTER COLUMN %I SET NOT NULL', COLUMN_NAME),CHR(13)||',')
              , MIN(TABLE_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE IS_NULLABLE = 'YES'
  AND TABLE_NAME = 't';

db<>小提琴演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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