如何将时间戳类型的vertica数据库列更改为带时区的时间戳?

时间:2017-06-23 10:10:50

标签: database vertica vsql

我有一个vertica数据库表,其列的类型为timestamp,现在我想将其更改为" timestamp with time zone null"。创建没有时区创建的表格列,但现在为新用户创建时,我们想存储时区,但我没有看到任何选项。

有人可以帮我吗?

我已经尝试过以下查询:

ALTER TABLE product_info ALTER COLUMN" product_sold_at" SET DATA TYPE timestampt with time zone null

2 个答案:

答案 0 :(得分:1)

您无法进行某些源/目标数据类型转换。 TIMESTAMP到时区的TIMESTAMP就是其中之一:

SQL>ALTER TABLE w_ts ALTER COLUMN ts SET DATA TYPE TIMESTAMP WITH TIME ZONE;
executing statement returns SQL_ERROR:
0A000:1:2377:ROLLBACK 2377:  Cannot convert column "ts" from 
"timestamp" to type "timestamptz"

解决方法可能是:

ALTER TABLE w_ts ADD COLUMN tsz TIMESTAMP WITH TIME ZONE DEFAULT ts;

这会添加一个包含新类型的列,并使用旧列的内容立即填充。

现在删除默认约束:

ALTER TABLE w_ts ALTER COLUMN tsz DROP DEFAULT;

推进古代历史标记,以摆脱默认约束下降的现有链接:

SELECT MAKE_AHM_NOW();

现在您可以删除旧列:

ALTER TABLE w_ts DROP COLUMN ts;

并将新列重命名为原始列的名称:

ALTER TABLE w_ts RENAME COLUMN tsz TO ts;

相当多的步骤,但它有效并且不会太慢......

祝你好运

答案 1 :(得分:0)

我认为这应该适用于包含t列的表c

ALTER TABLE t ALTER COLUMN c SET NOT NULL;
ALTER TABLE t ALTER COLUMN c SET DATA TYPE TIMESTAMPTZ;

参考文献: