postgresql的oid

作者:瀚高PG实验室 (Highgo PG Lab)

  行对象标识符(对象ID),这个字段只有在创建表时使用了“with oids”或配置参数“default_with_oids”的值为真时才出现,这个字段的类型是oid(类型名与字段名同名)

PostgreSQL在内部使用对象标识符(oid)作为系统表的主键。系统不会给用户创建的表增加一个oid字段。oid类型用一个四字节的无符号整数实现,不能提供大数据范围内的唯一性保证,甚至在单个大表中也不行。因此PostgreSQL官方不鼓励在用户创建的表中使用oid字段。

oid字段生成的序列值是全局的,可以使用以下例子进行验证

--创建带oid的表

mydb=# create table t1(id int) with oids;

CREATE TABLE

mydb=# create table t2(id int) with oids;

CREATE TABLE

--表t1插入数据

mydb=# insert into t1 values(10);

INSERT 32919 1

--查询表t1的oid

mydb=# select oid,id from t1;

  oid  | id

-------+----

 32919 | 10

(1 row)

--表t2插入数据

mydb=# insert into t2 values(10);

INSERT 32920 1

--查询表t2的oid

mydb=# select oid,id from t2;

  oid  | id

-------+----

 32920 | 10

(1 row)

--重复上面过程

mydb=# insert into t1 values(11);

INSERT 32921 1

mydb=# select oid,id from t1;

  oid  | id

-------+----

 32919 | 10

 32921 | 11

(2 rows)

mydb=# insert into t2 values(11);

INSERT 32922 1

mydb=# select oid,id from t2;

  oid  | id

-------+----

 32920 | 10

 32922 | 11

(2 rows)

由以上可以看出,oid是全局分配的。

表(包括toast表)、索引、视图的对象标识符就是系统表pg_class的oid字段的值,如下:

mydb=# select oid,relname,relkind from pg_class where relname like 't_';

  oid  | relname | relkind

-------+---------+---------

 32913 | t1      | r

 32916 | t2      | r

(2 rows)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值