我正在尝试转换列,并保留指定时区中的数据。我有一个脚本,但最后在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');
您可以使用动态SQL:
DO
$$BEGIN
EXECUTE format('ALTER TABLE ... AT TIME ZONE %L',
(SELECT value FROM atable ...));
END;$$;