2

我在 PostgreSQL 中创建了一个时区,如下所示:

ALTER DATABASE mydatabase SET TimeZone = 'MST';

我也想在恢复的数据库中使用预设的时区。如果我通过备份它并使用它pg_dump恢复设置回本地时间。pg_restorepg_settings/TimeZone

如何转移时区?

4

1 回答 1

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更改后看到的那样。但你不应该认为,数据库中的日期发生了变化——不。所有时区感知时间戳都保存在 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';
于 2018-01-17T08:46:57.843 回答