【问题标题】:Setting multiple alter statements on a single column in one command SQL在一个命令 SQL 中对单个列设置多个更改语句
【发布时间】:2022-01-07 13:29:51
【问题描述】:

我正在尝试在一个命令中修改列数据类型和名称。

是否可以在一个代码行的一列上应用多个更改语句?这是正确的语法吗?

ALTER TABLE tb_table
ALTER COLUMN colum_date 
SET DATA TYPE TIMESTAMP NOT NULL
RENAME COLUMN colum_date TO colum_timestamp;

我一直在寻找相关的参考书目,但在网上找不到太多信息。

【问题讨论】:

    标签: postgresql ddl


    【解决方案1】:

    根据documentation的说法,重命名一列是一个不能与其他人组合但需要自己声明的动作。所以不,你不能在一个声明中做你想做的事。

    但您可以在一笔交易中完成。设置数据类型和设置NOT NULL 约束需要两个操作。但是这两个动作都可以在一个语句中。

    BEGIN TRANSACTION;
    ALTER TABLE tb_table
                ALTER COLUMN colum_date 
                             SET DATA TYPE TIMESTAMP,
                ALTER COLUMN colum_date
                             SET NOT NULL;
    ALTER TABLE tb_table
                RENAME COLUMN colum_date
                              TO colum_timestamp;
    COMMIT TRANSACTION;
    

    【讨论】:

    • 哇...我认为 DDL 不是事务性的。也许我是从 Oracle 那里得到的,idk。
    • @TheImpaler: wiki.postgresql.org/wiki/… 对此有所了解。
    • 你每天都会学到新东西。谢谢你的链接。
    • @stickybit 可以在 plpgsql 函数中实现吗?
    • @KlauRau:不是在函数中,而是在过程中应该可以工作。
    猜你喜欢
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 2011-04-19
    • 2016-06-21
    • 1970-01-01
    • 2021-02-12
    相关资源
    最近更新 更多