怎样安装指定版本PostgreSQL

2018年8月9日 | 分类: 【技术】

参考:https://amon.org/postgresql
参考:https://amon.org/phppgadmin

【安装(编译)】

参考:https://www.jb51.net/article/104829.htm

以安装PostgreSQL v8.1.23为例:

wget https://ftp.postgresql.org/pub/source/v8.1.23/postgresql-8.1.23.tar.gz && tar zxvf postgresql-8.1.23.tar.gz && cd postgresql-8.1.23
./configure --prefix=/usr/local/pgsql --disable-debug –enable-thread-safety

如果你需要编译PostgreSQL的JDBC支持的话,必须拥有一个JDK, Apache Ant工具,设定了JAVA_HOME和ANT_HOME环境变量,然后再配置的时候使用–with-java来配置,如果设置正确的话,PostgreSQL的JDBC驱动将出现在$prefix/share/java下面。

比如:

JAVA_HOME=/opt/j2sdk
ANT_HOME=/opt/ant

PostgreSQL的配置脚本可以接受很多的参数,这些参数用来告诉configure脚本哪些特性要编译,哪些特性不需要,具体的参数信息的说明可以通过执行./configure –help来得到。
下面解释一下上面配置命令的参数的意义。

1. –prefix=/opt/pgsql :用来决定编译后的PostgreSQL程序安装的根目录,当make完成之后,make install将把程序安装到/opt/pgsql下面,并在下面建立相应的目录来存放程序的可执行文件,开发库,头文件等目录,象下面这样:bin doc include lib man share

2. –disable-debug :告诉configure脚本在执行编译的时候不要编译调试信息,当然这个选项不是控制是否生成用来进行代码跟踪的调试信息,而是控制在程序执行过程中不要输出那些用来调试的信息。这样可以提高程序的运行效率。如果想编译一个优化的不包括用来进行代码跟踪的调试信息的版本,你需要在执行你的configure脚本的时候,设定你的CFLAGS,CXXFLAGS,CPPFLAGS等环境变量,使其不包括-g选项。而使用-O2,或者-O3来代替。

3. –enable-thread-safe 选项告诉configure脚本用来编译线程安全的客户库。

当配置脚本执行完之后,我们就可以执行make来真正的构建PostgreSQL数据库服务器。

执行:

make

当make结束之后,如果出现了下面的内容,那么表示你选择的特性已经被正确的编译完成了。

All of PostgreSQL successfully made. Ready to install.

接下来:

make install

完成之后:

PostgreSQL installation complete.

安装已经成功完成。

察看安装目录下面的目录结构,可以看到bin doc include lib man share这样的目录。

1. bin下面,存放了用来执行一些PostgreSQL服务或者相关操作的命令。
2. doc下面安装的是随PostgreSQL发布的文档,使用的是html格式,从7.4版本开始,PostgreSQL的文档被合并到了一个大的文档,而不是以前那种分成各种不同手册的形式。
3. include下面包含的是用C/C++开发PostgreSQL应用程序要使用的头文件。
4. lib下面存放的是运行PostgreSQL数据库服务器或者相关工具所需要的库文件。
5. man下面是相关命令或者工具的手册页。
6. share下面存放的是一些公共的数据,如果你编译了PostgreSQL的JDBC支持,那么这里面就会有一个java目录,里面会有postgresql.jar文件,是PostgreSQL的JDBC驱动程序。

PostgreSQL的初始配置

在成功的安装了数据库之后,我们需要作一些初始化工作,这样我们才能正常的启动数据库服务器,开发我们的数据库应用。

首先我们要设置PATH,因为我们的程序没有安装到已有的PATH的下面,所以我们需要添加 $prefix/bin 到系统的 PATH 中,这样我们的程序就可以直接使用相应的文件。但是光添加了路径,我们的程序在运行的时候还不能找到所需要的库,所以我们需要修改系统查找的库路径的信息。在Linux下面,这可以通过两种方式来实现,一是修改环境变量LD_LIBRARY_PATH,这样我们就可以在/etc/profile里面添加一句:

export LD_LIBRARY_PATH=/opt/pgsql/lib:$LD_LIBRARY_PATH

。或者我们可以使用另外一种方式,将PostgreSQL的库路径添加到 /etc/ld.so.conf 文件里面,然后执行一下 ldconfig 命令,这样系统就会创建在这个文件总所有路径下面的库的信息缓存,当系统需要寻找系统的库的时候,会首先找到这个缓存,然后就可以定位到正确的路径来装载所需的运行库。

另外,如果我们希望能使用man来查询手册页,那么还需要设置MANPATH这个环境变量,这样我们就可以直接通过man psql来查询psql这个命令怎么使用了。你可以在系统级的脚本上修改这个环境变量,或者也可以在你自己用户目录下的启动脚本来修改这个环境变量,使用下面的命令就可以了

export MANPATH=/opt/pgsql/man:$MANPATH

PostgreSQL建议用户使用一个单独的用户帐号来运行PostgreSQL的服务器,一般推荐postgres用户,因为在很多脚本里面都使用了这个用户帐号。所以接下来我们要创建postgres用户。根据你系统的文档找出合适的添加用户的方法。

/usr/sbin/useradd postgres
passwd postgres

