>>Le sam. 30 oct. 2021 à 10:55, Daniel Westermann (DWE) <daniel.westermann@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
createtable >>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
shouldhave 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).
Thank you, Guillaume.