Linux

如何從數據目錄恢復 Postgresql 集群

  • November 14, 2012

在我們的辦公室裡,我們有一個執行 Debian 5 的開發數據庫伺服器,在這台伺服器上,我們執行了一個 postgresql 8.1,但是由於伺服器無法訪問網際網路,我們使用 pg_dump_all 備份了整個集群,但是轉儲文件隨後失去了我們安裝了很多版本,8.1 版本本身都不能辨識數據庫集群,所以我的問題是,有沒有辦法重新安裝相同的 postgres 8.1 並告訴他從數據文件夾中獲取舊集群?或者備份應該只通過轉儲文件?我只有數據文件夾,但 9.2、8.4 或相同的 8.1 都無法辨識集群。這是我在嘗試使用 pg 8.1 初始化同一個集群時遇到的錯誤

postgres@Desarrollo-SDQ-VE:/opt/postgres/8.1/bin$ ./postgres -D  /databases/postgresql/8.1/ve/ -c config_file=/etc/postgresql/8.1/ve/postgresql.conf
[2012-11-13 10:42:22 AST:18359id]     2012-11-13 10:42:22 AST    2012-11-13 10:42:22.137 AST  FATAL:  database files are incompatible with server
[2012-11-13 10:42:22 AST:18359id]     2012-11-13 10:42:22 AST    2012-11-13 10:42:22.138 AST  DETAIL:  The database cluster was initialized with HAVE_INT64_TIMESTAMP but the server was compiled without HAVE_INT64_TIMESTAMP.
[2012-11-13 10:42:22 AST:18359id]     2012-11-13 10:42:22 AST    2012-11-13 10:42:22.138 AST  HINT:  It looks like you need to recompile or initdb.

任何想法?

這是我要做的:

由此可見:

DEB_CONFIGURE_EXTRA_FLAGS := --mandir=\$${prefix}/share/postgresql/8.1/man \
                   --with-docdir=\$${prefix}/share/doc/postgresql-doc-8.1 \
                   --datadir=\$${prefix}/share/postgresql/8.1 \
                   --bindir=\$${prefix}/lib/postgresql/8.1/bin \
                   --includedir=\$${prefix}/include/postgresql/ \
                   --enable-nls \
                   --enable-integer-datetimes \
                   --enable-thread-safety \
                   --enable-debug \
                   --disable-rpath \
                   --with-tcl \
                   --with-perl \
                   --with-python \
                   --with-pam \
                   --with-krb5 \
                   --with-openssl \
                   --with-gnu-ld \
                   --with-tclconfig=/usr/lib/tcl$(TCL_VER) \
                   --with-tkconfig=/usr/lib/tk$(TCL_VER) \
                   --with-includes=/usr/include/tcl$(TCL_VER) \
                   --with-pgport=5432 \
                   $(ARCH_OPTS) \
                   CFLAGS='$(CFLAGS)' \
                   LDFLAGS='$(LDFLAGS)'

這應該可以幫助您進行自己的原始碼建構。特別是我認為您可能需要--enable-integer-datetimes.

或者,您可以dpkg-buildpackage -rfakeroot -uc -b建構包,然後將其複製到目標伺服器並安裝它。

引用自:https://dba.stackexchange.com/questions/28651