设置postgres用户的密码,在后面讲到启动和停止数据库服务器的时候会使用到这个密码。所以一定要记住。在你修改了数据库的某些配置之后,如果你想重新启动数据库,启动脚本会问你这个密码。

一般情况下我们希望PostgreSQL能把数据库文件放在一个独立的位置,而不是postgres用户的主目录。(当然我们也可以让他们使用同一个目录)。接下来我们创建一个目录用来存放PostgreSQL的数据库文件和PostgreSQL服务起运行时所产生的文件,在下面的例子中我们把这个目录放到/var/lib下面,并且命名为pgsql/data,执行下面的命令来创建这个目录:

mkdir -p /var/lib/pgsql/data

创建了目录之后,因为这个目录要被postgres用户使用,所以我们改变这个目录的权限,把它的所属权改为postgres,执行命令

chown postgres /var/lib/pgsql/data。

在完成了上面的步骤之后,我们就可以执行initdb命令来初始化PostgreSQL服务器的设置,执行下面的命令:

su - postgres //切换到postgres用户来执行下面的命令。
initdb -D /var/lib/pgsql/data

输出结果如下:

The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale zh_CN.GB18030.

fixing permissions on existing directory /var/lib/pgsql/data/... ok
creating directory /var/lib/pgsql/data//base... ok
creating directory /var/lib/pgsql/data//global... ok
creating directory /var/lib/pgsql/data//pg_xlog... ok
creating directory /var/lib/pgsql/data//pg_clog... ok
selecting default max_connections... 100
selecting default shared_buffers... 1000
creating configuration files... ok
creating template1 database in /var/lib/pgsql/data//base/1... ok
initializing pg_shadow... ok
enabling unlimited row size for system tables... ok
initializing pg_depend... ok
creating system views... ok
loading pg_description... ok
creating conversions... ok
setting privileges on built-in objects... ok
creating information schema... ok
vacuuming database template1... ok
copying template1 to template0... ok

Success. You can now start the database server using:

/opt/pgsql/bin/postmaster -D /var/lib/pgsql/data/
or
/opt/pgsql/bin/pg_ctl -D /var/lib/pgsql/data/ -l logfile start

我们可以看到在成功的初始话数据库之后,这个命令同时提供了启动数据库服务器的方法,接下来我们使用pg_ctl方法来启动数据库服务器了。

/opt/pgsql/bin/pg_ctl -D /var/lib/pgsql/data/ -l logfile start

如果成功启动了数据库服务器,通过

ps -aux

输出:

postgres 1426 0.0 0.3 18580 1796 pts/1 S 14:57 0:00 /opt/pgsql/bin/postmaster -D /var/lib/pgsql/data
postgres 1429 0.0 0.3 9380 1584 pts/1 S 14:57 0:00 postgres: stats buffer process
postgres 1430 0.0 0.3 8528 1624 pts/1 S 14:57 0:00 postgres: stats collector process

使用下面的命令停止数据库服务器进程:

/opt/pgsql/bin/pg_ctl -D /var/lib/pgsql/data/ -l logfile stop

使用脚本来使数据库服务器随系统启动而自动启动。在PostgreSQL的源码包的contrib/start-scripts目录下面我们可以看到freebsd linux PostgreSQL.darwin StartupParameters.plist.darwin 4个文件,这些文件时用来作为系统启动脚本的,在这里我们用linux来做说明。

在这里的操作使用你编译PostgreSQL数据库时的用户身份。

cd $HOME/src/postgresql-7.4/contrib/start-scripts
su //切换到root用户
cp linux /etc/rc.d/init.d/postgres //把linux改名为postgres拷贝到系统的启动脚本的目录。
cd /etc/rc.d/init.d

使用你熟习的编辑器来编辑postgres启动脚本:

29 ## EDIT FROM HERE
30
31 # Installation prefix
32 prefix=/opt/pgsql
33
34 # Data directory
35 PGDATA="/var/lib/pgsql/data"
36
37 # Who to run pg_ctl as, should be "postgres".
38 PGUSER=postgres
39
40 # Where to keep a log file
41 PGLOG="$PGDATA/serverlog"
42
43 ## STOP EDITING HERE

在这里我们要修改prefix,PGDATA,PGUSER的值,prefix就是我们在configure源码时指定的prefix,PGDATA就是我们initdb命令-D参数指定的路径,PGUSER是我们用来启动数据库服务器的用户。

chmod +x postgres //使脚本具有可执行权限

如果希望在Linux启动的运行级别3的时候自动启动PostgreSQL数据库服务器,以root用户继续执行下面的命令。

cd /etc/rc.d/rc3.d/
ln -sf ../init.d/postgres S25postgres

当然S后面的数值可以根据你的需要来设定,但是这个数值一定要比PostgreSQL服务器依赖的服务器的数值小,比如你希望使用syslog,如果syslog服务是S12,那么postgres的值就要小于S12。

以后我们也可以通过/etc/rc.d/init.d/postgres 来启动和停止数据库服务器,如果你执行这个命令的身份不是root,那么就会问你启动PostgreSQL服务器用户的密码。

到这里我们基本上完成了PostgreSQL数据库服务器的安装和初始化过程。