繁体   English   中英

无法将列类型从日期更改为带时区的时间戳 PostgreSQL

[英]Cannot change column type from date to timestamp with time zone in PostgreSQL

我想将 PostgreSQL 中的列类型从日期更改为带时区的时间戳。 但是 follow sql 的执行一直持续到我停止它,尽管表中只有 3 条记录并且没有任何错误或成功结果。

alter table some_table
    alter column column_date type timestamp
        using to_timestamp(extract(epoch from column_date))

同时select to_timestamp(extract(epoch from column_date)) from some_table正在正确执行,没有任何错误。

我尝试了使用表达式的另一种变体

  • using column_date::timestamptz
  • using timestamp with time zone 'epoch' + (column_date + interval '0 second') * interval '1 second'
  • using column_date AT TIME ZONE 'UTC'无效。

如果在所有记录类型中有 null 列的值立即更改,简单更改 sql

alter table some_table
    alter column column_date type timestamp
        using column_date::timestamp with time zone

我用 PostgreSQL 12

是否有适当的方法将日期更改为带时区的时间戳?

PS 我知道我可以通过创建一个具有适当类型的新列然后交换它们来完成此任务:))

这是一个如何使用 UTC 作为时区的简单示例

CREATE tABLE tm( mydate date)
 CREATE TABLE
INSERT INTO TM VALUES('2022-01-01'),('2021-01-01'),('2020-01-01')
 INSERT 0 3
SELECT * FROM tm
我的约会
2022-01-01
2021-01-01
2020-01-01
 SELECT 3
ALTER TABLE tm
ALTER COLUMN myDate TYPE timestamp with time zone
USING myDate::timestamp AT TIME ZONE 'UTC';
 ALTER TABLE
SELECT * FROM tm
我的约会
2022-01-01 00:00:00+00
2021-01-01 00:00:00+00
2020-01-01 00:00:00+00
 SELECT 3

小提琴

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM