最近,阿里云催促一位朋友赶忙处理系统漏洞,再不处理就停机了。这位朋友在阿里云上,在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