对于全新安装或从前面版本的 PostgreSQL 升级安装:
以 root,bin 或者其他有特殊权限的用户身份运行 PostgreSQL 存在安全问题;别这么干.实际上 postmaster 将拒绝以 root 身份运行.
你不必在这个帐号下制作和安装它(尽管你可以这么做)。当需要你以数据库超级用户登录时(安装程序)会提示你。
为你的系统配置源代码.在这个阶段你可以为制作过程声明你的实际安装路径,以及选择要安装什么。进入 src 子目录并键入:
> ./configure后面跟着任何你想给它的选项。对于第一次安装,不带选项就挺好的。要取得选项完整列表,键入:
> ./configure --help
> gmake编译过程可能耗时 10 分钟到一个小时。具体到你的时间很可能有变化。记得要用 GNU make。
显示的最后一行很有可能是
All of PostgreSQL is successfully made. Ready to install.如果你想在安装之前测试新制作的服务器,你可以这个时候运行蜕变测试.蜕变测试时一个测试套件,用以核实 PostgreSQL 在你的平台上按照开发人员的预期方式运行.相关的更多细节请参考 蜕变测试.(确包运行 "并行蜕变测试" 方法,因为串行方式只用于一套已经安装了的服务器.)
如果你不是升级现有系统那么跳到 步骤 7.
现在你需要备份你现有的数据库。要从新近的v6.0以后的数据库中输出数据,键入下面命令
> pg_dumpall > db.out如果你希望保留对象标识(oid),就需要在运行 pg_dumpall 时使用 -o 参数.不过,除非你有特殊的原因需要这么做(比如说 OID 是表中的键字等),否则不要使用它.
确保你用的 pg_dumpall 命令来自你目前正在运行的数据库版本。7.0 的 pg_dumpall 可以用于老数据库.不过,如果你还在使用 6.0,不要使用 v6.0 中的 pg_dumpall脚本,否则所有东西都将被PostgreSQL超级用户所有。这时你应该使用晚一点的 6.x.x 版本的 pg_dumpall。7.0 的 pg_dumpall 不能在旧数据库上工作。如果你从一个早于 Postgres95 v1.09 的版本上进行升级,那你必须备份你的数据库,安装 Postgres95 v1.09,恢复你的数据库,然后再备份之.
注意 |
你必须确保你的数据库不会在你备份的中间进行更新.如果必要的话,把postmaster宕下来,编辑 /usr/local/pgsql/data/pg_hba.conf 里的权限,使得只有你可以操作,再把 postmaster 运行起来进行备份. |
> ps ax | grep postmaster或
> ps -e | grep postmaster(哪个能用取决于你用的系统.敲错了不会有什么损害.)这样应该列出一些进程的进程号,类似下面:
263 ? SW 0:00 (postmaster) 777 p1 S 0:00 grep postmaster键入下面命令,把 pid 替换成进程 postmaster 的进程号(这里是 263).(不要使用进程 "grep postmaster" 的进程号.)
> kill pid
小技巧:在那些系统启动时自动运行PostgreSQL 的机器上,可能会有一个启动文件可以完成这件事.例如在 Redhat Linux 系统里,我们可能发现> /etc/rc.d/init.d/postgres.init stop也可以用
还有把旧目录删除。键入:
> mv /usr/local/pgsql /usr/local/pgsql.old(替换为你自己的路径)。
> gmake install你应该用你所希望的可执行文件所有者的身份做这一步.该用户不一定是数据库超级用户,有些人喜欢把安装文件由 root 所有.
如果需要的话,告诉你的系统如何找到共享库。如何实现这些因平台而异。最广泛地被使用的方法是设置环境变量 LD_LIBRARY_PATH:
> LD_LIBRARY_PATH=/usr/local/pgsql/lib > export LD_LIBRARY_PATH在 sh,ksh,bash,zsh 里,或
> setenv LD_LIBRARY_PATH /usr/local/pgsql/lib在 csh 或 tcsh 里.你可能把这些放到一个 shell 启动文件里,象 /etc/profile。
在一些系统里,下面的方法是最好的方法,但是你必须有 root 权限。编辑文件 /etc/ld.so.conf,增加一行
/usr/local/pgsql/lib然后运行命令 /sbin/ldconfig。
如果还有疑问,参考你的系统的手册页。如果你稍后看到这样的信息
psql: error in loading shared libraries libpq.so.2.1: cannot open shared object file: No such file or directory么上面的步骤是必须的。简单地重新做一遍。(译注:我在测试7.0 beta1时发现还要设置 export PGLIB=/usr/local/pgsql/lib 下面的 initdb 才能正确运行。请各位注意。)
创建数据库安装(工作数据文件)。你必须用 PostgreSQL 超级用户帐号登录执行这一步。以 root 是不能进行这一步的。
> mkdir /usr/local/pgsql/data > chown postgres /usr/local/pgsql/data > su - postgres > /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data-D 选项声明数据存储的位置。你可以使用任何你想用的路径,它不必在安装目录里。在运行 initdb 前只要确保数据库超级用户帐户可以写(或者创建它,如果该目录不存在)那个目录就行了。(如果你到目前为止一直用PostgreSQL 超级用户进行安装,你可能需要暂时以 root 登录以在 root 所有的区域创建一个数据目录。)
前面的步骤应该已经告诉你如何启动数据库服务器。现在就做。该命令看起来应该象
> /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data这样将在前台启动数据库服务器。要把它放到后台,使用-S 选项,但是这样一来你就看不到任何日志信息。更好的把服务器放到后台的方法是
> nohup /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data \ </dev/null >>server.log 2>>1 &如果你是从现有的节点升级数据库,把数据恢复回来:
> /usr/local/pgsql/bin/psql -d template1 -f db.out你可能还要把旧的 pg_hba.conf 文件和任何其他你为认证设置的文件,象口令文件等拷贝回来。
> PATH=$PATH:/usr/local/pgsql/bin然后,如果你在 PostgreSQL 超级用户的环境里设置了 PGDATA,你可以省略用于 postmaster 和 initdb 的 -D。
你可能想安装 man 和 HTML 文档,键入
> cd /usr/src/pgsql/postgresql-7.0/doc > gmake install这样将在 /usr/local/pgsql/doc 和 /usr/local/pgsql/man 安装文件。要让你的系统能够找到 man 文档,你需要增加象下面一样的行到一个 shell 启动文件里:
> MANPATH=$MANPATH:/usr/local/pgsql/man还有 Postscript 格式的文档。如果你有一台 Postscript 打印机,或者你的机器已经用打印过滤器设置为接受 Postscript 文件,那么要打印用户手册,只需要键入
> cd /usr/local/pgsql/doc > gunzip -c user.ps.tz | lpr如果你的系统里有 Ghostscript 并且正往一台 laserjet 打印机里输出,下面的可能就是你要做的:
> gunzip -c user.ps.gz \ | gs -sDEVICE=laserjet -r300 -q -dNOPAUSE -sOutputFile=- \ | lpr打印机的设置会因系统的变化而变化.如果有问题,参考你的手册或者和你那里的专家交换意见。
如果你首次接触 PostgreSQL,那么管理员手册可能是你要读的第一件读物,因为它包括如何设置数据库用户和认证的信息。
通常,你需要修改你的计算机,以便它能在启动时自动运行数据库服务器。这一点不是必须的;PostgreSQL 服务器能够以非特权用户运行而不需要 root 的干涉。
不同的系统在引导时有不同的运行启动守护的传统,所以建议你先了解一下这些。大多数系统有一个文件叫 /etc/rc.local 或 /etc/rc.d/rc.local,就是放这么一条命令的最好的地方。不管怎样,postmaster 必须以 PostgreSQL 超级用户(postgres)身份运行而不是以 root 或任何其他用户。因此你可能总是要用象 su -c '...' postgres 这样的行来构造你的命令行。
建议保持一个服务器输出的日志。要这样启动服务器,键入:
> nohup su -c 'postmaster -D /usr/local/pgsql/data > server.log 2>&1' postgres &下面是几条系统相关的建议。
> su postgres -c "/usr/local/pgsql/bin/postmaster -S -D /usr/local/pgsql/data"在 FreeBSD 2.2-RELEASE 上,编辑/usr/local/etc/rc.d/pgsql.sh 使之包含下面行并且对之执行命令 chmod 755 和 chown root:bin.
#!/bin/sh [ -x /usr/local/pgsql/bin/postmaster ] && { su -l pgsql -c 'exec /usr/local/pgsql/bin/postmaster -D/usr/local/pgsql/data -S -o -F > /usr/local/pgsql/errlog' & echo -n ' pgsql' }你可以象上面那样分行输出.shell 已经聪明到可以在一个表达式未完之前跨过行结束符继续分析命令.exec 使 postmaster 进程下面少了一层 shell,因而其父进程是init。
在 RedHat Linux 里以 contrib/linux/ 里的例子为基础增加一个文件/etc/rc.d/init.d/postgres.init. 然后做一个符号联接到/etc/rc.d/rc5.d/S98postgres.init。 在新安装的服务器上运行蜕变测试(使用顺序测试方法).如果你在安装之前没有测试过,那么你绝对应该现在就做.更多的指导请参阅 蜕变测试. 要开始试验 Postgres,把路径按照上面说的设置好然后启动服务器.要创建数据库,键入
> createdb testdb然后输入
> psql testdb与那个数据库联接.在提示符上输入 SQL 命令并开始试验.