psql 命令是与 PostgreSQL 服务器交互的客户端程序,要登录到数据库服务器,需要使用psql 客户端工具或者第三方客户端工具如PostgreSQL for Navicat,pgAdmin,Visualizer 等等。psql 作为 DBA 通常使用的与 PostgreSQL 交互的客户端终端程序,因此,熟悉这个命令的用法可以帮助 DBA 快速的操作和维护数据库。
语法
-
psql 的默认语法
psql [OPTION]... [DBNAME [USERNAME]]
-
说明
在 shell 命令行输入 psql,会直接进入数据库,此时的数据库默认用户名是 postgres,默认的数据库是 postgres。
-
连接选项:
-
-c, --command=COMMAND:执行单行命令。
-
-d, --dbname=DBNAME:数据库名称(默认:"postgres")
-
-f, --file=FILENAME:从外部调用脚本文件
-
-l, --list:列出可用的数据库后退出。
-
-v, --set=, --variable=NAME=VALUE:set psql variable NAME to VALUE(e.g., -v >
-
-V, --version output version information, then exit
-
-X, --no-psqlrc do not read startup file (~/.psqlrc)
-
-1 ("one"), --single-transaction:execute as a single transaction (if non-interactive)
-
输入输出选项:
-
-a, --echo-all:将脚本中的所有输入都输出,包含 SQL 命令,存储过程和默认的 psqlrc 文件中的命令。
-
-b, --echo-errors echo failed commands
-
-e, --echo-queries echo commands sent to server
-
-E, --echo-hidden:可以获取元命令的SQL代码
-
-L, --log-file=FILENAME:发送会话日志到指定的文件。
-
-n, --no-readline disable enhanced command line editing (readline)
-
-o, --output=FILENAME:和-L不同的是,该参数仅仅将当前登录用户的执行操作结果保存到指定的文件,并且不会显示输出到屏幕。
-
-q, --quiet:以静默方式运行,没有额外信息显示,只输出查询结果,一般结合 Aqt 一起使用。
-
-s, --single-step single-step mode (confirm each query)
-
-S, --single-line:: 单行模式,SQL 语句只能写在一行,而不能换行,不加该参数,SQL 语句可换行。
-
输出格式选项
-
-A, --no-align:不对齐输出。
-
--csv:以逗号分隔的表输出模式。
-
-F, --field-separator=STRING:域分隔符(默认:|)。
-
-H, --html:以HTML表格输出查询结果。
-
-P, --pset=VAR[=ARG] set printing option VAR to ARG (see \pset command)
-
-R, --record-separator=STRING record separator for unaligned output (default: newline)
-
-t, --tuples-only:仅输出结果行。
-
-T, --table-attr=TEXT set HTML table tag attributes (e.g., width, border)
-
-x, --expanded turn on expanded table output
-
-z, --field-separator-zero set field separator for unaligned output to zero byte
-
-0, --record-separator-zero set record separator for unaligned output to zero byte
-
链接选项
-
-h, --host=HOSTNAME:远程数据库服务器主机 ip 或 Unix 套接字目录(默认:"local socket")
-
-p, --port=PORT:数据库运行监听端口(默认: "5432")
-
-U, --username=USERNAME:数据库用户名(默认: "postgres")
-
-w, --no-password:禁用密码提示
-
-W, --password force password prompt (should happen automatically)
示例
登录数据库
psql <库名> <用户名>
node1-@[postgres]:/data/pg_data>psql postgres postgres psql (12.4) Type "help" for help. postgres=#
元命令
在psql 中输入的以反斜杠开头的内容都是psql元命令,也叫做反斜杠命令。元命令由psql自身进行处理。
元命令格式为反斜杠后跟参数,如\copy 命令即为元命令,语法格式为
\command [options]
元命令和选项之间可以有一个或者多个空格隔开,如果可选参数中包含了空格,可以用单引号将其引起来,如果是转义字符如: \ n(换行),\ t(制表符),\ b(退格键),\ r(回车),\ f(换页),\ digits(八进制)和\ xdigits(十六进制)都可以使用单引号引起来。
部分元命令以SQL标识符(如表名,函数,序列等)作为参数,这些参数需遵循SQL语法规则:不带引号的字母将被强制小写,双引号之间的字母不进行大小写转换,并允许在标识符中包含空格。在双引号中,成对的双引号会当成单引号使用。
psql 提供了丰富的元命令,如查看数据库对象定义,数据库对象空间大小,导入导出等元命令,以便于DBA或者开发人员能够方便的管理和维护数据库。
通用
-
\copyright show PostgreSQL usage and distribution terms
-
\crosstabview [COLUMNS] execute query and display results in crosstab
-
\errverbose show most recent error message at maximum verbosity
-
\g [FILE] or ; execute query (and send results to file or |pipe)
-
\gdesc describe result of query, without executing it
-
\gexec execute query, then execute each value in its result
-
\gset [PREFIX] execute query and store results in psql variables
-
\gx [FILE] as \g, but forces expanded output mode
-
\q quit psql
-
\watch [SEC] execute query every SEC seconds
Query Buffer
-
\ef [FUNCNAME [LINE]] edit function definition with external editor
-
\ev [VIEWNAME [LINE]] edit view definition with external editor
-
\p show the contents of the query buffer
-
\r reset (clear) the query buffer
-
\s [FILE] display history or save it to file
-
\w FILE write query buffer to file
输入/输出
-
\copy ... perform SQL COPY with data stream to the client host
-
\echo [STRING] write string to standard output
-
\i FILE execute commands from file
-
\ir FILE as \i, but relative to location of current script
-
\o [FILE] send all query results to file or |pipe
-
\qecho [STRING] write string to query output stream (see \o)
Conditional
-
\if EXPR begin conditional block
-
\elif EXPR alternative within current conditional block
-
\else final alternative within current conditional block
-
\endif end conditional block
信息查看
-
\d[S+]:列出表、视图、序列、或索引
-
\d[S+] NAME describe table, view, sequence, or index
-
\da[S] [PATTERN] list aggregates
-
\dA[+] [PATTERN] list access methods
-
\db[+] [PATTERN]:列出表空间信息
-
\dc[S+] [PATTERN] list conversions
-
\dC[+] [PATTERN] list casts
-
\dd[S] [PATTERN] show object descriptions not displayed elsewhere
-
\dD[S+] [PATTERN] list domains
-
\ddp [PATTERN] list default privileges
-
\dE[S+] [PATTERN] list foreign tables
-
\det[+] [PATTERN] list foreign tables
-
\des[+] [PATTERN] list foreign servers
-
\deu[+] [PATTERN] list user mappings
-
\dew[+] [PATTERN] list foreign-data wrappers
-
\df[anptw][S+] [PATRN] list [only agg/normal/procedures/trigger/window] functions
-
\dF[+] [PATTERN] list text search configurations
-
\dFd[+] [PATTERN] list text search dictionaries
-
\dFp[+] [PATTERN] list text search parsers
-
\dFt[+] [PATTERN] list text search templates
-
\dg[S+] [PATTERN] list roles
-
\di[S+] [PATTERN]:查看索引占用空间大小
-
\dl list large objects, same as \lo_list
-
\dL[S+] [PATTERN] list procedural languages
-
\dm[S+] [PATTERN] list materialized views
-
\dn[S+] [PATTERN] list schemas
-
\do[S] [PATTERN] list operators
-
\dO[S+] [PATTERN] list collations
-
\dp [PATTERN] list table, view, and sequence access privileges
-
\dP[itn+] [PATTERN] list [only index/table] partitioned relations [n=nested]
-
\drds [PATRN1 [PATRN2]] list per-database role settings
-
\dRp[+] [PATTERN] list replication publications
-
\dRs[+] [PATTERN] list replication subscriptions
-
\ds[S+] [PATTERN] list sequences
-
\dt[S+] [PATTERN]:查看表占用空间大小
-
\dT[S+] [PATTERN] list data types
-
\du[S+] [PATTERN] list roles
-
\dv[S+] [PATTERN] list views
-
\dx[+] [PATTERN] list extensions
-
\dy [PATTERN] list event triggers
-
\l[+] [PATTERN] list databases
-
\sf[+] FUNCNAME:查看函数定义信息
-
\sv[+] VIEWNAME:列出视图的定义信息
-
\z [PATTERN] same as \dp
格式
-
\a toggle between unaligned and aligned output mode
-
\C [STRING] set table title, or unset if none
-
\f [STRING] show or set field separator for unaligned query output
-
\H toggle HTML output mode (currently off)
-
\pset [NAME [VALUE]] set table output option
(border|columns|csv_fieldsep|expanded|fieldsep|
fieldsep_zero|footer|format|linestyle|null|
numericlocale|pager|pager_min_lines|recordsep|
recordsep_zero|tableattr|title|tuples_only|
unicode_border_linestyle|unicode_column_linestyle|
unicode_header_linestyle)
-
\t [on|off] show only rows (currently off)
-
\T [STRING] set HTML
tag attributes, or unset if none
\x [on|off|auto]:可设置查询结果输出模式 (默认:off)
链接
-
\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}:连接到本地或远程数据库服务器
-
\conninfo display information about current connection
-
\encoding [ENCODING] show or set client encoding
-
\password [USERNAME] securely change the password for a user
系统操作
-
\cd [DIR] change the current working directory
-
\setenv NAME [VALUE] set or unset environment variable
-
\timing [on|off] toggle timing of commands (currently off)
-
\! [COMMAND] execute command in shell or start interactive shell
参数
-
\prompt [TEXT] NAME prompt user to set internal variable
-
\set [NAME [VALUE]] set internal variable, or list all if no parameters
-
\unset NAME unset (delete) internal variable
大对象
-
\lo_export LOBOID FILE
-
\lo_import FILE [COMMENT]
-
\lo_list
-
\lo_unlink LOBOID large object operations