Hi, Le sam. 30 oct. 2021 à 10:55, Daniel Westermann (DWE) < daniel.westerm...@dbi-services.com> a écrit :
> Hi all, > > as I could not find the reason in the source code, can someone tell me why > the OID counter jumps by 3 between two create table statements? > > postgres=# create table t1 ( a int ); > CREATE TABLE > postgres=# create table t2 ( a int ); > CREATE TABLE > postgres=# select oid,relname from pg_class where relname in ('t1','t2'); > oid | relname > -------+--------- > 16453 | t1 > 16456 | t2 > (2 rows) > > These seems not to happen with other objects, e.g. namespaces: > > postgres=# create schema a; > CREATE SCHEMA > postgres=# create schema b; > CREATE SCHEMA > postgres=# select oid,nspname from pg_namespace where nspname in ('a','b'); > oid | nspname > -------+--------- > 16459 | a > 16460 | b > (2 rows) > > ... or indexes: > > postgres=# select oid,relname from pg_class where relname in ('i1','i2'); > oid | relname > -------+--------- > 16461 | i1 > 16462 | i2 > > When you create a table, it also creates two data types: tablename and _tablename. For example, for your table t1, you should have a t1 type and a _t1 type. Both have OIDs. On my cluster, your example gives me: # select oid,relname from pg_class where relname in ('t1','t2'); ┌───────┬─────────┐ │ oid │ relname │ ├───────┼─────────┤ │ 24635 │ t1 │ │ 24638 │ t2 │ └───────┴─────────┘ (2 rows) Time: 0.507 ms # select oid, typname from pg_type where typname like '%t1' or typname like '%t2' and oid>24000 order by oid; ┌───────┬─────────┐ │ oid │ typname │ ├───────┼─────────┤ │ 24636 │ _t1 │ │ 24637 │ t1 │ │ 24639 │ _t2 │ │ 24640 │ t2 │ └───────┴─────────┘ (4 rows) Time: 1.203 ms The jump between t1 OID (24635) and t2 OID (24638) is the _t1 data type OID (24636) and the t1 data type OID (24637). -- Guillaume.