最近,阿里雲催促一位朋友趕忙處理系統漏洞,再不處理就停機了。這位朋友在阿里雲上,在CentOS 6主機上部署的是32位的PostgreSQL 8.1,他要用這個。html
想來想去,仍是在CentOS 7上安裝PostgreSQL 8.1。前者是64位的操做系統,後者是32位的應用程序。能不能安裝成功呢?那得試一試才知道。因而,到PostgreSQL官網上去下載,發現只有名稱,沒有軟件包,RPM或者源代碼都沒有。幸虧,那位朋友保留有源碼備份。java
將源碼拷貝到VMware Workstation Pro中的一臺CentOS 虛擬機中。python
# tar xvf postgresql-8.1.23.tar.gz # cd postgresql-8.1.23
編譯。我直接運行的是:./configurelinux
實際上,查看編譯日誌config.log,缺省的編譯參數以下:c++
./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
結果顯示了一個錯誤:Readline library not found.sql
查看官網的安裝說明,才知道,Readline是psql命令行工具的助手,缺省是要安裝的。它能幫助記住經過psql運行過的命令,能用上、下方向鍵翻看這些命令。要安裝兩個軟件包readline、readline-devel。數據庫
補充缺乏的軟件。express
# make clean # yum install -y bison perl python readline readline-devel readline zlib zlib-devel
安裝了readline、readline-devel。bootstrap
# useradd postgres # mkdir /usr/local/pgsql/data # chown postgres /usr/local/pgsql/data # /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
PostgreSQL須要postgres用戶來運行。因而添加了這個用戶,而且將數據目錄的權限授予之。上面最後一條,則將/usr/local/pgsql/data目錄設置爲數據庫的存放目錄,且建立了數據庫。vim
仍是出錯了。以下:
creating template1 database in data/base/1 ... ok
initializing pg_authid ... FATAL: wrong number of index expressions
child process exited with exit code 1
initdb: removing contents of data directory "data"
搜索了好久,才知道,這是由於gcc的版本太高。在配置的時候須要特殊參數爲其降級。
# ./configure CFLAGS="-fno-aggressive-loop-optimizations" # make # make install
這個參數則解決了前面GCC版本太高的問題。
啓動PostgreSQL,建立數據庫testdb,將原先備份的testdb.sql導入到testdb中。最後,爲postgres用戶設置密碼123456。
# /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data & # /usr/local/pgsql/bin/createdb -U postgres testdb -E SQL_ASCII -D pg_default # /usr/local/pgsql/bin/psql -U postgres testdb < /backup/testdb.sql # /usr/local/pgsql/bin/psql -U postgres postgres# alter user postgres with password '123456'; \q;
最後固然還有幾件事情要作:
1)設置監聽的IP
# vim /usr/local/data/postgresql.conf listen = "11.22.33.44" //監聽某個IP地址 或者 listen = '*' //監聽全部IP地址
2)啓用密碼驗證
在/usr/local/data/pg_hba.conf最後添加以下一行:
host all all 0.0.0.0 0.0.0.0 md5
備份數據庫
/usr/local/pgsql/bin/pg_dump -U postgres mydatabase > /backup/mydatabase.sql
建立數據庫
/usr/local/pgsql/bin/createdb -U postgres mydatabase -E SQL_ASCII -D pg_default
導入數據庫
/usr/local/pgsql/bin/psql -U postgres -d mydatabase < ./backup/mydatabase .sql
刪除數據庫
/usr/local/pgsql/bin/dropdb -U postgres mydatabase
啓動數據庫
/usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data
中止數據庫
/usr/local/pgsql/bin/pg_ctl stop -D /usr/local/pgsql/data
參考資料:
一、https://www.postgresql.org/docs/8.1/install-requirements.html