ddia/pg/pg-admin-setup.md
2018-02-08 14:07:06 +08:00

2.4 KiB
Raw Blame History

Setup

1. PostgreSQL用户账户

  • 使用一个独立的用户下运行PostgreSQL不与其他程序共享。
  • 默认用户是postgres
  • 使用adduseruseradd添加用户。

2. 创建数据库组

使用数据库前要在磁盘上初始化一个数据库存储区域。称之为一个数据库集簇database clusterSQL标准术语为目录集簇 catelog cluster。一个数据库集簇被一个Pg Server实例管理是多个数据库的集合。

在初始化之后,一个数据库集簇将包含一个名为postgres的默认数据库,一个名为template1的模板数据库。

数据目录

从文件系统的视角看,一个数据库集簇是一个单一目录,所有数据都将被存储在其中。称之为数据目录(data directory)数据区域(data area)

位置选择

  • 数据目录没有默认的位置,通常使用/usr/local/pgsql/data/var/lib/pgsql/data
  • 通常数据库目录名为data,用户postgres至少需要拥有该目录及父目录的写权限。
  • 不要使用挂载点直接作为数据目录,以免一堆权限问题。
  • 不要软挂载NFS有各种烂问题。

初始化

使用initdb,通过-D选项或环境变量PGDATA指定数据目录的位置:

$ initdb -D /usr/local/pgsql/data

另一种替代方案是pg_ctl,实际上调用了initdb

$ pg_ctl -D /usr/local/pgsql/data initdb
  • 如果目标目录不存在,将会创建。
  • 如果目标目录已存在或没有父目录的写入权限,将会失败
  • 初始化会回收其他用户的访问权限。
  • 使用-W选项为超级用户设置一个初始密码。
  • 默认使用系统的Locale和字符集编码。使用--locale指明区域,使用-E指明编码

3. 启动数据库服务器

  • 服务器程序是postgres,位于$PGHOME/bin/postgres
  • 至少需要通过-DPGDATA提供数据目录的地址,否则启动失败。
# 前台启动
postgres -D /var/lib/pgsql/data
# 后台启动
postgres -D /var/lib/pgsql/data >logfile 2>&1 &
  • 更好的方式是通过pg_ctl来启动服务
pg_ctl -l logfile
  • 日志文件自己指定存放位置使用分割工具做log rotate
  • 启动Server时会在数据目录写入postmaster.pid文件。

开机自动启动

  • contrib/start-scripts 提供了操作系统相关的开机自动启动脚本需要root权限安装。