在postgresql中,每个表都会有几个系统字段,这些字段是由系统隐含定义的。这些系统字段在psql下使用\d命令的结果中并不会显示,但请记住实际表中还存在着这些隐含字段。因为表中已隐含了某些名字的字段,所以用户定义的字段名称不能再使用这些名字,这个限制与名字是否为关键字没有关系,即使字段名称用双引号括起来也不行。
这些系统字段主要有如下:
-
oid:行对象标识符(对象ID)。这个字段只有在创建表时使用了"with oids"或配置参数"default with oids"的值为真时才出现(系统不会给用户创建的表增加一个OID系统字段)。这个字段的类型是oid(类型名和字段名同名),在pg中就是使用OID作为各种系统表的主键,它是一个unsigned int,因此不太适合提供大数据范围内的唯一性保证和单个大表中使用也不行。(不建议在用户创建的表中使用OID字段,最好只用作系统表)。此外它生成的是全局的序列值(全局分配不是由某张表单独分派)。除了作为一个对象标识符,OID还有几个表示具体对象类型的别名,它所代表的所有对象标识符类型如下:

-
tableoid:包含本行的表的oid。对父表(该表存在有继承关系的子表)进行查询时,使用这个字段,就可以知道某一行来自父表还是子表,以及是哪个子表。 tableoid可以和 pg_class的 oid 字段连接起来获取表名字。例如:
订阅专栏 解锁全文
| PostgreSQL的表隐藏列详细介绍&spm=1001.2101.3001.5002&articleId=144235475&d=1&t=3&u=ae0388484bcc4656ad3947c935a61276)
9566

被折叠的 条评论
为什么被折叠?



