一个PostgreSQL实例能够管理多个数据库,可以为每个用户,或者每个项目单独创建一个数据库。PostgreSQL提供了createdb和dropdb命令用于创建和删除数据库。
1. createdb和dropdb创建、删除数据库
- 切换到pg用户
su – pg - 创建数据库mydb
createdb mydb - 删除数据库mydb
dropdb mydb
createdb和dropdb可以指定主机,用户名,密码等参数,用于连接PostgreSQL服务器,以上示例没有指定,默认使用操作系统当前用户pg,而pg用户也是启动数据库服务的用户,因此有权限创建和删除数据库。
2. sql语句创建、删除数据库
通过psql等工具,连接到PostgreSQL,通过执行SQL语句来创建和删除数据库。
- 创建数据库:
create database mydb; - 删除数据库:
drop database mydb;
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.