PostgreSQL PITR 无法正常工作

Yog*_*ogi 5 postgresql postgresql-9.6 pitr

我正在尝试将 PostgreSQL 数据库恢复到某个时间点。

当我仅使用restore_commandrecovery.conf,它工作正常。

restore_command = 'cp /var/lib/pgsql/pg_log_archive/%f %p'
Run Code Online (Sandbox Code Playgroud)

当我使用时recovery_target_time parameter,它没有恢复到目标时间。

restore_command = 'cp /var/lib/pgsql/pg_log_archive/%f %p'
recovery_target_time='2018-06-05 06:43:00.0'
Run Code Online (Sandbox Code Playgroud)

以下是日志文件内容:

2018-06-05 07:31:39.166 UTC [22512] LOG:  database system was interrupted; last known up at 2018-06-05 06:35:52 UTC
2018-06-05 07:31:39.664 UTC [22512] LOG:  starting point-in-time recovery to 2018-06-05 06:43:00+00
2018-06-05 07:31:39.671 UTC [22512] LOG:  restored log file "00000005.history" from archive
2018-06-05 07:31:39.769 UTC [22512] LOG:  restored log file "00000005000000020000008F" from archive
2018-06-05 07:31:39.816 UTC [22512] LOG:  redo starts at 2/8F000028
2018-06-05 07:31:39.817 UTC [22512] LOG:  consistent recovery state reached at 2/8F000130
2018-06-05 07:31:39.818 UTC [22510] LOG:  database system is ready to accept read only connections
2018-06-05 07:31:39.912 UTC [22512] LOG:  restored log file "000000050000000200000090" from archive
2018-06-05 07:31:39.996 UTC [22512] LOG:  recovery stopping before abort of transaction 9525, time 2018-06-05 06:45:02.088502+00
2018-06-05 07:31:39.996 UTC [22512] LOG:  recovery has paused
Run Code Online (Sandbox Code Playgroud)

我正在尝试将数据库实例恢复到 06:43:00。为什么直到 06:45:02 才恢复?

编辑

在第一个场景中,recovery.conf 转换为 recovery.done,但这在第二个场景中没有发生

这可能是什么原因?

Lau*_*lbe 5

你忘记设置了

recovery_target_action = 'promote'
Run Code Online (Sandbox Code Playgroud)

时间点恢复后,recovery_target_action确定 PostgreSQL 将如何继续。

默认值pause意味着 PostgreSQL 将不执行任何操作并等待您告诉它如何继续。

要完成恢复,请连接到数据库并运行

SELECT pg_wal_replay_resume();
Run Code Online (Sandbox Code Playgroud)

06:43:00 到 06:45:02 之间似乎没有记录任何数据库活动。请注意日志显示。recovery stopping before abort of transaction 9525