最近,阿里云催促一位朋友赶紧处理系统漏洞,再不处理就停机了。这位朋友在阿里云上,在CentOS 6主机上部署的是32位的PostgreSQL 8.1,他要用这个。
想来想去,还是在CentOS 7上安装PostgreSQL 8.1。前者是64位的操作系统,后者是32位的应用程序。能不能安装成功呢?那得试一试才知道。于是,到PostgreSQL官网上去下载,发现只有名称,没有软件包,RPM或者源代码都没有。幸好,那位朋友保留有源码备份。
第1步
将源码拷贝到VMware Workstation Pro中的一台CentOS 虚拟机中。
# tar xvf postgresql-8.1.23.tar.gz
# cd postgresql-8.1.23
第2步
编译。我直接运行的是:./configure
实际上,查看编译日志config.log,缺省的编译参数如下:
./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.
查看官网的安装说明,才知道,Readline是psql命令行工具的助手,缺省是要安装的。它能帮助记住通过psql运行过的命令,能用上、下方向键翻看这些命令。要安装两个软件包readline、readline-devel。
第3步
补充缺少的软件。
# make clean
# yum install -y bison perl python readline readline-devel readline zlib zlib-devel
安装了readline、readline-devel。
第4步
# 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目录设置为数据库的存放目录,且创建了数据库。
还是出错了。如下:
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的版本过高。在配置的时候需要特殊参数为其降级。
第5步
# ./configure CFLAGS="-fno-aggressive-loop-optimizations"
# make
# make install
这个参数则解决了前面GCC版本过高的问题。
第6步
启动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
参考资料:
1、https://www.postgresql.org/docs/8.1/install-requirements.html