2017-04-10 54 views
0

我們在我們的PostgreSQL數據庫中安裝了pgAgent數據庫,用於安排我們的工作,這真的很有魅力!pgAgent在恢復後不會失效

但是,在我從測試服務器的數據庫恢復備份後,pgAgent根本不會啓動。有趣的是,似乎pgAgent忽略了這個日誌表中數據的當前狀態並試圖從零填充它們。

在日誌文件中看到錯誤消息:

[email protected] ERROR: duplicate key value violates unique constraint "pga_jobsteplog_pkey" 
[email protected] DETAIL: Key (jslid)=(1) already exists. 
[email protected] 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恢復生機?來自德國

問候,

吉姆

+0

您可以從pgagent模式備份數據,截斷表格,啓動pgagent,讓它隨意填充,再次截斷並恢復備份的數據。不知道它爲什麼這樣做。 –

+0

感謝您的評論!截斷表格最終會成功,但工作歷史對我們來說也很重要:-(我希望找到一個不那麼激烈的解決方案,但是你是對的......如果事情一切都很順利,我不會有任何其他選項。謝謝! –

+0

@JimJones你能看到這個問題嗎?我已經創建了pgagent工作,你能告訴我什麼是錯誤的在這個https://stackoverflow.com/questions/45670622/how-to-run-a-job -created-通過-pgagent功能於Postgres的。 –

回答

0

我絕對不愉快的解決方案,但它是唯一我能制定出爲止。截斷日誌表的伎倆,但會刪除所有你不得不作業歷史記錄(也不是什麼大不了的大多數用例):

TRUNCATE TABLE pgagent.pga_jobsteplog; 

如果任何人有一個更好的解決方案,請讓我知道:-)

0

嗯,這是我對我與pgAgent鬥爭:-)

再次上報因爲我沒能備份pgAgent序列值,我決定立即更新手動序列:

SELECT SETVAL('pgagent.pga_exception_jexid_seq', MAX(jexid)) FROM pgagent.pga_exception; 
SELECT SETVAL('pgagent.pga_job_jobid_seq', MAX(jobid)) FROM pgagent.pga_job; 
SELECT SETVAL('pgagent.pga_jobclass_jclid_seq', MAX(jclid)) FROM pgagent.pga_jobclass; 
SELECT SETVAL('pgagent.pga_joblog_jlgid_seq', MAX(jlgid)) FROM pgagent.pga_joblog; 
SELECT SETVAL('pgagent.pga_jobstep_jstid_seq', MAX(jstid)) FROM pgagent.pga_jobstep; 
SELECT SETVAL('pgagent.pga_jobsteplog_jslid_seq', MAX(jslid)) FROM pgagent.pga_jobsteplog; 
SELECT SETVAL('pgagent.pga_schedule_jscid_seq', MAX(jscid)) FROM pgagent.pga_schedule; 

幸運的是,序列並不多。儘管非常手動並且有些風險,但這些更新保留了所有的pgAgent記錄,使其能夠在恢復後繼續工作。

乾杯!