PostgreSQL安装完成之后,需要先初始化数据库,然后才能启动数据库服务。PostgreSQL安装目录下的bin目录中提供了很多命令用于数据库的初始化、数据库启动和停止等功能,本文用到的命令如下:
- initdb
- pg_ctl
0. 环境准备
PostgreSQL版本:11.5
- 创建pg用户
useradd pg - 创建PostgreSQL数据目录:
mkdir -p /data/pg/
chown -R pg:pg /data/pg - 切换到pg用户
su - pg
1. 初始化PostgreSQL数据库:
initdb -D /data/pg/
-D参数指定数据目录,初始化过程主要是往数据目录中写入一些必需的元数据。
2. 启动PostgreSQL
启动数据库:
pg_ctl start -D /data/pg/
-D参数指定数据目录,PostgreSQL是多进程架构,启动之后,能够看到很多postgres相关的进程,如下:
[pg@localhost ~]$ ps -ef | grep pg
pg 8124 8123 0 23:18 pts/0 00:00:00 -bash
pg 8158 1 0 23:20 pts/0 00:00:00 /usr/local/postgresql-11.5/bin/postgres -D /data/pg
pg 8160 8158 0 23:20 ? 00:00:00 postgres: checkpointer
pg 8161 8158 0 23:20 ? 00:00:00 postgres: background writer
pg 8162 8158 0 23:20 ? 00:00:00 postgres: walwriter
pg 8163 8158 0 23:20 ? 00:00:00 postgres: autovacuum launcher
pg 8164 8158 0 23:20 ? 00:00:00 postgres: stats collector
pg 8165 8158 0 23:20 ? 00:00:00 postgres: logical replication launcher
3. 停止PostgreSQL
停止数据库:
pg_ctl stop -D /data/pg/
-D 参数为数据目录。
另外还可以加上 -m 参数,指定关闭模式,取值如下:
- smart,等所有连接中止后,关闭数据库,如果客户端连接不中止,则无法关闭数据库。
- fast,快速关闭数据库,断开客户端连接,回滚未提交的事务,然后关闭数据库。
- immediate,立即关闭数据库,进程立即停止,直接退出,下次启动数据库需要进行恢复。
比较常用的是fast模式。
4. 问题
initdb初始化数据库在root用户下执行会报错,必须创建一个非root用户来初始化数据库。报错信息如下:
initdb: cannot be run as root
Please log in (using, e.g., "su") as the (unprivileged) user that will
own the server process.