如何一次将所有 table 列设置为 NOT NULL?

How to set all table columns to NOT NULL at once?

这可能吗,如果可能的话怎么办?如果没有,那么我会很高兴有一种不需要一个一个地输入每个列名的方法。我的用例是我从查询中创建了一个 table 并且想让所有列都不是 NULL 因为我后来使用 Slick 做 ORM 并且让所有这些列类型不为空会更好(因此非选项 [X])。这是静态数据,因此列值不会为空,也不会更改。

与 MySQL 不同,Postgres 没有发现原始查询列已经全部为 NOT NULL。

我想避免在我的脚本中一个一个地添加约束,并且在查询模式更改时容易破坏解决方案,即

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

怎么办?

您可以使用元数据 table 并构建动态查询:

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<>Fiddle demo