PostgreSQL 常用操作命令

一个PostgreSQL实例能够管理多个数据库,可以为每个用户,或者每个项目单独创建一个数据库。PostgreSQL提供了createdb和dropdb命令用于创建和删除数据库。

1. createdb和dropdb创建、删除数据库
  1. 切换到pg用户
    su – pg
  2. 创建数据库mydb
    createdb mydb
  3. 删除数据库mydb
    dropdb mydb

createdb和dropdb可以指定主机,用户名,密码等参数,用于连接PostgreSQL服务器,以上示例没有指定,默认使用操作系统当前用户pg,而pg用户也是启动数据库服务的用户,因此有权限创建和删除数据库。

2. sql语句创建、删除数据库

通过psql等工具,连接到PostgreSQL,通过执行SQL语句来创建和删除数据库。

  1. 创建数据库:
    create database mydb;
  2. 删除数据库:
    drop database mydb;

PostgreSQL安装完成之后,需要先初始化数据库,然后才能启动数据库服务。PostgreSQL安装目录下的bin目录中提供了很多命令用于数据库的初始化、数据库启动和停止等功能,本文用到的命令如下:

  • initdb
  • pg_ctl
0. 环境准备

PostgreSQL版本:11.5

  1. 创建pg用户
    useradd pg
  2. 创建PostgreSQL数据目录:
    mkdir -p /data/pg/
    chown -R pg:pg /data/pg
  3. 切换到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.

发表评论