小编典典

SQL,Postgres OID,它们是什么以及它们为什么有用?

all

我正在查看一些 PostgreSQL 表创建,我偶然发现了这个:

CREATE TABLE (
...
) WITH ( OIDS = FALSE );

我阅读了 postgres 提供的文档,并且从 OOP 中了解了对象标识符的概念,但我仍然不明白,

  • 为什么这样的标识符在数据库中会有用?
  • 使查询更短?
  • 什么时候应该使用它?

阅读 82

收藏
2022-07-31

共1个答案

小编典典

OID 基本上为每一行提供一个内置的
id,包含在系统列(与用户空间列相反)中。这对于您没有主键、有重复行等的表很方便。例如,如果您有一个包含两个相同行的表,并且您想删除两个中最旧的行,您可以使用oid
列。

OID 使用 4 字节无符号整数实现。它们 不是 唯一的——ID 计数器会在 2 鲁虏-1 处环绕。OID 还用于标识数据类型(请参阅
参考资料/usr/include/postgresql/server/catalog/pg_type_d.h)。

根据我的经验,该功能通常在大多数 postgres
支持的应用程序中未使用(可能部分是因为它们是非标准的),并且它们的使用基本上已被弃用

在 PostgreSQL 8.1 中 default_with_oids 默认是关闭的;在 PostgreSQL 的早期版本中,它默认是打开的。

在用户表中使用 OID 被认为已弃用,因此大多数安装应禁用此变量。需要特定表的 OID 的应用程序应在创建表时指定 WITH
OIDS。可以启用此变量以与不遵循此行为的旧应用程序兼容。

2022-07-31