如何一次将所有 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';
这可能吗,如果可能的话怎么办?如果没有,那么我会很高兴有一种不需要一个一个地输入每个列名的方法。我的用例是我从查询中创建了一个 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';