0

我有一个带有时间戳类型列的 vertica 数据库表,现在我想将其更改为“时区为空的时间戳”类型。在创建没有时区的表列时,但现在对于我们想要存储时区的新用户,但我没有看到任何选项。

有人可以帮我吗?

我已经尝试过以下查询:

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

4

2 回答 2

1

有一些您无法进行的源/目标数据类型转换。TIMESTAMP 到 TIMESTAMP WITH TIME ZONE 就是其中之一:

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;

相当多的步骤,但它可以工作并且不会太慢......

祝你好运

马可

于 2017-06-27T09:23:38.660 回答
0

我相信这应该在给定一个t带有列的表的情况下工作c

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

参考:

于 2017-06-23T10:15:16.650 回答