注 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 的版本SELECT current_database();
查看当前所选数据库,不如\c
利索