pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
Postgres 安装
对于全新安装或从旧版本 Postgres 升级:
阅读任何最后时刻的信息和针对特定平台的移植说明。本文件末尾有关于 Ultrix4.x、Linux、BSD/OS 和 NeXT 的一些平台特定说明。目录 /usr/src/pgsql/doc 中还有其他文件,包括 FAQ-Irix 和 FAQ-Linux。也看看目录 ftp://ftp.postgresql.org/pub。如果该目录中有一个名为 INSTALL 的文件,那么该文件包含最新的安装信息。
请注意,前面列表中的"已测试"平台只是意味着有人曾经花力气确保 Postgres 发行版能在该平台上不经修改地编译和运行。由于当前的开发者无法访问所有这些平台,其中一些可能因小问题而无法在当前版本中干净地编译并通过回归测试。任何此类已知问题及其解决方案都会公布在 ftp://ftp.postgresql.org/pub/INSTALL。
如果账号 postgres 尚不存在,则创建它。
登入账号 postgres。
检查你是否有足够的磁盘空间。/usr/src/pgsql 大约需要 17 MB,/usr/local/pgsql(不含你的数据库)大约需要 2 MB,一个空数据库需要 1 MB。回归测试期间数据库会临时增长到约 20 MB。发行版 tar 文件还需要约 3 MB。
因此我们建议,在安装和测试期间,/usr/local 之下保留远超 20 MB 的空闲空间,在包含数据库的磁盘分区上另外保留 25 MB 空闲空间。删除源文件、tar 文件和回归数据库之后,/usr/local/pgsql 需要 2 MB,空数据库需要 1 MB,再加上大约五倍于把数据库数据存成平面文件所需的空间。
要检查磁盘空间,使用 df -k。
从 Internet 上 Ftp 文件 ftp://ftp.postgresql.org/pub/postgresql-v6.3.tar.gz。把它存放在你的主目录中。
某些平台使用 flex。如果你的系统使用 flex,请确保你有一个好的版本。要检查,输入 flex --version。
如果找不到 flex 命令,那么你很可能不需要它。如果版本是 2.5.2、2.5.4 或更高,就没有问题。如果是 2.5.3 或低于 2.5.2,你就得升级 flex。可以从 ftp://prep.ai.mit.edu/pub/gnu/flex-2.5.4.tar.gz 获取。
如果你需要 flex 却没有它或版本不对,那么当你尝试编译程序时会被告知。如果不确定是否需要,尽可以跳过这一步。如果确实需要,当你尝试编译时会被告知安装/升级 flex。
要安装它,输入以下命令:
cd
gunzip -c flex-2.5.4.tar.gz | tar xvf -
cd flex-2.5.4
configure --prefix=/usr
make
make check
# You must be root when typing the next line.
make install
cd
rm -rf flex-2.5.4
这将更新文件 /usr/man/man1/flex.1、/usr/bin/flex、 /usr/lib/libfl.a、/usr/include/FlexLexer.h,并添加指向 flex 的链接 /usr/bin/flex++。
如果你是在升级现有系统,请备份你的数据库。对于 alpha 和 beta 级的发布,数据库格式容易变化,往往每隔几周就变一次,除了 HACKERS 邮件列表中的一句快速评论之外没有任何通知。正式发布总是要求从旧版本进行转储/重载。因此跳过这一步是很糟糕的主意。还有,不要使用 v6.0 的 pg_dumpall 脚本,否则所有对象都将归 Postgres 超级用户所有。 输入(gunzip 一行与后面一行作为一行输入):
cd
gunzip -c postgresql-v6.3.tar.gz |
tar xvf - src/bin/pg_dump/pg_dumpall
chmod a+x src/bin/pg_dump/pg_dumpall
src/bin/pg_dump/pg_dumpall > db.out
rm -rf src
如果你想保留对象 id(oid),则在运行 pg_dumpall 时使用 -o 选项。但除非你有特殊理由这样做,否则不要这样做。
如果 pg_dumpall 命令似乎花了很长时间而你觉得它可能已经死掉,那么可以从另一个终端多次使用 "ls -l db.out" 看文件的大小是否在增长。
请注意,如果你是从 Postgres95 v1.09 之前的版本升级,那么你必须备份数据库、安装 Postgres95 v1.09、恢复数据库,然后再次备份。你还应当阅读文件 /usr/src/pgsql/migration/*。
你必须确保数据库在备份期间没有被更新。必要时,关闭 postmaster,编辑文件 /usr/local/pgsql/data/pg_hba.conf 的权限使只有你能访问,然后把 postmaster 重新启动。
如果你是在升级现有系统,则终止 postmaster。输入
ps -ax | grep postmaster
这会列出若干进程的进程号。输入下面这行,其中 "???" 替换为进程 "postmaster" 的进程 id。(不要使用进程 "grep postmaster" 的 id。)输入 kill ??? 其中 "???" 按上述方式替换。
如果你是在升级现有系统,则把旧目录移开。如果磁盘空间紧张,你可能得备份并删除这些目录。如果这样做,请把旧数据库保存在 /usr/local/pgsql/data 目录树中。至少要保存文件 /usr/local/pgsql/data/pg_hba.conf。
输入以下命令: su cd /usr/src mv pgsql pgsql_6_0 cd /usr/local mv pgsql pgsql_6_0 exit
如果你不使用 /usr/local/pgsql/data 作为数据目录(检查环境变量 PGDATA 是否被设置成了别的值),那么你也应该以同样的方式移动该目录。
创建新的源代码目录和安装目录。你的安装中实际路径可以不同;但在整个过程中要保持一致。输入
su
cd /usr/src
mkdir pgsql
chown postgres:postgres pgsql
cd /usr/local
mkdir pgsql
chown postgres:postgres pgsql
exit
解压并解开新的源文件。输入
cd /usr/src/pgsql
gunzip -c ~/postgresql-v6.3.tar.gz | tar xvf -
为你的系统配置源代码。在这一步你可以为构建过程指定实际的源代码路径和安装路径(见下面的 --prefix 选项)。输入
cd /usr/src/pgsql/src
./configure
configure 程序会列出可用的模板文件并让你选择一个。很多时候会为你选好合适的模板文件,你只需按回车接受默认值。如果默认值不合适,则输入合适的模板文件名并按回车。(如果你这样做了,请发电子邮件到 scrappy@hub.org,说明程序 './config.guess' 的输出以及模板文件应该是什么。)
选定模板文件后,你会被问到若干关于你的具体配置的问题。在上面的 configure 命令后面加上参数就可以跳过这些提问。下面的参数可以加在 configure 命令的末尾:
--prefix=BASEDIR 为 Postgres 配置的安装选择一个不同的
基目录。默认为 /usr/local/pgsql。
--enable-hba 启用基于主机的认证(默认)
--disable-hba 禁用基于主机的认证
--enable-locale 启用 USE_LOCALE
--disable-locale 禁用 USE_LOCALE(默认)
--enable-cassert 启用 ASSERT_CHECKING
--disable-cassert 禁用 ASSERT_CHECKING(默认)
--with-template=TEMPLATE
使用模板文件 TEMPLATE —— 模板文件假定在目录
src/template 中,请到那里查找合适的值。
(如果 configure 脚本找不到指定的模板文件,
它会向你询问一个。)
--with-pgport=PORT 设置 postmaster 进程监听传入连接的
端口。默认端口为 5432。
举个例子,下面是我在 Sparc Solaris 2.5 系统上使用的 configure 脚本,安装基目录为 /opt/postgres。
./configure --prefix=/opt/postgres \
--with-template=sparc_solaris-gcc --with-pgport=5432 \
--enable-hba --disable-locale
当然,在真实的 shell 中,你会把这三行都写在同一行上。
编译程序。输入
cd /usr/src/pgsql/src
gmake all >& make.log &
tail -f make.log
但愿最后显示的一行是 "All of PostgreSQL is successfully made. Ready to install."。这时(或者更早,随你愿意)输入 control-C 退出 tail。(如果以后遇到问题,你可以检查文件 make.log 中的警告和错误消息。)
如果你的计算机没有 gmake(GNU make),那么在本说明的其余部分试着改用 make。
请注意,你可能会在 make.log 中发现许多警告消息。除非以后遇到问题,这些消息可以放心地忽略。
如果编译器失败并给出找不到 flex 命令的错误,则按前述方法安装 flex。然后回到本目录,输入 "make clean",再重新编译。
安装程序。输入
cd /usr/src/pgsql/src
gmake install >& make.install.log &
tail -f make.install.log
最后显示的一行将是 "gmake[1]: Leaving directory `/usr/src/pgsql/src/man'"。这时(或者更早,随你愿意)输入 control-C 退出 tail。
如有必要,告诉 UNIX 如何找到你的共享库。如果你使用的是 Linux-ELF,做下面之一,最好是第一种:
以 root 身份编辑文件 /etc/ld.so.conf。向该文件加入一行 /usr/local/pgsql/lib 然后运行命令 /sbin/ldconfig。
在 bash shell 中,输入
export LD_LIBRARY_PATH=/usr/local/pgsql/lib
在 csh shell 中,输入
setenv LD_LIBRARY_PATH /usr/local/pgsql/lib
请注意,上述命令在不同的操作系统之间可能差异极大。请查阅平台特定说明,例如 Ultrix4.x 和非 ELF Linux 的那些。
如果你创建数据库时收到消息 "pg_id: can't load library 'libpq.so'",那么上面的步骤就是必要的。照做之后,再试着创建数据库。
如果尚未做过,则为使用 Postgres 准备账号 postgres。任何要使用 Postgres 的账号都必须同样地准备。(下面的说明针对 bash shell。对其他 shell 请相应调整。)
把下面几行加入你的登录 shell 的 ~/.bash_profile:
PATH=$PATH:/usr/local/pgsql/bin
MANPATH=$MANPATH:/usr/local/pgsql/man
PGLIB=/usr/local/pgsql/lib
PGDATA=/usr/local/pgsql/data
export PATH MANPATH PGLIB PGDATA
在继续余下步骤之前,确保你已经定义了这些变量。最简单的做法是输入:
source ~/.bash_profile
创建数据库。不要以 root 身份做下面这件事! 那会是一个重大的安全漏洞。输入
initdb
设置访问数据库系统的权限。编辑文件 /usr/local/pgsql/data/pg_hba.conf 来完成。说明包含在该文件中。(如果你的数据库不在默认位置,即如果 PGDATA 被设置为指向别处,那么该文件的位置也会相应改变。)完成后应把该文件重新设为只读。 如果你是从 v6.0 升级,可以把旧数据库中的 pg_hba.conf 文件复制到新数据库的上面,而不必从头重做。
你可以选择跳过回归测试。不过,我们认为跳过测试是个坏主意!
文件 /usr/src/pgsql/src/test/regress/README 有运行和解释回归测试的详细说明。这里给出一个简短的版本:
在后台启动 postmaster 守护进程,输入
cd
nohup postmaster > regress.log 2>&1 &
以你的 Postgres 超级用户账号(通常是账号 postgres)运行 postmaster。不要从 root 账号运行 postmaster。
运行回归测试。输入
cd
cd /usr/src/pgsql/src/test/regress
gmake clean
gmake all runtest
如果这是你第一次运行测试,不需要输入 "gmake clean"。
你应该在屏幕上(同时也写入文件 ./regress.out)看到一系列语句,说明哪些测试通过、哪些测试失败。请注意,某些测试"失败"可能是正常的。对于失败的测试,用 diff 比较目录 ./results 和 ./expected 中的文件。如果 float8 失败了,输入类似这样的命令:
cd /usr/src/pgsql/src/test/regress
diff -w expected/float8.out results
"失败"的测试可能是由于错误消息措辞略有不同、输出格式不同、未能为你的平台正确设置时区等原因而失败的。这类"失败"并不表示 Postgres 有问题。
对于 i686/Linux-ELF 平台,没有测试失败,因为它是 v6.3 回归测试的参考平台。
对于 SPARC/Linux-ELF 平台,使用 Postgres v6.2 的 970525 beta 版时下列测试"失败":float8 和 geometry 因浮点数的微小精度差异而"失败"。select_views 产生大量不同的输出,但差异源于微小的浮点差异。
结论?如果你确实看到了失败,试着理解这些差异的性质,然后判断这些差异是否会影响你对 Postgres 的预期用途。不过请记住,这很可能是迄今为止最稳固的 Postgres 版本,包含了来自 v6.2.1 的许多错误修复,而且以前版本的 Postgres 已经被成功地使用了一段时间。
运行测试之后,输入
destroydb regression
cd /usr/src/pgsql/src/test/regress
gmake clean
按步骤 7 所述停止 postmaster。然后把时区恢复为正常设置。如果你是通过修改环境变量 TZ 来更改时区的,那么一种做法是从账号 postgres 注销后再重新登录。
启动 postmaster 守护进程。输入
cd
nohup postmaster > server.log 2>&1 &
以你的 Postgres 超级用户账号(通常是账号 postgres)运行 postmaster。不要从 root 账号运行 postmaster。
如果你还没有这样做,现在是修改你的计算机的好时机,使其在你每次启动计算机时自动启动 postmaster。 下面是一些关于如何做到这一点的建议,由各位用户贡献。 无论你怎么做,postmaster 都必须由用户 postgres 而不是 root 运行。这就是下面所有示例都先切换用户 (su)到 postgres 的原因。这些命令还考虑到了 PATH 和 PGDATA 等环境变量可能没有被正确设置的事实。 示例如下。请格外谨慎地使用它们。 a) 在 NetBSD 上编辑文件 rc.local,或在 SPARC Solaris 2.5.1 上编辑文件 rc2.d,使其包含下面这一行: su postgres -c "/usr/local/pgsql/bin/postmaster -S -D /usr/local/pgsql/data" b) 在 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。注意:与大多数其他例子不同,这个例子经过测试。 c) 在 RedHat v4.0 Linux 中编辑文件 /etc/inittab,使其包含下面这一行: pg:2345:respawn:/bin/su - postgres -c "/usr/local/pgsql/bin/postmaster -D/usr/local/pgsql/data >> /usr/local/pgsql/server.log 2>&1" /dev/null (这个例子的作者说该例会在 postmaster 死掉时复活它,但他不知道是否有其他副作用。) d) Postgres 发行版的 contrib/linux 区域有一个示例 init.d 脚本,它与近期的 RedHat 软件包兼容并经过测试。
如果你还没有这样做,现在是修改你的计算机进行定期维护的好时机。下面的事情应当定期进行: a) 运行 SQL 命令 vacuum。这会清理你的数据库。 b) 备份你的系统。(你或许应该保留最近几次的备份。)最好在此期间没有其他人使用系统。 理想情况下,上述任务应该由一个 shell 脚本完成,由 cron 每夜或每周运行。可以看看 crontab 的手册页作为入门。(如果你这样做了,请把你的 shell 脚本用电子邮件发给我们一份。我们也想在自己的系统上这样做。)
如果你是在升级现有系统,则装入你的旧数据库。输入
cd
psql -e template1 < db.out
如果你的 pre-v6.2 数据库使用了 path 或 polygon 几何数据类型,那么你需要升级包含这些类型的列。为此,输入(在 psql 内)
update YourTable set PathCol = UpgradePath(PathCol);
update YourTable set PolyCol = UpgradePoly(PolyCol);
...
vacuum;
UpgradePath() 检查一个 path 值是否与旧语法一致,不会更新未通过该检查的列。UpgradePoly() 无法验证一个 polygon 是否确实来自旧语法,但提供了 RevertPoly() 来撤销一次误用的升级。
如果你是新用户,可以像下面描述的那样玩一玩 Postgres。
清理你留下的东西。输入
rm -rf /usr/src/pgsql_6_0
rm -rf /usr/local/pgsql_6_0
# Also delete old database directory tree if it is not in
# /usr/local/pgsql_6_0/data
rm ~/postgresql-v6.2.1.tar.gz
你可能想打印文档。下面是如果你的系统上有 Ghostscript 并且向激光打印机打印时的做法。 alias gshp='gs -sDEVICE=laserjet -r300 -dNOPAUSE' export GS_LIB=/usr/share/ghostscript:/usr/share/ghostscript/fonts # Print out the man pages. man -a -t /usr/local/pgsql/man/*/* > manpage.ps gshp -sOUTPUTFILE=manpage.hp manpage.ps rm manpage.ps lpr -l -s -r manpage.hp # Print out the Postgres95 User Manual, version 1.0, # Sept. 5, 1996. cd /usr/src/pgsql/doc gshp -sOUTPUTFILE=userguide.hp userguide.ps lpr -l -s -r userguide.hp 如果你是开发者,你可能还想打印 Postgres Implemention Guide(实现指南)1.0 版(1995 年 10 月 1 日)。这是一个 WWW 文档,位于 http://www.postgresql.org/docs/impguide。
Postgres 团队希望让 Postgres 在所有受支持的平台上都能工作。因此我们请你告诉我们你在你的系统上有没有让 Postgres 跑起来。请发邮件到 pgsql-ports@postgresql.org 告诉我们以下内容: - Postgres 的版本(v6.2.1、6.1.1、beta 970703 等)。 - 你的操作系统(例如 RedHat v4.0 Linux v2.0.26)。 - 你的硬件(SPARC、i486 等)。 - 你是否干净地编译、安装并运行了回归测试?如果没有,你改了哪些源代码(即你应用的补丁、你做的修改等)、哪些测试失败了等。编译时出现许多警告是正常的。这些不需要报告。
现在按需要创建、访问和操纵数据库。编写访问数据库服务器的客户端程序。换句话说,尽情享受!
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。