PostgreSQL7.0手册-管理员手册-25. 安装
内容
安装之前
安装过程
PostgreSQL 7.0 的安装指导。
如果你还没有获得 PostgreSQL 的发布,从 ftp.postgresql.org 下载它们,然后对它们解包:
> gunzip postgresql-7.0.tar.gz
> tar -xf postgresql-7.0.tar
> mv postgresql-7.0 /usr/src
安装之前
制作 PostgreSQL 需要 GNUmake。制作工作不能用其他make 程序进行。在 GNU/Linux 系统里,GNU make 是缺省工具,在其他系统里你可能发现 GNU make 安装成名为“gmake”。从现在起我们用这个名称表示GNUmake,不管它在你的系统上是什么名称。要测试 GNUmake 输入
> gmake --version
如果你需要获取 GNUmake,你可以在 ftp://ftp.gnu.org 找到。
所支持的平台的最新信息在 http://www.postgresql.org/docs/admin/ports.htm。通常来说,大多数带有现代库的Unix兼容的平台都可以运行PostgreSQL。在发布包的 doc 子目录里有一些平台相关的 FAQ 和 README,如果你碰到麻烦可能会想看看它们。
尽管运行 PostgreSQL 的最小内存需求少到只有 8MB,如果我们把内存增加到96MB,可以看到显著的性能改善。规则是有再多内存也不为过。
检查你有足够的磁盘空间。你需要为源代码树准备大约30M字节的空间,为安装目录准备大约5M字节。为一个空数据库准备约 1 M字节,否则包含同样数目数据的平面文件将大约是这个数目的五倍。在回归测试过程中,你会暂时需要约 20 M字节.
用下面命令检查你的磁盘空间
> df -k
考虑到如今的硬盘的价格,在把你的数据库放到生产环境上用之前,你可能要考虑买一个更大的更快的硬盘。
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
安装过程
PostgreSQL 安装
对于全新安装或从前面版本的 PostgreSQL 升级安装:
创建 PostgreSQL 超级用户帐号。这是运行服务器的用户。用于生产时你可以创建一个独立的非特权的用户(常用 postgres)。如果你没有 root 权限而只是想试试,你自己的用户帐号就足够了。
以 root,bin 或者其他有特殊权限的用户身份运行 PostgreSQL 存在安全问题;别这么干.实际上 postmaster 将拒绝以 root 身份运行.
你不必在这个帐号下制作和安装它(尽管你可以这么做)。当需要你以数据库超级用户登录时(安装程序)会提示你。
为你的系统配置源代码.在这个阶段你可以为制作过程声明你的实际安装路径,以及选择要安装什么。进入 src 子目录并键入:
> ./configure
后面跟着任何你想给它的选项。对于第一次安装,不带选项就挺好的。要取得选项完整列表,键入:
> ./configure --help
一些最常用的如下:
--prefix=BASEDIR
为安装 PostgreSQL 选择一个不同的基础路径。缺省是 /usr/local/pgsql。
--enable-locale
如果你想用本地化支持。
--enable-multibyte
允许使用多字节字符编码。这个选项主要用于象日语,韩语或中文这样的语言。
--with-perl
制作 Perl 接口和 plperl 扩展语言。请注意 Perl 接口将安装到 Perl 模块的常用位置(典型的是在 /usr/lib/perl),所以要成功使用这个选项,你必须有 root 权限。(最简单的方法通常是开始时不选 --with-perl,在编译完 PostgreSQL 本身之后再制作和安装 Perl 接口.)
--with-odbc
制作 ODBC 驱动包.
--with-tcl
制作 Tcl/Tk 需要的接口库和程序,包括 libpgtcl,pgtclsh,和 pgtksh。
编译程序.键入
> 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
(替换为你自己的路径)。
安装 PostgreSQL 可执行文件和库.键入
> 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 \
>server.log 2>>1 &
如果你是从现有的节点升级数据库,把数据恢复回来:
> /usr/local/pgsql/bin/psql -d template1 -f db.out
你可能还要把旧的 pg_hba.conf 文件和任何其他你为认证设置的文件,象口令文件等拷贝回来。
这样就正确完成安装了。为了让生活更丰富和有趣,你应该看看下面的可选步骤和建议。
如果你设置一些环境变量,工作会更方便。首先,你可能需要在你的 PATH 里面包含 /usr/local/pgsql/bin (或者等价物)。要做到这个目的,把下面的行加到你的 shell 启动文件,象 ~/.bash_profile (或 /etc/profile,如果你想影响所有用户)里:
> 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 &
下面是几条系统相关的建议。
在 NetBSD 上编辑文件 rc.local 或在 SPARC Solaris 2.5.1上的文件 rc2.d 使之包含下面行:
> 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 命令并开始试验.
--------------------------------------------------------------------------------