暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL中的几个重要标识符

原创 多米爸比 2020-02-22
3587

回头会尝试整理几个标识符的关系图谱

1. 对象标识符oid

所有数据库对象的标识符,无符号的四字节整数

postgres=# create table t(id int);
CREATE TABLE
postgres=# select relname,oid,relfilenode from pg_class where relname='t';
 relname |  oid  | relfilenode 
---------+-------+-------------
 t       | 41040 |       41040
(1 row)

2. 行标识符或者元组标识符tid

PG里行的概念不是row是tuple,名称比较学术化,简称tid而不是rid,
它的值是这样表示(x,y)
x是区块号(或者页面号),下面t表两行记录都在第0号区块上
y是行指针

postgres=# insert into t values(100);
INSERT 0 1
postgres=# insert into t values(200);
INSERT 0 1
postgres=# select *,ctid from t;
 id  | ctid  
-----+-------
 100 | (0,1)
 200 | (0,2)
(2 rows)

读取访问行有两种方式
顺序扫描:可以理解xy坐标系中一条平行直线移动扫描。
索引扫描:可以理解通过点直接定位。

3. 元组标识符ctid

ctid也是一种tid元组标识符
更新元组时指向新版本元组,否则指向自身
当表的多行具有相同的数据时,可以使用ctid系统列作为行的唯一标识,可用于清理重复行。

4. 事务标识符txid

每当事务开始时,事务管理器就会为其分配一个唯一的txid,目前它的值是一个32位无符号整数,取值空间大约为42亿。

postgres=# begin;
BEGIN
postgres=# select txid_current();
 txid_current 
--------------
          707
(1 row)

更多参考PostgreSQL中的事务快照Snapshot

最后修改时间:2020-03-01 11:23:19
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论