如何将时间戳类型的 Vertica 数据库列更改为带时区的时间戳?
How to alter vertica database column of timestamp type to timestamp with timezone?
我有一个带有时间戳类型列的 vertica 数据库 table,现在我想将其更改为 "timestamp with time zone null" 类型。在创建没有时区的 table 列时,但现在对于新用户,我们想存储时区,但我没有看到任何选项。
有人可以帮我解决这个问题吗?
我已经尝试过以下查询:
ALTER TABLE product_info ALTER COLUMN "product_sold_at" SET DATA TYPE timestampt with time zone null
我相信在 table t
列 c
:
的情况下这应该有效
ALTER TABLE t ALTER COLUMN c SET NOT NULL;
ALTER TABLE t ALTER COLUMN c SET DATA TYPE TIMESTAMPTZ;
参考文献:
有些 source/target 数据类型转换您无法进行。 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;
并推进古代历史标记以从已删除的默认约束中摆脱仍然存在的link:
SELECT MAKE_AHM_NOW();
现在您可以删除旧列:
ALTER TABLE w_ts DROP COLUMN ts;
并将新列重命名为原始列的名称:
ALTER TABLE w_ts RENAME COLUMN tsz TO ts;
相当多的步骤,但它有效并且不太慢....
祝你好运
马可
我有一个带有时间戳类型列的 vertica 数据库 table,现在我想将其更改为 "timestamp with time zone null" 类型。在创建没有时区的 table 列时,但现在对于新用户,我们想存储时区,但我没有看到任何选项。
有人可以帮我解决这个问题吗?
我已经尝试过以下查询:
ALTER TABLE product_info ALTER COLUMN "product_sold_at" SET DATA TYPE timestampt with time zone null
我相信在 table t
列 c
:
ALTER TABLE t ALTER COLUMN c SET NOT NULL;
ALTER TABLE t ALTER COLUMN c SET DATA TYPE TIMESTAMPTZ;
参考文献:
有些 source/target 数据类型转换您无法进行。 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;
并推进古代历史标记以从已删除的默认约束中摆脱仍然存在的link:
SELECT MAKE_AHM_NOW();
现在您可以删除旧列:
ALTER TABLE w_ts DROP COLUMN ts;
并将新列重命名为原始列的名称:
ALTER TABLE w_ts RENAME COLUMN tsz TO ts;
相当多的步骤,但它有效并且不太慢....
祝你好运
马可