2014-02-06 288 views
1

我已經編寫了自己的腳本來生成還原SQL文件,並且執行還原的第一個任務之一是刪除應該存在的所有約束。 (別擔心,我限制我的腳本存在在備份的時間的。)丟棄約束拋出錯誤

這裏是一個通用的代碼片段

ALTER TABLE ONLY data DROP CONSTRAINT IF EXISTS data_pkey; 

測試它在我自己的開發環境它作爲預期。然而,運行它相同的代碼拋出錯誤在生產服務器上:

ERROR: syntax error at or near "EXISTS" 
LINE 1: ALTER TABLE ONLY data DROP CONSTRAINT IF EXISTS data_pkey; 

如果IF EXISTS部分被刪除,語法是:

ALTER TABLE ONLY data DROP CONSTRAINT data_pkey; 

腳本運行沒有問題。

我檢查了ALTER TABLE部分下的postgres.org,我的語法是有效的。

+3

兩種安裝的版本? Postgres 9.2引入了「IF EXISTS」。 –

+0

如果我的開發環境運行在9.1.11之前,IF EXISTS必須在9.2之前引入。但我認爲你回答了這個問題。通過生產服務器上的phpPgAdmin查詢版本,它只是8.4,而不是9.1,因爲文檔讓我相信, – dwlamb

+0

是的,我的錯誤 - 它是9.0而不是9.2。 –

回答

1

至於舊版本,你可以一個解決辦法:

  • 無條件刪除約束和捕獲錯誤;或

  • 請檢查information_schemapg_catalog的約束條件,只有在發現它已存在的情況下才會刪除它。

+0

對我的後續問題的期待很高:因爲版本爲8.4,所以我不能使用IF IFISTS,我該如何部署腳本? :-) 感謝你的回答 – dwlamb