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




