PostgreSQL在不同的时区进行转储和恢复



我有两个数据库在不同时区的不同服务器上运行。有几个表包含timestamp with timezone

我需要从一个数据库转储数据,并将其导入到具有正确时间戳和时区的另一个数据库。

我使用以下命令转储数据:

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或类似的方法来进行这种转换?

数据类型为timstamptz(=timestamp with time zone)的Postgres内部将值存储为UTC时间戳(自2000年以来以微秒计的整数值),该时间戳与显示这些值的时区无关。它确实而不是像一些人可能认为的那样存储任何时区信息,从而误判名称。您可以随意转储和恢复。

在客户端中看到的 内容取决于会话的时区设置。

运行(在同一会话中以避免工件):

SHOW timezone;

如果您看到localtime,那么Postgres将使用服务器操作系统的默认设置。

设置不同的时区(在使用SET timezone = ...;的会话中,为您的用户或在配置文件中全局设置),以查看不同格式的时间戳。请注意,转储文件中的时区设置在这种情况下没有任何效果,只有当前会话的设置有效果。

相关答案中的详细解释:

  • 在Rails和PostgreSQL中完全忽略时区

关于设置环境变量的各种方法:

  • search_ path如何影响标识符解析和"搜索路径";当前模式"

相关内容

  • 没有找到相关文章

最新更新