PostgreSQL 命令

1. 启动服务

  • linux: service postgresql start/stop/restart
  • win:
    • 初始化: initdb.exe -D "E:\postgresql\data" -E UTF-8 --locale=chs -U postgres -W
    • 启动服务: pg_ctl.exe -D "E:\postgresql\data" start

2. 命令行语法

1. 登录

语法: psql [OPTION]... [DBNAME [USERNAME]]

常用参数:

  • 连接选项
1
2
3
4
5
-h, --host=HOSTNAM:连接数据库服务器的主机 ip 或套接字目录(默认为“local socket”)
-p, --port=PORT:连接数据库服务器的端口号(默认为“5432”)
-U, --username=USERNAME:要连接数据库服务器的用户名
-w, --no-password:不提示密码。如果服务器需要密码验证而密码不可通过其他方式 (比如.pgpass文件)获得,则连接尝试将失败
-W, --password:强制使用密码
  • 通用选项
1
2
3
4
5
6
7
8
9
-c, --command=COMMAND:执行一条命令(或内置SQL)然后退出
-d, --dbname=DBNAME:默认连接的数据库
-f, --file=FILENAME:执行指定文件中的命令,然后退出
-l, --list:显示所有可用数据库名,然后退出
-v, --set=, --variable=NAME=VALUE:设置psql变量
-V, --version:显示版本信息,然后退出
-X, --no-psqlrc:不读取启动文件(系统内置的psqlrc及自定义的~/.psqlrc都不启动)
-1 ("one"), --single-transaction:执行单条存储过程
-?, --help:显示帮助信息,然后退出
  • 输入输出选项
1
2
3
4
5
6
7
8
9
-a, --echo-all:在读取行时向标准输出打印所有内容
-e, --echo-queries:打印发送到服务器的内容
-E, --echo-hidden:显示内部命令生成的查询
-L, --log-file=FILENAME:将查询记录到指定的文件中
-n, --no-readline:命令行编辑中不使用readline
-o, --output=FILENAM:将查询输出定向到指定的文件中
-q, --quiet:静默处理(除查询输出外无其它输出)
-s, --single-step:单步模式运行。即:每个命令在发往服务器之前都要提示用户确认,用这个选项也可以取消执行。此选项主要用于调试脚本
-S, --single-line:单行运行模式,这时每个命令都将由换行符结束
  • 输出格式选项
1
2
3
4
5
6
7
8
9
10
-A, --no-align:切换为非对齐输出模式(默认为对齐模式)
-F, --field-separator=STRING:指定输出字段的分隔符(默认为“|”)
-H, --html:HTML表格输出模式
-P, --pset=VAR[=ARG]:切换打印风格
-R, --record-separator=STRING:设置非对齐输出的记录分隔符
-t, --tuples-only:仅输出数据行(关闭列名称和结果行计数脚本等)
-T, --table-attr=TEXT:设置HTML表格输出模式时的HTML属性(width、border等)
-x, --expanded:打开扩展表格式模式
-z, --field-separator-zero:为未对齐的输出设置字段分隔符为零字节
-0, --record-separator-zero:为未对齐的输出设置记录分隔符为零字

2. 数据库与表

操作 命令
查看所有数据库 \l
切换数据库 \c dbname
查看数据库中的表 \d
查看表中的字段 \d mytable
查看表信息 \d+ mytable
退出登录 \q

3. 架构

1. 表空间、数据库、模式

  • 表空间(tablespace)是物理结构,同一表空间下可以有多个数据库
  • 数据库(database)是逻辑结构,是表/索引/视图/存储过程的集合,一个数据库下可以有多个模式
  • 模式(schema)是逻辑结构,是对数据库的逻辑划分
1
2
3
4
5
6
7
8
9
// 命令行
\db[+] [模式] : 列出表空间
\l[+] [模式] : 列出所有数据库
\dn[S+] [模式] : 列出所有模式

// sql
select * from pg_catalog.pg_tablespace;
select * from pg_catalog.pg_database;
select * from information_schema.schemata;