编者按:
PostgreSQL好火啊,不学点儿PG都不好意思说自己是数据库从业者。
【免责声明】本公众号文章仅代表个人观点,与任何公司无关,仅供参考。

编辑|SQL和数据库技术(ID:SQLplusDB)
和Oracle的sqlplus、MySQL自带命令行类似。psql是PostgreSQL自带的命令行工具,功能全面,是PostgreSQL数据库最重要的命令行工具之一。
通过psql工具可以和PostgreSQL数据库服务器进行SQL命令行交互。另外,psql工具也提供了大量强大的元命令(以反斜杠“\”开头的命令)。
使用psql连接数据库
--连接数据库shell> psql -h <主机名> -p <端口号> -U <用户名> <数据库名>
例:
ubuntu@pg-vm:~$ psql -U postgres -d postgres -h localhostPassword for user postgres:psql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)Type "help" for help.postgres=#
psql帮助内容
可以通过在psql命令行键入help获得帮助内容。
postgres=# helpYou are using psql, the command-line interface to PostgreSQL.Type: \copyright for distribution terms\h for help with SQL commands\? for help with psql commands\g or terminate with semicolon to execute query\q to quit
\copyright 发布条款
postgres=# \copyrightPostgreSQL Database Management System(formerly known as Postgres, then as Postgres95)Portions Copyright (c) 1996-2019, PostgreSQL Global Development GroupPortions Copyright (c) 1994, The Regents of the University of CaliforniaPermission to use, copy, modify, and distribute this software and itsdocumentation for any purpose, without fee, and without a written agreementis hereby granted, provided that the above copyright notice and thisparagraph and the following two paragraphs appear in all copies.IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FORDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDINGLOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITSDOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THEPOSSIBILITY OF SUCH DAMAGE.THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITYAND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER ISON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TOPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
\h SQL命令的帮助
\h获取所有的SQL命令。
postgres=# \hAvailable help:ABORT CREATE FOREIGN DATA WRAPPER DROP ROUTINEALTER AGGREGATE CREATE FOREIGN TABLE DROP RULEALTER COLLATION CREATE FUNCTION DROP SCHEMAALTER CONVERSION CREATE GROUP DROP SEQUENCEALTER DATABASE CREATE INDEX DROP SERVERALTER DEFAULT PRIVILEGES CREATE LANGUAGE DROP STATISTICSALTER DOMAIN CREATE MATERIALIZED VIEW DROP SUBSCRIPTIONALTER EVENT TRIGGER CREATE OPERATOR DROP TABLEALTER EXTENSION CREATE OPERATOR CLASS DROP TABLESPACEALTER FOREIGN DATA WRAPPER CREATE OPERATOR FAMILY DROP TEXT SEARCH CONFIGURATIONALTER FOREIGN TABLE CREATE POLICY DROP TEXT SEARCH DICTIONARYALTER FUNCTION CREATE PROCEDURE DROP TEXT SEARCH PARSERALTER GROUP CREATE PUBLICATION DROP TEXT SEARCH TEMPLATEALTER INDEX CREATE ROLE DROP TRANSFORMALTER LANGUAGE CREATE RULE DROP TRIGGERALTER LARGE OBJECT CREATE SCHEMA DROP TYPEALTER MATERIALIZED VIEW CREATE SEQUENCE DROP USERALTER OPERATOR CREATE SERVER DROP USER MAPPINGALTER OPERATOR CLASS CREATE STATISTICS DROP VIEWALTER OPERATOR FAMILY CREATE SUBSCRIPTION ENDALTER POLICY CREATE TABLE EXECUTEALTER PROCEDURE CREATE TABLE AS EXPLAINALTER PUBLICATION CREATE TABLESPACE FETCHALTER ROLE CREATE TEXT SEARCH CONFIGURATION GRANTALTER ROUTINE CREATE TEXT SEARCH DICTIONARY IMPORT FOREIGN SCHEMAALTER RULE CREATE TEXT SEARCH PARSER INSERTALTER SCHEMA CREATE TEXT SEARCH TEMPLATE LISTENALTER SEQUENCE CREATE TRANSFORM LOADALTER LANGUAGE CREATE RULE DROP TRIGGERALTER LARGE OBJECT CREATE SCHEMA DROP TYPEALTER MATERIALIZED VIEW CREATE SEQUENCE DROP USERALTER OPERATOR CREATE SERVER DROP USER MAPPINGALTER OPERATOR CLASS CREATE STATISTICS DROP VIEWALTER OPERATOR FAMILY CREATE SUBSCRIPTION ENDALTER POLICY CREATE TABLE EXECUTEALTER PROCEDURE CREATE TABLE AS EXPLAINALTER PUBLICATION CREATE TABLESPACE FETCHALTER ROLE CREATE TEXT SEARCH CONFIGURATION GRANTALTER ROUTINE CREATE TEXT SEARCH DICTIONARY IMPORT FOREIGN SCHEMAALTER RULE CREATE TEXT SEARCH PARSER INSERTALTER SCHEMA CREATE TEXT SEARCH TEMPLATE LISTENALTER SEQUENCE CREATE TRANSFORM LOADALTER SERVER CREATE TRIGGER LOCKALTER STATISTICS CREATE TYPE MOVEALTER SUBSCRIPTION CREATE USER NOTIFYALTER SYSTEM CREATE USER MAPPING PREPAREALTER TABLE CREATE VIEW PREPARE TRANSACTIONALTER TABLESPACE DEALLOCATE REASSIGN OWNEDALTER TEXT SEARCH CONFIGURATION DECLARE REFRESH MATERIALIZED VIEWALTER TEXT SEARCH DICTIONARY DELETE REINDEXALTER TEXT SEARCH PARSER DISCARD RELEASE SAVEPOINTALTER TEXT SEARCH TEMPLATE DO RESETALTER TRIGGER DROP ACCESS METHOD REVOKEALTER TYPE DROP AGGREGATE ROLLBACKALTER USER DROP CAST ROLLBACK PREPAREDALTER USER MAPPING DROP COLLATION ROLLBACK TO SAVEPOINTALTER VIEW DROP CONVERSION SAVEPOINTALTER STATISTICS CREATE TYPE MOVEALTER SUBSCRIPTION CREATE USER NOTIFYALTER SYSTEM CREATE USER MAPPING PREPAREALTER TABLE CREATE VIEW PREPARE TRANSACTIONALTER TABLESPACE DEALLOCATE REASSIGN OWNEDALTER TEXT SEARCH CONFIGURATION DECLARE REFRESH MATERIALIZED VIEWALTER TEXT SEARCH DICTIONARY DELETE REINDEXALTER TEXT SEARCH PARSER DISCARD RELEASE SAVEPOINTALTER TEXT SEARCH TEMPLATE DO RESETALTER TRIGGER DROP ACCESS METHOD REVOKEALTER TYPE DROP AGGREGATE ROLLBACKALTER USER DROP CAST ROLLBACK PREPAREDALTER USER MAPPING DROP COLLATION ROLLBACK TO SAVEPOINTALTER VIEW DROP CONVERSION SAVEPOINTANALYZE DROP DATABASE SECURITY LABELBEGIN DROP DOMAIN SELECTCALL DROP EVENT TRIGGER SELECT INTOCHECKPOINT DROP EXTENSION SETCLOSE DROP FOREIGN DATA WRAPPER SET CONSTRAINTSCLUSTER DROP FOREIGN TABLE SET ROLECOMMENT DROP FUNCTION SET SESSION AUTHORIZATIONCOMMIT DROP GROUP SET TRANSACTIONCOMMIT PREPARED DROP INDEX SHOWCOPY DROP LANGUAGE START TRANSACTIONCREATE ACCESS METHOD DROP MATERIALIZED VIEW TABLECREATE AGGREGATE DROP OPERATOR TRUNCATECREATE CAST DROP OPERATOR CLASS UNLISTENCREATE COLLATION DROP OPERATOR FAMILY UPDATECREATE CONVERSION DROP OWNED VACUUMCREATE DATABASE DROP POLICY VALUESCREATE DOMAIN DROP PROCEDURE WITHCREATE EVENT TRIGGER DROP PUBLICATIONCREATE EXTENSION DROP ROLE
可以通过 \n + <SQL命令>获得SQL命令的帮助。
例:
postgres=# \h create databaseCommand: CREATE DATABASEDescription: create a new databaseSyntax:CREATE DATABASE name[ [ WITH ] [ OWNER [=] user_name ][ TEMPLATE [=] template ][ ENCODING [=] encoding ][ LC_COLLATE [=] lc_collate ][ LC_CTYPE [=] lc_ctype ][ TABLESPACE [=] tablespace_name ][ ALLOW_CONNECTIONS [=] allowconn ][ CONNECTION LIMIT [=] connlimit ][ IS_TEMPLATE [=] istemplate ] ]URL: https://www.postgresql.org/docs/12/sql-createdatabase.html
\? 元命令帮助
General\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 secondsHelp\? [commands] show help on backslash commands\? options show help on psql command-line options\? variables show help on special variables\h [NAME] help on syntax of SQL commands, * for all commandsQuery Buffer\e [FILE] [LINE] edit the query buffer (or file) with external editor\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 fileInput/Output\copy ... perform SQL COPY with data stream to the client host\? variables show help on special variables\h [NAME] help on syntax of SQL commands, * for all commandsQuery Buffer\e [FILE] [LINE] edit the query buffer (or file) with external editor\ef [FUNCNAME [LINE]] edit function 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 fileInput/Output\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 blockInformational(options: S = show system objects, + = additional detail)\d[S+] list tables, views, and sequences\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 blockInformational(options: S = show system objects, + = additional detail)\d[S+] list tables, views, and sequences\d[S+] NAME describe table, view, sequence, or index\da[S] [PATTERN] list aggregates\dA[+] [PATTERN] list access methods\db[+] [PATTERN] list tablespaces\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] list indexes\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 sequencesFormatting\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] toggle expanded output (currently off)Connection\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}connect to new database (currently "postgres")\conninfo display information about current connection\encoding [ENCODING] show or set client encoding\password [USERNAME] securely change the password for a userOperating System\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 shellVariables\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 variableLarge Objects\lo_export LOBOID FILE\lo_import FILE [COMMENT]\lo_list\lo_unlink LOBOID large object operations
例1:列出所有的数据库
postgres=# \lList of databasesName | Owner | Encoding | Collate | Ctype | Access privileges-----------+----------+----------+---------+---------+-----------------------postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 |template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +| | | | | postgres=CTc/postgrestemplate1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +| | | | | postgres=CTc/postgres(3 rows)
例2:列出所有的 schema
postgres=# \dnList of schemasName | Owner--------+----------public | postgres(1 row)
例3:列出所有的数据库用户和角色
postgres=# \duList of rolesRole name | Attributes | Member of-----------+------------------------------------------------------------+-----------postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}postgres=# \dgList of rolesRole name | Attributes | Member of-----------+------------------------------------------------------------+-----------postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
psql元命令实际执行SQL
可以通过使用“\set ECHO_HIDDEN on |off"命令来显示元命令实际执行SQL。
例:
postgres-# \set ECHO_HIDDEN onpostgres-# \l********* QUERY **********SELECT d.datname as "Name",pg_catalog.pg_get_userbyid(d.datdba) as "Owner",pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding",d.datcollate as "Collate",d.datctype as "Ctype",pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges"FROM pg_catalog.pg_database dORDER BY 1;**************************List of databasesName | Owner | Encoding | Collate | Ctype | Access privileges-----------+----------+----------+---------+---------+-----------------------postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 |template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +| | | | | postgres=CTc/postgrestemplate1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +| | | | | postgres=CTc/postgres(3 rows)
部分中文说明
命令 说明\h help \h create table\d tb_name 查看表(视图,索引,序列)结构\du 查看用户列表\dt 查询数据库所有表(非系统表)\dS 列出系统表和索引\di index_name 只查看指定索引\df 列出函数\dv 只显示视图\ds 只显示序列\dn 列出所有的schema\db 显示所有的表空间\dg 列出数据库的所有角色或用户\dp或者\z 查看表的分配权限\c [user_name] [db_name] 切换某用户到指定数据库\timing on/off 显示执行sql的时间\encoding encode_type 设置客户端编码\pset [option [value] ] 输出格式设置\l 显示所有数据库列表\q 退出\o filename 文本输出执行结果\I filename 用于执行存储在外部文件的sql语句或命令\x 数据按列展示,类似mysql的\G自动补全:连续单击两次tab键+:对比显示更加详细的信息,例如:\du+ \dt+ \d+?/* :查询匹配通配符,例如:\d tb?pgsql -E :可以显示命令执行的对应的SQL语句\pset边框设置\pset boder 0 :不带任何边框\pset boder 1 :输出内容有边框\pset boder 2 :带边框\pset设置文本输出格式\pset format unaligned (默认分隔符|)\pset filesep '分隔符' (例如:\t)
参考
http://www.postgres.cn/docs/12/app-psql.htmlhttps://www.postgresql.org/docs/14/app-psql.html
文章转载自SQL和数据库技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




