PostgreSQL-系统表、系统视图
程序员文章站
2022-03-30 12:26:32
系统表显示的都是当前操作数据库下的信息,对象都来自当前数据库。因为不同的系统表都用不同名的字段来记录不同对象的oid,这个表引用那个表,那个表又引用另一个表,所以这些字段名不太好记...
系统表显示的都是当前操作数据库下的信息,对象都来自当前数据库。因为不同的系统表都用不同名的字段来记录不同对象的oid,这个表引用那个表,那个表又引用另一个表,所以这些字段名不太好记。
pg_class (系统表:对象)是一个对象表,表的每个字段都是‘rel’开头,分明就是 ‘relation’这个单词的缩写,意思就是‘关系’。表中relkind字段决定对象类型:r = 普通表,i = 索引,S = 序列,v = 视图, c = 复合类型,s = 特殊,t = TOAST表。对象所属的relnamespace(模式名称)和relowner(所有者)都是用其对应的oid显示,所以要直观看到实际本名要联合pg_namespace(系统表:模式)和pg_roles(系统视图:角色)一起查,这两个表和视图中都有oid字段。
以查询对象所属模式及其名称为例:
select relname,relkind,relnamespace,nspname from pg_class c,pg_namespace n where n.oid=16424 and c.relnamespace=n.oid relname | relkind | relnamespace | nspname -------------------+---------+--------------+--------- website_pkey | i | 16424 | yun website | r | 16424 | yun board_pkey | i | 16424 | yun board | r | 16424 | yun spam_keyword_pkey | i | 16424 | yun spam_keyword | r | 16424 | yun
oid数据类型,查询有无单引号都可以。pg_namespace中的oid字段是隐含的,用select * from不能直接查询。
select oid,* from pg_namespace oid | nspname | nspowner | nspacl -------+--------------------+----------+------------------------------------- 99 | pg_toast | 10 | 11194 | pg_temp_1 | 10 | 11195 | pg_toast_temp_1 | 10 | 11 | pg_catalog | 10 | {postgres=UC/postgres,=U/postgres} 11469 | information_schema | 10 | {postgres=UC/postgres,=U/postgres} 2200 | public | 10 | {postgres=UC/postgres,=UC/postgres} 16424 | yun | 16392 | 16551 | audit | 16392 |
PS:逗号其实是一种起到连结若干列与若干列作用的符号,是一个对查询结果直接产生作用的符号,不是因为查多个字段所以用来分隔为了易读好看的。
pg_namespace有模式的oid,pg_roles有用户的oid。
pg_attribute,竟然有这么一张表用来记录所有表的字段,神奇。
推荐阅读
-
自动化测试读写64位操作系统的注册表
-
abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之列表视图(七)
-
abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之增删改视图(八)
-
oracle系统表中v$session、v$sql字段讲解
-
SQL 2005使用专用管理员连接(DAC)的技巧及修改系统表的方法
-
QEMU/KVM查看虚拟机系统注册表的方法
-
通过系统数据库获取用户所有数据库中的视图、表、存储过程
-
win7系统开机提示因为磁盘管理控制台视图不是最新状态的两种解决方法图文教程
-
C#实现读取注册表监控当前操作系统已安装软件变化的方法
-
用注册表优化NTFS 提高计算机系统性能