【问题标题】:Postgres a timestamp column constraint from NOT NULL to NULLPostgres 从 NOT NULL 到 NULL 的时间戳列约束
【发布时间】:2020-10-16 12:44:33
【问题描述】:

我正在尝试运行迁移并基本上将一个非 NULL 列“修改”为 NULL。就像不需要对其进行限制一样,我已经运行了 yoyo 迁移并具有以下输出

psycopg2.ProgrammingError: syntax error at or near "timestamp"
LINE 1: ALTER TABLE shop ALTER COLUMN modified timestamp NULL

指向时间戳^

桌子本身的样子

CREATE TABLE shop (
    id SERIAL PRIMARY KEY,
    uuid uuid NOT NULL UNIQUE,
    created timestamp with time zone NOT NULL,
    modified timestamp with time zone NOT NULL,
    deleted timestamp with time zone
);

我尝试在网上搜索,并在stackoverflow上找到了一些类似的文章,但没有帮助,所以希望这里有人可以提供帮助。

编辑:

steps = [
    step("""ALTER TABLE phrases 
    ALTER COLUMN modified TYPE timestamp,
    ALTER column modified SET NULL
;""")
]

在溜溜球中迁移

【问题讨论】:

    标签: sql database postgresql constraints create-table


    【解决方案1】:

    在 Postgres 中,您可以使用 DROP NOT NULL 使列可以为空:

    ALTER TABLE shop ALTER column modified DROP NOT NULL;
    

    如果你想同时改变数据类型,那么:

    ALTER TABLE shop 
        ALTER column modified DROP NOT NULL,
        ALTER COLUMN modified TYPE timestamp
    ;
    

    Demo on DB Fiddle

    【讨论】:

    • 对于角色回复,我会做类似ALTER TABLE shop ALTER column modified SET NOT NULL;的事情吗?
    • @Stas:是的,你就是这样做的。
    猜你喜欢
    • 2014-01-28
    • 2015-04-22
    • 2020-05-09
    • 1970-01-01
    • 2010-12-27
    • 2018-08-24
    • 2022-01-19
    • 2021-11-16
    • 2020-12-18
    相关资源
    最近更新 更多