PostgreSQL|PostgreSQL 命令行终端 psql 的快捷键

注 1 尖括号表示必填项,中括号表示选填项。这两种括号非实际字符,而是文本描述符。
注 2 美元符号 $ 表示终端命令。

在操作系统终端命令行执行 psql -d <数据库名> [-U 用户名] 命令可以进入到 PostgreSQL 的控制台,类似于 MySQL 的 mysql -uroot 命令。
控制台命令:
  • \l $ psql -l
    查看全部数据库信息,包括俩模板数据库 template0 和 template1
    使用 SQL 语句的话,有点儿麻烦:
    SELECT
    datname AS 数据库,
    pg_encoding_to_char(encoding) AS 编码格式,
    rolname AS 拥有者
    FROM pg_database
    JOIN pg_authid
    ON pg_database.datdba = pg_authid.oid;
    其中 pg_database 表的 encoding 字段值是 int 类型
    需要调用 pg_encoding_to_char 函数获取对应的编码格式名
  • \c 查看当前登录用户以及所选数据库
  • \c <数据库名> 切换数据库
  • \c - <用户名> 切换用户
  • \d
    查看当前数据库中的关系(Relation),包括数据表 Table 、视图 View 和序列 Sequence
    模式(也叫架构)属于数据库,数据表/视图属于模式
    如果当前数据库里有与当前用户同名的模式
    当前用户会自动选择同名模式以及 public 模式中的数据表和视图
    否则,选择 public 模式中的数据表和视图
    注意:以上所指当前用户须是超级用户,如果不是超级用户还需要额外增加一个条件:
    模式的拥有者须是该用户才会自动选择同名模式
  • \d <数据表名/视图名/序列名>
    查看某个 Relation 的详细信息,相当于 MySQL 中的 DESC
    以查看数据表结构为例,这块儿也可以用 SQL 语句写一下子:
    SELECT column_name, data_type, is_nullable, column_default
    FROM information_schema.columns
    WHERE table_schema = '<模式名>' AND table_name = '<数据表名>';
    除了最后的 “模式名” 和 “数据表名”,其余都是固定写法
  • \du SELECT * FROM pg_user; 查询全部用户的信息
    对应的 SQL 语句如下:
    SELECT
    usename AS 用户名,
    usesysid AS "用户ID",
    usecreatedb AS 创建数据库,
    usesuper AS 超级用户,
    userepl AS 控制流备份模式,
    usebypassrls AS 绕过行级别的安全策略
    FROM pg_user;
  • \dn 查看当前数据库的全部模式(Schema)
    对应的 SQL 语句如下:
    SELECT schema_owner AS "Owner", schema_name AS "Schema", catalog_name AS "Database"
    FROM information_schema.schemata
    WHERE schema_name NOT LIKE 'pg%'
    AND schema_name NOT LIKE 'information_schema';
  • \dt 查看当前数据库的全部数据表(Table)
    对应的 SQL 语句如下:
    SELECT tablename AS "Name", schemaname AS "Schema", tableowner AS "Owner"
    FROM pg_tables WHERE tablename NOT LIKE 'pg%' AND tablename NOT LIKE 'sql%'
    ORDER BY "Schema", "Name"
    这块儿有三个别名,它们都用双引号引起来了
    这么做的目的是使得首字母大写被保留,如果去掉双引号,结果就是全小写了
  • \dv 查看当前数据库的全部视图(View)
    对应的 SQL 语句如下:
    SELECT table_name AS "View", table_schema AS "Schema", table_catalog AS "Database"
    FROM information_schema.views
    WHERE table_schema NOT IN ('pg_catalog', 'information_schema');
  • \ds 查看当前数据库的全部序列(Sequence)
    对应的 SQL 语句如下:
    SELECT
    sequence_name AS 序列,
    sequence_schema AS 模式,
    sequence_catalog AS 数据库
    FROM information_schema.sequences;
  • \df 查看当前数据库的全部函数(Function),包括触发器函数
  • \dD 查看当前数据库的全部域(Domain)
  • SHOW SERVER_VERSION; $ psql -V 查看 PostgreSQL 的版本
  • 【PostgreSQL|PostgreSQL 命令行终端 psql 的快捷键】SELECT current_database(); 查看当前所选数据库,不如 \c 利索

    推荐阅读