2012-10-05 134 views
4

我想上傳一個數據庫,我在本地開發,到我們的開發服務器。POSTGRESQL 9.1備份和恢復到8.4

我在我的機器上安裝了PostgreSQL 9.1,開發服務器使用8.4。

當嘗試使用9.1創建轉儲文件將數據庫恢復到8.4,我得到的錯誤:

pg_restore: [archiver (db)] could not execute query: ERROR: syntax error at or near "EXTENSION" 
LINE 1: CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalo... 

和快速的研究告訴我,「擴展」之前,不至9.1存在。

我不太確定我應該在pg_dump中尋找一個忽略「擴展」的選項,因爲我試圖上傳的數據庫依賴於大多數數據的PostGIS擴展。

在升級開發服務器和開發服務器上安裝了PostGIS是一種選擇,我想知道不同的途徑,其中一個我不需要在服務器上編輯任何內容,同時保持數據庫的功能我開發了。

當然,歡迎使用其他解決方法,我將數據庫上傳到服務器的唯一目標是減少每次需要爲我們的團隊部署某些內容時我必須對項目執行的重新配置。

回答

3

背向數據庫可能很痛苦也很困難。

您可以嘗試使用8.4的pg_dump來轉儲它,但它可能會失敗。

您可能需要從--schema-only轉儲文本文件中提取表格和函數定義,然後手動將它們加載到舊數據庫中,然後執行pg_dump --data-only並恢復導入數據。

之後,如果你要繼續在你的機器上工作,安裝PostgreSQL 8.4並將其用於進一步開發,所以你不會引入更多的不兼容性,所以很容易移動轉儲。

在你的位置,我只是將過時的目標服務器升級到9.1。

+0

Craig說的一切,但首先在本地安裝8.4,並在那裏完成 - 只要每個端口都在自己的端口上,就可以運行PG的多個副本。你幾乎肯定會運行不同版本的PostGIS,所以這是一個簡單的過程的可能性非常小。版本號*意味着什麼*,在開始項目之前需要閱讀,而不是在完成之後閱讀。 –

7

這是一箇舊的帖子,但我今天有同樣的問題,並有一個更好的更可靠的方式加載PG 9.1分貝到PG 8.4服務器。由Craig提出的方法將在目標機器上失敗,因爲不會創建PLPGSQL語言。

pg_dump -Upostgres -hlocalhost > 9.1.db 

替換該行

CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; 

這一行

CREATE LANGUAGE plpgsql; 

刪除這一行或將其註釋掉

COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; 

可以使用SED進行更改

由於應用程序依賴性,通常無法升級8.4服務器。