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 <table> 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
