首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >recovery.conf在PITR后不会被更改为recovery.done

recovery.conf在PITR后不会被更改为recovery.done
EN

Stack Overflow用户
提问于 2018-09-06 07:20:41
回答 1查看 2.7K关注 0票数 2

recovery.conf中,如果我们将recovery_target_time设为2018-09-07 : 03:25:46 (没有EST)并重新启动PostgreSQL,则recovery.conf不会更改为recovery.done

然而,PITR是成功的,记录/表只能恢复到给定的时间。但是数据库仍然处于恢复模式,我无法修改数据。

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

其他信息:在Linux主机上执行此操作。Timezone in postgresql.conf is US/Eastern

postgresql.conf配置了以下设置。其他选项被注释掉。

代码语言:javascript
复制
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'

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

代码语言:javascript
复制
restore_command = 'cp /archive/%f %p'
recovery_target_time = '2018-09-07 03:25:46'


2018-09-07 03:35:57.745 EDT [8264] LOG:  database system was interrupted; last known up at 2018-09-07 03:23:31 EDT
2018-09-07 03:35:59.593 EDT [8264] LOG:  starting point-in-time recovery to 2018-09-07 03:25:46-04
2018-09-07 03:35:59.682 EDT [8264] LOG:  restored log file "000000010000000000000003" from archive
2018-09-07 03:35:59.722 EDT [8264] LOG:  redo starts at 0/3000028
2018-09-07 03:35:59.725 EDT [8264] LOG:  consistent recovery state reached at 0/3000130
2018-09-07 03:35:59.725 EDT [8262] LOG:  database system is ready to accept read only connections
2018-09-07 03:36:00.058 EDT [8264] LOG:  restored log file "000000010000000000000004" from archive
2018-09-07 03:36:00.097 EDT [8264] LOG:  recovery stopping before commit of transaction 562, time 2018-09-07 03:26:17.435255-04
2018-09-07 03:36:00.097 EDT [8264] LOG:  recovery has paused
2018-09-07 03:36:00.097 EDT [8264] HINT:  Execute pg_wal_replay_resume() to continue.
2018-09-07 03:36:54.138 EDT [8288] ERROR:  cannot execute CREATE TABLE in a read-only transaction
2018-09-07 03:36:54.138 EDT [8288] STATEMENT:  CREATE TABLE scale_data5 ( section NUMERIC NOT NULL, id1 NUMERIC NOT NULL, id2 NUMERIC NOT NULL );
EN

回答 1

Stack Overflow用户

发布于 2018-09-07 08:25:53

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

这是因为您拥有hot_standby = on,并且以其默认值pause离开了recovery_target_action

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

代码语言:javascript
复制
recovery_target_action = promote

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

代码语言:javascript
复制
SELECT pg_wal_replay_resume();

要解决为什么添加时区会产生差异,请将日志(EDT)中的时区与您使用的时区(EST)进行比较。

您的数据库运行在东部夏令时中,它与UTC相距-4小时,而东方标准时间被偏移-5小时。

因此,通过使用“EST”,您实际上指定了一个与2018-09-07 04:25:46 EDT相对应的恢复目标时间,该时间超过了WAL的末尾,因此PostgreSQL完成了一个完整的恢复。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52198557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档