PostgreSQL => ALTER TABLE без часового пояса -> с часовым поясом, используя select для TZ - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь преобразовать столбец и сохранить данные в указанном часовом поясе. У меня есть скрипт, но в конце он выдает ошибку 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. Есть ли способ сделать это?

Я обдумал несколько вопросов на эту тему; в то время как некоторые подошли близко, они не совсем отвечают потребностям (мои извинения, если это дубликат, я потратил время на поиск ответа).

[РЕШЕНО]: использование двух отдельных запросов

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');

1 Ответ

0 голосов
/ 05 марта 2019

Вы можете использовать динамический SQL:

DO
$$BEGIN
   EXECUTE format('ALTER TABLE ... AT TIME ZONE %L',
                  (SELECT value FROM atable ...));
END;$$;
...