↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 6.3
历史版本PostgreSQL 6.3 已于 2003 年 3 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

第 19 章 运行时环境

图 19.1. Postgres 文件布局

Postgres 文件布局


Postgres 文件布局 展示了以默认方式安装时 Postgres 发行版的 布局。为简单起见, 我们假设 Postgres 安装在 目录 /usr/local/pgsql 中。因此,无论 在哪里看到目录 /usr/local/pgsql,你都应该 用 Postgres 实际 安装的目录名来替换它。 所有 Postgres 命令都安装在目录 /usr/local/pgsql/bin 中。因此,你应当把 这个目录加到你的 shell 命令路径中。如果你 使用 Berkeley C shell 的一个变体,例如 csh 或 tcsh, 你可以把

set path = ( /usr/local/pgsql/bin path )

加到你主目录的 .login 文件中。如果你 使用 Bourne shell 的一个变体,例如 sh、ksh 或 bash,那么你可以把

PATH=/usr/local/pgsql/bin PATH
export PATH

加到你主目录的 .profile 文件中。 从现在起,我们将假设你已经把 Postgres 的 bin 目录加到了你的路径中。此外,在本文档中我们会频繁提到"设置一个 shell 变量"或"设置一个环境变量"。如果你没有完全理解 上一段关于修改搜索路径的内容, 在继续之前你应当查阅描述你的 shell 的 UNIX 手册页。

如果你的站点管理员没有按默认方式完成设置, 你可能还有一些工作要做。例如,如果数据库服务器机器是一台远程机器,你 就需要把 PGHOST 环境变量设置为数据库 服务器机器的名字。 PGPORT 环境变量也可能必须设置。底线是:如果 你试图启动一个应用程序而它抱怨 无法连接到 postmaster,你应当立即咨询你的站点管理员,确保你的 环境已正确设置。

19.1. 区域支持

注意

由 Oleg Bartunov 撰写。 关于区域和俄语支持的更多信息,见 Oleg 的网页。

在为俄罗斯莫斯科的一家公司做项目时,我遇到了 postgresql 不支持 国家字母表的问题。在寻找可能的变通方法之后,我决定自己开发区域支持。 我不是 C 程序员,但在使用 perl(调试)和 glimpse 工作时已经有一些区域编程的 经验。在 Postgres 源码树中挖掘了几天之后,我对 src/backend/utils/adt/varlena.c 和 src/backend/main/main.c 做了非常小的修改, 就得到了我想要的东西!我只做了 LC_CTYPE 和 LC_COLLATE 的支持,但后来 LC_MONETARY 由其他人添加了。我收到了很多人的 关于这个补丁的消息,于是我决定把它发给开发者,而(让我惊讶的是)它被 并入了 postgresql 发行版。

人们经常抱怨 locale 对他们不工作。有几个常见的错误:

  • 没有在编译前正确配置 postgresql。 你必须用 --enable-locale 选项运行 configure 来启用区域支持。 启动 postmaster 时没有正确设置环境。 你必须在运行 postmaster 之前定义环境变量 $LC_CTYPE 和 $LC_COLLATE, 因为后端从环境获取区域信息。我使用下面的 shell 脚本 (runpostgres):

         #!/bin/sh
    
         export LC_CTYPE=koi8-r
         export LC_COLLATE=koi8-r
         postmaster -B 1024 -S -D/usr/local/pgsql/data/ -o '-Fe'
    

    并从 rc.local 运行它:

         /bin/su - postgres -c "/home/postgres/runpostgres"
    
  • 操作系统的区域支持损坏(例如,Linux 下 libc 的区域支持 改过几次, 引起了很多问题)。最新的 perl 也支持区域,如果区域损坏,perl -v 会 抱怨类似下面的内容: 8:17[mira]:~/WWW/postgres>setenv LC_CTYPE not_exist 8:18[mira]:~/WWW/postgres>perl -v perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LC_ALL = (unset), LC_CTYPE = "not_exist", LANG = (unset) are supported and installed on your system. perl: warning: Falling back to the standard locale ("C").

  • locale 文件的位置错误! 可能的位置:/usr/lib/locale(Linux、Solaris)、/usr/share/locale(Linux)、/usr/lib/nls/loc(DUX 4.0) 查 man locale 找正确的位置。在 Linux 下我在 /usr/lib/locale 和 /usr/share/locale 之间做了一个符号链接,以确保下一个 libc 不会破坏我的 locale。

19.1.1. 好处是什么?

你可以对包含国家字母表字符的字符串使用 ~* 和 order by 操作符。非英语用户 肯定需要它。如果你不想使用 locale,只需取消定义 USE_LOCALE 变量。

19.1.2. 坏处是什么?

使用 locale 有一个明显的坏处——速度!所以,只有在你真正需要时才使用 locale。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。