【问题标题】:How can I verify an alter column data type change with sqitch postgresql?如何使用 sqitch postgresql 验证更改列数据类型更改?
【发布时间】:2018-08-17 21:31:44
【问题描述】:

我正在进行以下deploy 更改。将timestamp 列的值更改为timestamptz

-- Alter the is_deleted flags to be timestamp with time zone
alter table source_meta.sources alter column is_deleted set data type timestamptz
      using
        is_deleted at time zone 'UTC';
alter table source_meta.series alter column is_deleted set data type timestamptz
      using
        is_deleted at time zone 'UTC';

如何编写verify 脚本,如果未更改数据类型会出错?

还需要revert 的帮助才能从时间戳记中删除时区。

【问题讨论】:

    标签: postgresql database-migration postgresql-10 sqitch


    【解决方案1】:

    @nackjicholson,您的解决方案对我来说看起来不错。如果您想要更多信息的错误消息,可以将其包装在 DO 块中并引发错误:

    DO $$
    BEGIN
        PERFORM TRUE
           FROM   information_schema.columns
          WHERE  table_name.  = 'sources'
            AND column_name = 'is_deleted'
            AND data_type   = 'timestamp with time zone';
        IF NOT FOUND THEN
            RAISE EXCEPTION 'sources.is_deleted type is not timestamptz';
        END IF;
    END;
    $$;
    

    【讨论】:

    • 感谢大卫的帮助!
    【解决方案2】:
    SELECT 1/count(*)
    FROM   information_schema.columns
    WHERE  table_name = 'sources'
     and column_name = 'is_deleted'
     and data_type = 'timestamp with time zone';
    

    这就是我能想到的,但不是专家,我不确定这是这样做的方法还是只是愚蠢。 :)

    如果没有找到符合该条件的行,则会引发除以零错误。

    【讨论】:

      猜你喜欢
      • 2021-07-26
      • 2011-11-02
      • 2016-09-04
      • 2012-12-08
      • 2021-05-19
      • 2012-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多