目标: 在一台机器上运行多个Postgresql Server实例.
运行环境:Ubnntu 8.04.1(vmware中运行)
1. 首先通过sudo apt-get install postgresql安装上Postgresql Server。在安装的过程中会建议安装其它有关的pkg,可以都装上,最后安装完成后最好有以下包列表:
postgresql
postgresql-8.3
postgresql-client-8.3
postgresql-client-common
postgresql-common
安装完成后,apt-get会自动根据安装脚本完成Postgresql的数据库初始化工作,并启动一个Postgresql实例(称为一个cluster),且该实例的名称是:main. 请记住main,我们在后面还会用到。
2. 修改文件
2.1 修改/usr/bin/pg_ctlcluster
/usr/bin/pg_ctlcluster是用以控制Postgresql Server启动、停止、重启的脚本,便于完成对Postgresql Server的控制。默认的Postgresql cluster只能通过本地访问,不能通过TCP/IP以网络方式进行。修改/usr/bin/pg_ctlcluster文件,把253行修改为以下内容:
- 253my$postmaster_opts='-i';
- 254if(!(PgCommon::get_conf_value$version,$cluster,'postgresql.conf','unix_socket_directory')){
- 255$postmaster_opts.='-cunix_socket_directory="'.$info{'socketdir'}.'"';
- 256}
2.2 修改/etc/postgresql/8.3/main/pg_hba.conf文件
该文件是Postgresql Server完成对客户身份鉴别的配置文件,详细内容可参见 这里。在此文件内容中添加一行如下的内容(如果是线上的机器,千万别这么做,太危险了。):
- hostallall0.0.0.00.0.0.0trust
启动完成后,运行 ps -ef | grep postgres 可在console中看到如下内容:
- postgres48901010:38?00:00:01/usr/lib/postgresql/8.3/bin/postgres-D/var/lib/postgresql/8.3/main-i-cconfig_file=/etc/postgresql/8.3/main/postgresql.conf
- postgres48974890010:38?00:00:00postgres:writerprocess
- postgres48984890010:38?00:00:00postgres:walwriterprocess
- postgres48994890010:38?00:00:00postgres:autovacuumlauncherprocess
- postgres49004890010:38?00:00:00postgres:statscollectorprocess
- xuepeng60685940011:01pts/000:00:00greppostgres
3. 创建第二个pg cluster
默认的pg cluster的名称为main,我们创建的第二个cluster名称为pgD1(当然你可以随意命名,完全是自由的)。首先我们能想到的是main和pgD1应该运行在不同的端口号上。main使用默认的5432,为便于记忆,那我们让pgD1使用5433。其次,不同的cluster还必须使用不同数据文件目录,也就是ps结果中 -D /var/lib/postgresql/8.3/main 所代表的值。每一个运行的cluster都需要使用自己私有的数据文件,保存表、视图、函数、触发器等等一切的东西。因此我们需要一个不同的数据文件目录。以上两个方面是最重要的。
其实,在安装Postgresql的过程中已经安装了几个对pgcluster的维护脚本,上面的/usr/bin/pg_ctlcluster只是其中的一个。创建新的cluster可以使用/usr/bin/pg_createcluster来完成,非常方便。
在创建之前,为便于概念的理解,我们使用useradd pgD1完成ubuntu的帐号创建,并使用该帐号作为pgD1的默认owner和superuser。
- sudo/usr/bin/pg_createcluster-u1001-g1001-d/var/lib/postgresql /8.3/D1-s/var/run/pgD1--localzh_CN.UTF-8-eutf8-p5433--start--start-confauto8.3pgD1
完成创建后,pgD1的配置文件都在/etc/postgresql/8.3/pgD1/目录下。为了同样的原因,我们需要在/etc/postgresql/8.3/pgD1/pg_hba.conf中增加下述内容:
- hostallall0.0.0.00.0.0.0trust
4. 按照上述步骤,可以继续创建新的pgcluster,pgD2,pgD3.....
- $ps-ef|greppostgres
- postgres48901010:38?00:00:01/usr/lib/postgresql/8.3/bin/postgres-D/var/lib/postgresql/8.3/main-i-cconfig_file=/etc/postgresql/8.3/main/postgresql.conf
- postgres48974890010:38?00:00:01postgres:writerprocess
- postgres48984890010:38?00:00:01postgres:walwriterprocess
- postgres48994890010:38?00:00:00postgres:autovacuumlauncherprocess
- postgres49004890010:38?00:00:00postgres:statscollectorprocess
- pgD163041011:38?00:00:00/usr/lib/postgresql/8.3/bin/postgres-D/var/lib/postgresql/8.3/D1-i-cconfig_file=/etc/postgresql/8.3/pgD1/postgresql.conf
- pgD163116304011:38?00:00:00postgres:writerprocess
- pgD163126304011:38?00:00:00postgres:walwriterprocess
- pgD163136304011:38?00:00:00postgres:autovacuumlauncherprocess
- pgD163146304011:38?00:00:00postgres:statscollectorprocess
- pgD265701311:47?00:00:00/usr/lib/postgresql/8.3/bin/postgres-D/var/lib/postgresql/8.3/D2-i-cconfig_file=/etc/postgresql/8.3/pgD2/postgresql.conf
- pgD265766570011:47?00:00:00postgres:writerprocess
- pgD265776570011:47?00:00:00postgres:walwriterprocess
- pgD265786570011:47?00:00:00postgres:autovacuumlauncherprocess
- pgD265796570011:47?00:00:00postgres:statscollectorprocess