pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
PostgreSQL 安装
对于全新安装或从旧版本 PostgreSQL 升级:
创建 PostgreSQL 超级用户账号。服务器将以这个用户的身份运行。用于生产环境时,你应当创建一个单独的、无特权的账号(通常使用 postgres)。如果你没有 root 权限或只是想随便玩玩,使用你自己的用户账号就够了。
以 root、bin 或任何其他拥有特殊访问权限的账号运行 PostgreSQL 都有安全风险; 不要这样做。实际上 postmaster 会拒绝以 root 身份启动。
你不必在这个账号下进行构建和安装本身(尽管可以)。需要以数据库超级用户身份登录时,我们会告诉你。
为你的系统配置源代码。在这一步你可以为构建过程指定实际的安装路径,并选择要安装哪些内容。进入 src 子目录并输入:
> ./configure
后面可以跟上你想给的任何选项。对于第一次安装,不带任何选项也应该没问题。要获取完整的选项列表,输入:
> ./configure --help
一些较常用的选项有:
为 PostgreSQL 的安装选择一个不同的基目录。默认值为 /usr/local/pgsql。
如果你想使用区域设置。
允许使用多字节字符编码。这主要面向日语、韩语或汉语等语言。
构建 Perl 接口和 plperl 扩展语言。请注意 Perl 接口需要被安装到 Perl 模块的常规位置(通常在 /usr/lib/perl 下),因此你必须拥有 root 权限才能执行安装步骤。(通常最简单的做法是开始时不加 --with-perl,在完成 PostgreSQL 本身的安装之后再构建和安装 Perl 接口。)
构建 ODBC 驱动程序包。
构建需要 Tcl/Tk 的接口库和程序,包括 libpgtcl、pgtclsh 和 pgtksh。
编译程序。输入
> gmake
编译过程可能需要 10 分钟到一个小时。你的耗时几乎肯定会有所不同。记住要使用 GNU make。
但愿最后显示的一行是
All of PostgreSQL is successfully made. Ready to install.
如果你想在安装之前测试新构建的服务器,可以在此时运行回归测试。回归测试是一套测试用例,用于验证 PostgreSQL 在你的机器上以开发者期望的方式运行。详细说明见 回归测试。 (务必使用"并行回归测试"方法,因为顺序方法只适用于已安装的服务器。)
如果你不是在升级现有系统,跳到 步骤 7。
如果你运行的是 7.*,跳到步骤 步骤 6。
现在你需要备份现有的数据库。要转储你的数据库安装,输入:
> pg_dumpall > db.out
如果你想保留对象 id(oid),则在运行 pg_dumpall 时使用 -o 选项。但除非你有特殊理由这样做(例如在表中把 OID 用作键),否则不要这样做。
务必使用你当前正在运行的版本中的 pg_dumpall 命令。7.0.3 的 pg_dumpall 不应被用于更旧的数据库。
你必须确保数据库在备份期间没有被更新。必要时,关闭 postmaster,编辑文件 /usr/local/pgsql/data/pg_hba.conf 的权限使只有你能访问,然后把 postmaster 重新启动。
除了使用 pg_dumpall 之外,常常也可以使用 pg_upgrade。
如果你正在升级现有系统,现在就终止数据库服务器。输入
> ps ax | grep postmaster
或者
> ps -e | grep postmaster
(这两条中哪一条有效取决于你的系统。输错也不会造成危害。) 这会列出若干进程的进程号,类似于这样:
263 ? SW 0:00 (postmaster)
777 p1 S 0:00 grep postmaster
输入下面这行,其中 pid 替换为 postmaster 进程的进程 id(上例中为 263)。(不要使用 "grep postmaster" 进程的 id。)
> kill pid
在开机时自动启动 PostgreSQL 的系统上,很可能有一个能完成同样事情的启动文件。例如,在 Redhat Linux 系统上你可能会发现
> /etc/rc.d/init.d/postgres.init stop
可以奏效。
如果你用过 pg_dumpall,把旧目录移开。输入以下命令:
> 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
那么上面的步骤就是必要的。届时照做即可。
如果你已把旧目录移开,现在创建数据库安装(工作数据文件)。为此你必须以 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 &
如果你做过 pg_dumpall,把你的数据重新装回去:
> /usr/local/pgsql/bin/psql -d template1 -f db.out
你可能还想把旧的 pg_hba.conf 文件以及你为认证设置的其他任何文件(如口令文件)复制过来。
安装本身到此结束。为了让你的生活更有成效、更愉快,你应当看看下面这些可选步骤和建议:
设置一些环境变量会让生活更方便。首先,你可能想把 /usr/local/pgsql/bin(或等效路径)加入你的 PATH。为此,把下面内容加入你的 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.3/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 并且向激光打印机打印时的做法。
> 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 命令,开始体验。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。