我正在查看一些 PostgreSQL 表创建,我偶然发现了这个:
CREATE TABLE ( ... ) WITH ( OIDS = FALSE );
我阅读了 postgres 提供的文档,并且从 OOP 中了解了对象标识符的概念,但我仍然不明白,
OID 基本上为每一行提供一个内置的 id,包含在系统列(与用户空间列相反)中。这对于您没有主键、有重复行等的表很方便。例如,如果您有一个包含两个相同行的表,并且您想删除两个中最旧的行,您可以使用oid 列。
OID 使用 4 字节无符号整数实现。它们 不是 唯一的——ID 计数器会在 2 鲁虏-1 处环绕。OID 还用于标识数据类型(请参阅 参考资料/usr/include/postgresql/server/catalog/pg_type_d.h)。
/usr/include/postgresql/server/catalog/pg_type_d.h
根据我的经验,该功能通常在大多数 postgres 支持的应用程序中未使用(可能部分是因为它们是非标准的),并且它们的使用基本上已被弃用:
在 PostgreSQL 8.1 中 default_with_oids 默认是关闭的;在 PostgreSQL 的早期版本中,它默认是打开的。 在用户表中使用 OID 被认为已弃用,因此大多数安装应禁用此变量。需要特定表的 OID 的应用程序应在创建表时指定 WITH OIDS。可以启用此变量以与不遵循此行为的旧应用程序兼容。
在 PostgreSQL 8.1 中 default_with_oids 默认是关闭的;在 PostgreSQL 的早期版本中,它默认是打开的。
在用户表中使用 OID 被认为已弃用,因此大多数安装应禁用此变量。需要特定表的 OID 的应用程序应在创建表时指定 WITH OIDS。可以启用此变量以与不遵循此行为的旧应用程序兼容。