【问题标题】:How to set all table columns to NOT NULL at once?如何一次将所有表列设置为 NOT NULL?
【发布时间】:2020-01-27 19:12:37
【问题描述】:

这甚至可能吗,如果可以的话怎么办?如果不是,那么我会对一种不需要逐个键入每个列名的方式感到满意。我的用例是我从查询创建一个表,并希望所有列都不是 NULL,因为我后来使用 Slick 执行 ORM,并且让所有这些列类型不为空(因此非 Option[X ])。这是静态数据,因此列值不会为空,也不会更改。

与 MySQL 不同,Postgres 无法确定原始查询列已经全部为 NOT NULL。

我想避免在我的脚本中一一添加约束,并且在查询架构发生更改时容易破坏解决方案,即

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

怎么做?

【问题讨论】:

    标签: sql database postgresql schema


    【解决方案1】:

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

    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

    【讨论】:

      猜你喜欢
      • 2020-10-20
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多