在PITR

时间:2018-09-06 07:20:42

标签: postgresql postgresql-10 pitr

recovery.conf中,如果我们将recovery_target_time设置为2018-09-07 03:25:46(无EST)并重新启动PostgreSQL,则recovery.conf不会更改为{{1 }}。

然而PITR成功,并且仅在给定时间之前恢复记录/表。但是随后数据库仍处于恢复模式,我无法修改数据。

在第二种情况下,如果我添加EST并重新启动PostgreSQL,则recovery.done会更改为recovery.conf,但是所有内容都会恢复。我的意思是说,在2018-09-07 03:25:46之后添加的表/记录也将恢复。

其他信息:在Linux主机上进行操作。 recovery.done中的Timezonepostgresql.conf

US/Eastern配置了以下设置。其他选项已被注释掉。

postgresql.conf

`recovery.conf'启用了以下两个选项:

listen_addresses = '*'
port = 5432
max_connections = 100
shared_buffers = 128MB
dynamic_shared_memory_type = posix
wal_level = replica
archive_mode = on
archive_command = 'cp %p /archive/%f'
log_destination = 'stderr'
logging_collector =on
log_timezone = 'US/Eastern'
datestyle = 'iso, mdy'
timezone ='US/Eastern'
lc_messages = 'en_US.UTF-8'
lc_monetary ='en_US.UTF-8'
lc_numeric = 'en_US.UTF-8'
lc_time = 'en_US.UTF-8'
default_text_search_config = 'pg_catalog.english'

1 个答案:

答案 0 :(得分:1)

如您所见,恢复达到目标后会暂停。

这是因为您有hot_standby = on,而您将recovery_target_action保留为其默认值pause

您必须在recovery.conf中添加以下内容:

recovery_target_action = promote

或者,您可以连接到恢复服务器并手动完成恢复:

SELECT pg_wal_replay_resume();

要解决奥秘,为什么添加时区会有所不同,请将日志(EDT)中的时区与您使用的时区(EST)进行比较。

您的数据库在 美国东部夏令时间 中运行,该时间比UTC偏移了-4小时,而 美国东部标准时间 < / strong>偏移-5小时。

所以发生的是,使用“ EST”实际上指定了与2018-09-07 04:25:46 EDT相对应的恢复目标时间,该时间已经超过WAL的结束时间,因此PostgreSQL进行了完全恢复。