在pg_dump中传输时区

时间:2018-01-16 15:06:33

标签: postgresql timezone pg-dump pg-restore

我在PostgreSQL中创建了一个这样的时区:

ALTER DATABASE mydatabase SET TimeZone = 'MST';

我想在恢复的数据库中使用预设的时区。如果我通过pg_dump进行备份并使用pg_restore进行恢复,pg_settings/TimeZone将重新设置为本地时间。

如何转移时区?

1 个答案:

答案 0 :(得分:2)

示例:

t=# create database z;
CREATE DATABASE
t=# alter database z set timezone to 'UTC+2';
ALTER DATABASE
t=# select now();
             now
------------------------------
 2018-01-17 08:41:10.12834+00
(1 row)
t=# \c z
You are now connected to database "z" as user "postgres".
z=# select now();
              now
-------------------------------
 2018-01-17 06:41:15.588483-02
(1 row)

在连接到数据库z后,您可以看到客户端“默认”TimeZone已更改。但你不应该想,数据库中的日期发生了变化 - 没有。 all timezone aware timestamps are kept in UTC

  

对于带时区的时间戳,内部存储的值始终为   UTC

现在回到你的问题。事实上:

z-# \! pg_dump -d z  | grep "TimeZone"

如果您备份数据库 z ,则不会导出其设置。所以你需要使用pg_dumpall

z-# \! pg_dumpall | grep "TimeZone"
ALTER DATABASE z SET "TimeZone" TO 'UTC+2';