【问题标题】:PostgreSQL: Alter column type without data conversion for compatible typesPostgreSQL:更改列类型而不进行兼容类型的数据转换
【发布时间】:2023-04-01 20:34:01
【问题描述】:

我有一个大表shipments,其列time 的数据类型为timestamp(0) with time zone,即PostgreSQL 将所有微秒四舍五入为秒。

我想将time的数据类型转换为允许微秒,即timestamp with time zone,但是表很大,所以我想更改类型:

ALTER TABLE shipments
  ALTER COLUMN time
  TYPE timestamptz;

...但是转换存储在此列中的数据,考虑到timestamp(0)timestamp 完全兼容 - 因为在我的情况下,数据转换将花费很多 的时间。我怎样才能做到这一点?

提前致谢!

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    扩大价值不是问题。但是从“无时区”更改为“有时区”可能是。如果您在运行命令时设置的“时区”是“UTC”,它将不会重写表格。

    如果设置不是 UTC,则需要重写表以便应用偏移量。 (我不知道我是否同意这是它应该做的,我以前没有考虑过。但无论如何它就是这样做的。)

    【讨论】:

    • 感谢您的回答,对问题进行了很好的理论研究!
    【解决方案2】:
    ALTER TABLE shipments ALTER COLUMN time TYPE timestamptz
    

    不会转换已存储在表中的数据。

    只有新插入的数据和更新的数据会以微秒为单位存储。

    dbfiddle 中查看演示。

    【讨论】:

    • 感谢您的回答,小提琴真棒!
    猜你喜欢
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2020-05-28
    • 2015-08-17
    • 1970-01-01
    • 2020-08-20
    相关资源
    最近更新 更多