在一个命令 SQL 中对单个列设置多个更改语句
Posted
技术标签:
【中文标题】在一个命令 SQL 中对单个列设置多个更改语句【英文标题】:Setting multiple alter statements on a single column in one command 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;
我一直在寻找相关的参考书目,但在网上找不到太多信息。
【问题讨论】:
【参考方案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:不是在函数中,而是在过程中应该可以工作。以上是关于在一个命令 SQL 中对单个列设置多个更改语句的主要内容,如果未能解决你的问题,请参考以下文章