恢复后pgAgent无法启动

时间:2017-04-10 09:38:17

标签: postgresql pg-dump pgagent

我已经在我们的pgAgent数据库中安装PostgreSQL来安排我们的工作,这真的很有魅力!

但是,在我从测试服务器中的数据库恢复备份后,pgAgent只是无法启动。有趣的是,似乎pgAgent忽略了这个日志表中数据的当前状态,并试图从零填充它们。

请参阅日志文件中的错误消息:

postgres@postgres ERROR:  duplicate key value violates unique constraint "pga_jobsteplog_pkey"
postgres@postgres DETAIL:  Key (jslid)=(1) already exists.
postgres@postgres STATEMENT: INSERT INTO pgagent.pga_jobsteplog(jslid, jsljlgid, jsljstid, jslstatus) SELECT 1, 25, 3, 'r'  FROM pgagent.pga_jobstep WHERE jstid=3

如果您想知道如何执行备份:

pg_dumpall --file "/media/jones/Daten/fulldump.sql" --host "address-to-my-server.de" --port "5432" --username "myuser" --no-password --database "mydb" --clean --if-exists --verbose

环境:

Ubuntu 16.04
PostgreSQL 9.5
pgAgent 3.4.1-2

如何让pgAgent重新焕发活力?

来自德国的问候,

吉姆

2 个答案:

答案 0 :(得分:0)

我对这个解决方案一定不满意,但这是迄今为止唯一能解决的问题。截断日志表可以解决问题,但会删除您拥有的所有作业历史记录(对大多数用例来说没什么大不了的):

TRUNCATE TABLE pgagent.pga_jobsteplog;

如果有人有更优雅的解决方案,请在评论中告诉我。

答案 1 :(得分:0)

万一有人还在寻找,我已经找到了在这种情况下有效的方法。

登录数据库,安装pgagent扩展 执行pgagent模式的pg_restore 然后,在其余模式还原后,还原pgagent.pga_jobsteplog。 然后将每个表的序列值重置为序列所基于的列的最大值之上的1。

这样做,意味着您在pgagent上工作,并且还拥有作业和作业步骤日志。