安装和管理最佳实践
提议
此页面正在建设中 - 并且自 2009 年以来没有更新(除了在 2014 年 4 月 2 日进行的一次不合理的修改)。请在别处寻求知识,因为这里的内容似乎早于 Postgres 9。
此页面将包含有关安装和维护 PostgreSQL 数据库的最佳方法的信息,包括环境变量、路径和其他相关内容。
请随时添加您的建议和知识,使其成为一个“实践”资源。
自编译与软件包分发
在安装之前,请考虑是否使用操作系统分发的软件包,或者是否自行编译。(在 Windows 上编译 PostgreSQL 可能是一项艰巨的任务。在 Linux/Unix 机器上非常容易。)
让我们比较使用预构建的软件包和自行编译 PostgreSQL。(注意:这是一种相当以 Linux 为中心的观点。对于 Windows,您可能需要使用为每个版本提供的二进制软件包。)
使用来自发行版的预构建软件包 | 自行编译。 |
---|---|
非常容易安装 - 只需使用您的包管理器。 | 您可能需要安装 gcc 和一些开发包,仅用于构建 PostgreSQL。 |
安装依赖于发行版(配置文件的位置、初始表空间)。 | 您可以将所有内容安装在一个位置,只需您想要的位置。 |
包含启动脚本,并且应该可以正常工作。 | 您需要提供自己的系统启动脚本。 |
软件包可能过时,或者新的小版本可能不会经常可用。 | 您可以随意使用最新的稳定版本,并根据您的意愿执行升级。 |
包管理知道 PostgreSQL 安装并会更新它。 | 您的包管理器对安装一无所知。依赖库可能被卸载或被更新、不兼容的版本替换。(**注意:**这不太可能。我从未见过这种情况发生。PostgreSQL 不依赖于任何奇怪或快速发展的包。) |
在 Solaris 上编译和安装
TODO:添加对最常见问题的解决方法。
使用 Sun Studio 12 在 Solaris 上编译
./configure --prefix=/usr/local/pgsql84 CC=/opt/SUNWspro/bin/cc 'CFLAGS=-xO3 -xarch=native -xspace -W0,-Lt -W2,-Rcond_elim -Xa -xildoff -xc99=none -xCC' --datadir=/usr/local/pgsql84/data84 --enable-dtrace --enable-cassert --with-perl --with-python --with-libxml --with-libxslt --with-ossp-uuid --without-readline
说明
- OSol 没有 readline 库
- 您可能不需要 --enable-cassert 选项。
问题
UUID:Open Solaris 200911 中的 UUID 库存在问题。如果有任何人有解决方法,请发布它。
同一主机上的多个版本
如果您必须在同一主机上安装多个 PostgreSQL 版本,请从源代码编译并像这样调用 configure
./configure --prefix=/opt/postgresql-8.2.11 --with-pgport=8200
这样,您就不必担心与哪个版本进行通信 - 您只需查看端口号。
另一种方法是在 postgresql.conf 中更改端口。如果您有自己的初始化脚本,请注意这一点,请记住更改 PGDATA 和 PGUSER 的值。
确保在系统启动时启动
TODO:提供一个默认的初始化脚本(如果 contrib/ 中还没有)。==== 用于
大型服务器中推荐更改的值
在 Linux 中,SHMMAX 值通常设置得很低,尤其是在较旧的 32 位发行版中。根据您的 PostgreSQL 配置,您可能需要调整 SHMMAX 和/或 SHMALL 的值。
高配置示例:
- /etc/sysctl.conf
fs.file-max = 32768 kernel.shmmax = 1073741824 kernel.shmall = 536870912
如何计算?公式之一是:(FIXME:这个公式是指 SHMMAX 吗?)
250kb + 8.2kb * shared_buffers +14.2kb * max_connections
SHMMAX 变量 控制 为共享内存使用分配的最大内存量。如果您尝试在不调整 SHMMAX 的情况下为 PostgreSQL 中的例如 shared_buffers GUC 分配高值,您可能会在 Postgres 的日志中看到 错误消息,例如“ ... 系统调用失败为 shmget ... 通常意味着 PostgreSQL 对共享内存段的请求超出了内核的 SHMMAX 参数”,您将需要相应地向上调整 SHMMAX。
有关 SHMMAX 的更多信息 可以在这里找到。
推荐的目录位置
WAL 目录
预写日志 (WAL) 是 Postgres 操作的关键部分。由于 Postgres 使用 WAL 来确保数据一致性,因此 WAL 将接收大量的 I/O 活动。特别是如果您的 PGDATA 目录未位于功能强大的 RAID 阵列上,您可能需要考虑将 WAL(pg_xlog 目录)重新定位到单独的磁盘以减轻对数据库其余部分的 I/O 负载。WAL 应该 以完全顺序的方式写入,因此从重新定位此目录中获得的 I/O 优势可能非常大。但是,请注意,通过重新定位 WAL,您将承担额外的 数据一致性风险。
(FIXME:段落尴尬且含糊不清)配置:如果您的 PGDATA 位于完全不同的位置,您可能需要一个 /etc/postgresql/data<number>。或者,如果您有几个版本用于测试目的,您可能需要一个类似“debian”的树 (/etc/postgresql/<version>/<pgdata_number>)。默认方法是将配置文件放在 PGDATA 内部。
参见 这里,了解有关将各种 PostgreSQL 数据卸载到不同驱动器的信息。
版本化 SQL 脚本和配置文件
正如您现在正在做的那样(版本化 SQL 脚本),另一种最佳实践是版本化配置文件。不仅仅是简单的版本控制,请记住您有几个环境(开发、测试、生产)。
另一种良好的做法是将 DBA 修改版本化到一个单独的脚本中(SET STORAGE 修改、特殊索引和规则等)。
TODO:粘贴一个示例。
备份和恢复策略
做
- 使用 pg_dump 与 -Fc 来确保您使用的是自定义格式。这是准备使用 pg_restore(使用 -j 参数)进行并行恢复的唯一方法。
- 确保使用优化恢复的设置调整您的 postgresql.conf 文件(即:增加 maintenance_work_mem 并关闭复制)。
TODO:如何执行这些任务。
用户身份验证
有关更多信息,请阅读文章 [1]。
建议通过主机模式进行访问的安装方法是使用 md5 方法进行加密密码。我们可以画出这样的东西
host all all 192.168.1.0/24 md5
此模式减少了对包含在 192.168.1.x 中的 IP 地址的访问,并使用用户的正确密码。除了此限制之外,您还必须记住,在 postgres.conf 中,您应该修改 listen_addresses 变量 listen_addresses。
请记住,您可以使用 **VALID UNTIL** 选项创建用户。在您创建用户时,您可以使用类似于以下内容的东西计算时间戳
SELECT (CURRENT_DATE+1)::timestamp;
您可以将 1 替换为您想要启用用户的日期数(7=1 周,30=月等)。然后,将结果复制到 ALTER 或 CREATE 语句中。
请记住:在将 **trust** 更改为基于密码的其他方法之前,您应该为用户分配一个密码。
pg_hba.conf 中的更改只需要 **reload** 信号。因此,无需停机。
您可以为数据库创建超级用户,但请记住,如果您想限制对数据库的访问,超级用户仍然有权删除其他 BD 和执行其他维护任务。尝试减少超级用户的数量,或至少减少到一个。
LDAP 身份验证
TODO:解释使用此方法的最佳方式 [2]
监控索引和表访问和使用
TODO:解释如何监控表和索引的使用,以便对存储方式进行修改。