PostgreSQL的psql命令分析

Posted by 启示录 Blog on March 21, 2016

postgresql会提供一些系统命令方便开发人员使用,例如\dt(查看当前模式所有表),\df(当前模式的函数),\l(查看所有数据库)等等的此类命令,这些命令在系统内部其实都是sql的一个别名而已。例如\l:

1
2
3
4
5
6
7
8
SELECT d.datname as "Name", --datname数据库名
       pg_catalog.pg_get_userbyid(d.datdba) as "Owner",--pg_catalog为系统表,pg_get_userbyid通过pg_user的oid获取用户名
       pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding",--转换编码对应的id转换成字符
       d.datcollate as "Collate",
       d.datctype as "Ctype",
       pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges"--datacl为数组,转换成字符串显示
FROM pg_catalog.pg_database d
ORDER BY 1;

对比查询pg_database数据

1
SELECT * FROM pg_database;

查看当前拥有多少数据库,\l等同于上面的那一段sql,只是对数据进行了格式化处理。

如何查看这些命令对应的sql语句可以在登录时使用-E参数。例如:

1
psql -Upostgres -E -h192.168.2.101

如果你是需要做一个postgresql的Web管理平台,那么可以通过同样的思路来实现相同的功能。

参考文献:

system infomation functions:http://www.postgresql.org/docs/9.5/static/functions-info.html