2010-09-01 70 views
1

我將Ubuntu 8.04升級到Ubuntu 10.04。不幸的是,升級過程還將Postgres 8.3安裝更新爲Postgres 8.4安裝。我的感覺是,雖然數據庫引擎二進制文件已經更新,但數據庫本身並沒有被遷移,因此它不能被8.4加載。 由於8.3數據格式與8.4格式不兼容,因此改變postgresql.conf是不夠的,我也不能在我的8.4安裝中使用pg_dump將Postgresql 8.3數據庫文件升級到8.4

我需要一種方法將我以前的基礎從8.3升級到8.4,沒有訪問8.3引擎,只有8.4。

任何線索?

回答

0

您必須在源代碼臨時位置安裝PostgreSQL 8.3,在那裏複製您的舊數據,啓動Pg,使用pd_dumpall轉儲它的數據,然後將這些數據導入到新的Postgres中。

沒有安裝Pg 8.3就不可能。

+0

這工作就像一個魅力!我從源代碼編譯它,使用--enable-integer-datetimes和--without-readline。 只有當我能夠pg_dumpall。 謝謝! – SCO 2010-09-02 11:44:57

0

確保您在嘗試任何操作之前備份所有內容。

pg_migrator項目,我認爲會爲你做,但我不確定它是否需要8.3應用程序或源代碼。

+0

是的我認爲需要一些東西(來源我們的二進制文件),不記得哪一個。另外,它的設置看起來比8.3的編譯/啓動更復雜。 無論如何,感謝您的幫助! – SCO 2010-09-02 11:48:16

7

Debian中的postgres軟件包,也就是Ubuntu有一個非常明確定義的從一個Postgres版本升級到另一個版本的方式。該過程在/usr/share/doc/postgresql-common/README.Debian記錄如下:

Default clusters and upgrading 
------------------------------ 
When installing a postgresql-X.Y package from scratch, a default 
cluster 'main' will automatically be created. This operation is 
equivalent to doing 'pg_createcluster X.Y main --start'. 

Due to this default cluster, an immediate attempt to upgrade an 
earlier 'main' cluster to a new version will fail and you need to 
remove the newer default cluster first. E. g., if you have 
postgresql-8.2 installed and want to upgrade to 8.3, you first install 
postgresql-8.3: 

    apt-get install postgresql-8.3 

Then drop the default 8.3 cluster: 

    pg_dropcluster 8.3 main --stop 

And then upgrade the 8.2 cluster to 8.3: 

    pg_upgradecluster 8.2 main 

做到這一點的最佳時間是前ugrading一個版本的Ubuntu在所述版本你正在運行的Postgresql已經被刪除,即在這個例子中,而在一個可以安裝Postgres 8.3和Postgres 8.4的Ubuntu版本上。就我而言,我從輕率走向業力,將8.3升級到8.4,然後從業力轉向清醒。

上述升級過程非常流暢。 * pg_upgradecluster *命令將停止舊版本,遷移數據,然後在與舊版本相同的端口上啓動新版本,最後在新端口上啓動舊版本。

如果您在遷移到缺少postgres 8.3的Ubuntu版本之前沒有遷移8.3 postgres數據,遷移仍然很簡單。通過增加業報Ubuntu的存儲庫的/etc/apt/sources.list開始:

deb http://archive.ubuntu.com/ubuntu/ karmic main restricted universe 

安裝PostgreSQL 8.3:

apt-get update && apt-get install postgresql-8.3 

放下你的8.4集羣。 警告:這將刪除postgresql 8.4安裝中的數據(如果有的話)。但如果你只是這樣做,因爲你需要將你的8.3升級到8.4,那麼你的8.4集羣中將沒有數據。

pg_dropcluster 8.4 main --stop 

然後是8.3羣集升級到8.4:

pg_upgradecluster 8.3 main 

最後,除去的PostgreSQL-8。3軟件包,並從/etc/apt/sources.list中刪除jaunty-line,然後再運行apt-get update

像往常一樣,在執行上述任何操作之前先備份postgres目錄總是一個好主意。