2013-11-28 5 views
5

У меня есть две базы данных, работающие на разных серверах в разных часовых поясах. Существует несколько таблиц, содержащих timestamp with timezone.Дамп и восстановление PostgreSQL в разных часовых поясах

Мне нужно сбросить данные из одной базы данных и импортировать их в другую с правильной меткой времени и правильным часовым поясом.

Я использую следующую команду, чтобы сбросить данные:

pg_dump -a DB_NAME > dump.sql 

Я вижу данные в старой метки времени и часового пояса формате: 2013-11-29 14:30:00+02

Затем я использую команду на другой сервер для восстановления дампа:

psql -d DB_NAME -f dump.sql 

И я вижу, что временные метки и часовой пояс от старого сервера - что я считаю нормальным.

Затем я попытался поставить следующую команду в начале dump.sql

SET timezone ... 

Но до сих пор не работает. :(

Это одна операция времени. После передачи данных не нужно будет синхронизировать. Есть ли способ сделать такое преобразование с помощью pg_dump и pg_restore или подобное?

ответ

5

В Postgres тип данных timstamptz (= timestamp with time zone) магазины значения как UTC метка время внутренне (счетная целое значение микросекунды с 2000 года), которая не зависит от временной зоны этих значений отображается для. Это делает не магазина какая-либо информация о часовом поясе, как некоторые может подумать, недооценив имя. Вы можете сбросить и восстановить столько, сколько хотите.

Что вы см. у вашего клиента зависит от time zone setting сеанса.

Run (в той же сессии, чтобы избежать артефактов):

SHOW timezone; 

Если вы видите localtime то Postgres использует настройки по умолчанию вашей операционной системы сервера.

Установите другой часовой пояс (в вашей сессии с SET timezone = ...;, для вашего пользователя или глобально в файлах конфигурации), чтобы увидеть ваши временные метки, отформатированные по-разному. Имейте в виду, что настройка часового пояса в файле дампа , а не, имеет какой-либо эффект в этом случае, только настройки вашего текущего сеанса.

Подробное описание в этом соответствующий ответ:

О различных способах настройки переменных среды:

+0

'АЬТЕЕ РОЛИ .. SET TIM EZONE = 'для импорта роли с решением для меня – cske