PostgreSQL =>没有时区的ALTER TABLE - >带有时区,使用select for TZ

问题描述 投票:0回答:1

我正在尝试转换列,并保留指定时区中的数据。我有一个脚本,但最后在SELECT上出错了。

ALTER TABLE schema.table 
ALTER COLUMN column_date TYPE TIMESTAMP WITH TIME ZONE
USING column_date AT TIME ZONE (SELECT value FROM schema.table WHERE id = 'timezone');

ERROR:  cannot use subquery in transform expression

我有时区存储,但试图将其拉回来应用于脚本是一个挑战。我知道我可以简单地将时区硬编码为'EST | CST | PST'等,但我需要应用多个数据库(每个数据库有多个更改),因此最后需要SELECT。有没有办法实现这个目标?

我在这个问题上倾注了几个问题;虽然有些人接近了,但他们并不完全满足需求(我很抱歉,如果这是重复的话,我花了一些时间寻找答案)。

[已解决]:使用2个单独的查询

ALTER TABLE schema.table 
ALTER COLUMN column_date TYPE TIMESTAMP WITH TIME ZONE;

UPDATE schema.table 
SET column_date = column_date AT TIME ZONE 
    (SELECT value FROM schema.table WHERE id = 'timezone');
postgresql alter-table
1个回答
0
投票

您可以使用动态SQL:

DO
$$BEGIN
   EXECUTE format('ALTER TABLE ... AT TIME ZONE %L',
                  (SELECT value FROM atable ...));
END;$$;
© www.soinside.com 2019 - 2024. All rights reserved.