Sql 如何一次将所有表列设置为非空?

Sql 如何一次将所有表列设置为非空?,sql,database,postgresql,schema,Sql,Database,Postgresql,Schema,这可能吗?如果可能,怎么可能?如果不是的话,我会很乐意使用一种不需要逐个输入每个列名的方法。我的用例是,我从一个查询中创建一个表,并希望使所有列都不为NULL,因为我后来使用Slick执行ORM,并且使所有这些列类型都不为NULL(因此非选项[X])要好得多。这是静态数据,因此列值不会为null,也不会更改 与MySQL不同,Postgres没有发现原始查询列都不是空的 我希望避免在我的脚本中逐个添加约束,并且在查询模式发生更改时(例如,在 CREATE TABLE dentistry_proc

这可能吗?如果可能,怎么可能?如果不是的话,我会很乐意使用一种不需要逐个输入每个列名的方法。我的用例是,我从一个查询中创建一个表,并希望使所有列都不为NULL,因为我后来使用Slick执行ORM,并且使所有这些列类型都不为NULL(因此非选项[X])要好得多。这是静态数据,因此列值不会为null,也不会更改

与MySQL不同,Postgres没有发现原始查询列都不是空的

我希望避免在我的脚本中逐个添加约束,并且在查询模式发生更改时(例如,在

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';

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

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';