我在PostgreSQL中创建了一个这样的时区:
ALTER DATABASE mydatabase SET TimeZone = 'MST';
我想在恢复的数据库中使用预设的时区。如果我通过pg_dump
进行备份并使用pg_restore
进行恢复,pg_settings/TimeZone
将重新设置为本地时间。
如何转移时区?
答案 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';