前面介绍了PostgreSQL的安装,今天介绍一下PostgreSQL常用的命令。

我们在PostgreSQL的安装目录(默认为/usr/local/pgsql )的bin目录下可以看到PostgreSQL的工具命令:

allan@ubuntu:~$ ls /usr/local/pgsql/bin/
clusterdb   dropdb    initdb          pg_ctl      pg_receivexlog  postmaster
createdb    droplang  pg_basebackup   pg_dump     pg_resetxlog    psql
createlang  dropuser  pg_config       pg_dumpall  pg_restore      reindexdb
createuser  ecpg      pg_controldata  pg_isready  postgres        vacuumdb

基本上所有的命令都可以通过command --help 这种方式去查看具体的使用方法,这里介绍一下常用的命令的使用,并附带介绍一下涉及到的PostgreSQL的一些基础概念。

initdb

这个命令用来初始化数据库,主要干了以下几件事:

  • 初始化数据集簇(database cluster)。在PostgreSQL中,所有的数据库数据都存储在数据库集簇中(当然也可以通过表空间的方式存储在其他地方,这里暂时不考虑这种情况),其实初始化数据库集簇就是在硬盘上指定一个数据存储区。
  • 创建预定义的模板数据库template0和template1。在PostgreSQL中,这两个数据库比较特殊,在数据库创建之初就存在。其实刚开始只有template1一个,template0是由template1拷贝而来。后面创建的所有数据库默认都是以template1为模板创建(当然,可以使用创建数据库时可以使用-T去指定其他数据库作为模板)。所以,如果我们希望以后创建的数据库默认都有某些特性的时候,就可以去修改template1这个数据库。而这里之所以还复制了一份template0,就是因为template1是可以由用户去修改的,当我们哪天想要一份“纯净”的数据库时,就可以把template0作为模板。同时,为了保护template0,默认情况下,template0是不允许连接的。
  • 生成系统表。在PostgreSQL中,有许多默认的系统表,后续再介绍。

该命令一般可以跟如下参数:

  • -D:指定数据集簇的位置,如果没有指定该参数,默认使用环境变量PGDATA的值,如果没有改环境变量,则报错,比如"initdb -D /home/allan/data "。
  • -E:设置新建数据库的默认编码,比如"initdb -E UTF8 "。
  • -U:设置数据库超级用户用户名,如果不使用该参数,默认为执行initdb的系统用户。
  • -W:设置数据库超级用户的密码,如果不使用该参数,那么超级用户密码默认为空。
  • -X:设置事务日志的位置。

createuser && dropuser

该命令用来创建一个新的PostgreSQL角色,和SQL语句CREATE USER 或CREATE ROLE 相同。

这个命令的参数基本上都是设置创建的新角色的权限的,参数一般都是成对出现,小写参数表示新角色拥有什么权限,对应的大写参数表示新角色没有什么角色。常用参数如下:

  • -c:指定角色的最大连接数。
  • -d:新角色可以创建数据库;-D:新角色不可以创建数据库。
  • -i:新角色可以继承他所在组的权限;-I:新橘色不可以继承权限。
  • -l:新角色可以登录;-L:新角色不可以登录。
  • -r:新角色可以创建角色;-R:新角色不可以创建角色。
  • -s:新角色是超级用户;-S:新角色不是超级用户。

需要注意的是,在新版本中,role逐渐替代user,即角色这个概念逐渐替换用户这个概念。角色不单指用户,也可能是一个组。
我们用createuser 命令创建一个新角色以后,可以使用dropuser 这个命令来删除角色。

createdb && dropdb

该命令用来创建一个新的数据库,和SQL语句CREATE DATABASE 相同。常用参数如下:

  • -D:设置数据库的表空间。
  • -E:设置数据库的编码
  • -l:数据库的locale设置
  • -O:设置数据库的所有者
  • -T:指定模板数据库,默认使用template1.新的数据库将从模板数据库拷贝而来。

想法,可以用dropdb 命令来删除一个数据库。

pgdump && pgdumpall

该命令用于将PostgreSQL数据库导出到一个备份文件,比如pg_dump db1 > /home/allan/pgsql/backup/db1.bak 。常用参数如下:

  • -f:备份文件名称。
  • -F:备份文件格式,比如custom、tar、plain text。
  • -Z:压缩等级。
  • -a:只备份数据,不含模式。
  • -b:备份包含大对象。
  • -C:包含创建数据库命令。

pg_dump 用于单个数据库的备份,我们也可以使用pg_dumpall 命令来备份PostgreSQL的所有数据库。

pg_restore

该命令用于从一个由pg_dump 或pg_dumpall 程序导出的备份文件中回复PostgreSQL数据库,比如pg_restore -d db1 /home/allan/pgsql/backup/db1.bak 。常用参数如下:

  • -d:连接的数据库名。
  • -f:备份文件名。
  • -F:备份文件格式(c, t)。
  • -a:只恢复数据,忽略模式。
  • -C:创建目标数据库。
  • -I:恢复有名称的索引。

vacuumdb

清理和分析一个PostgreSQL数据库,他是客户端程序psql环境下SQL语句VACUUM的shell脚本封装,二者功能完全相同。常用参数如下:

  • -a:清理所有数据库。
  • -d:清理指定命令数据库。

pg_ctl

该命令用于控制数据库的初始化、启动、停止、重启等。常见使用如下:

  • pg_ctl init:作用同initdb
  • pgctl start/stop/restart:启动/停止/重启数据库。停止、重启数据库可以加"-m"指定数据库停止的模式,共有三种模式:(1)smart模式:等所有客户端连接都断开后再停止。(2)fast模式:直接停止,但是会做一些善后工作,比如数据保存等。(3)immediate模式:直接停止,不做任何工作。这种停止模式会在下一次启动的时候先进行数据库恢复。比如我们可以使用"pgctl stop -m i"快速停止数据库。
  • pg_ctl reload:重新加载。一般如果我们在数据库运行期间修改了数据库的配置文件,那么就可以使用该命令来使新的配置生效,当然有的配置修改必须重启数据库才可以。
  • pg_ctl status:可以查看数据库主进程的信息。

psql

psql是一个基于命令行的PostgreSQL交互式客户端程序,例如我们可以使用命令psql -h 192.168.1.98 -p 5432 -U allan postgres 登陆主机192.168.1.98上面监听端口为5432,用户为allan,数据库名为postgres的数据库。该客户端程序常用参数如下:

  • -c:执行单个命令并退出。
  • -d:连接的数据库的名字(可省略)。
  • -f:从文件中执行命令。
  • -l:列出可用的所有数据库。
  • -h:数据库所在的主机IP。
  • -p:数据库监听的端口。
  • -U:连接数据的用户名。
  • -w:不需要密码。
  • -W:强制使用密码。

使用psql登陆数据库以后,我们就可以使用SQL命令进行数据库的操作,但是psql也给我们提供了一些快捷的命令(元命令),可以使用? 来查看所有元命令和功能说明。常用的命令如下:

  • ?:查看所有可以使用的元命令和说明信息
  • o:将查询结果保存到文件或输出到shell命令
  • l:勒出所有数据库的名称、所有者、编码等信息
  • q:退出数据库
  • c:连接到某个数据库
  • dt:列出所有表
  • d:显示数据库对象的模式
  • di:列出所有索引
  • i:执行文件中的命令

至此,PostgreSQL常用的命令就介绍完了,具体使用的时候,我们可以使用command --help 去查看更详细的用法。