这甚至有可能吗?如果不是,那么我会满意于不需要一一键入每个列名的方法。我的用例是我从查询创建一个表,并希望使所有列都不为NULL,因为以后我使用Slick进行ORM,并且所有这些列类型都不为null(因此非Option [X] ])。这是静态数据,因此列值也不会为null,也不会更改。
与MySQL不同,Postgres不能弄清楚原始查询列已经全部不是NULL。
我想避免在脚本中一一添加约束,并且只要查询模式发生更改(即
),就容易破坏解决方案。CREATE TABLE dentistry_procedure AS SELECT * FROM ...
ALTER TABLE dentistry_procedure ALTER column * SET NOT NULL;
如何?
答案 0 :(得分:2)
您可以使用元数据表并建立动态查询:
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';