中国开发网: 论坛: 数据库: 贴子 208880
lukejee: oid
4.16) 什么是 OID?什么是 TID?

OID 是 PostgreSQL 中行的唯一标识。PostgreSQL 里创建的每一行都获得一个唯一的 OID。所有在 initdb 过程中创建的 OID 都小于 16384 (参见 include/access/transam.h)。所有用户创建的 OID 都大于或等于这个值。缺省时,所有这些 OID 不仅在一个表或一个数据库里面唯一,而且在整个 PostgreSQL 安装里也是唯一的。

PostgreSQL 在它的内部系统表里使用 OID 在表之间建立联系。这些 OID 可以用于标识特定的用户行以及用在连接里。建议使用字段类型 OID 存储 OID 值。可以在 OID 字段上创建一个索引以快速访问。

OID 从一个被所有数据库使用的中心区域里赋值给所有新行。如果你想把 OID 改成别的值,或者想做一份表的带原始 OID 的拷贝,你可以做到:

CREATE TABLE new(old_oid oid, mycol int);
SELECT old_oid, mycol INTO new FROM old;
COPY new TO '/tmp/pgtable';
DELETE FROM new;
COPY new WITH OIDS FROM '/tmp/pgtable';

OID 用4字节的整数保存,在超过40亿时将溢出。没有人报告出现过溢出,而我们打算在有人报告之前消除这个限制。

TID 用于标识带着数据块(地址)和(块内)偏移的特定的物理行。TID 在行被更改或重载后发生改变。索引入口使用它们指向物理行。
不主动、不拒绝、不负责任!
One Small Step for BSD.
One Giant Step for PCs



相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录