Re: Why does the OID jump by 3 when creating tables?

From: Guillaume Lelarge <guillaume(at)lelarge(dot)info>
To: "Daniel Westermann (DWE)" <daniel(dot)westermann(at)dbi-services(dot)com>
Cc: "pgsql-general(at)lists(dot)postgresql(dot)org" <pgsql-general(at)lists(dot)postgresql(dot)org>
Subject: Re: Why does the OID jump by 3 when creating tables?
Date: 2021-10-30 09:51:04
Message-ID: CAECtzeVdtcSa7ceOLgFm3E_6awPbtG20pzy4gqcugOB4x2Pt6g@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi,

Le sam. 30 oct. 2021 à 10:55, Daniel Westermann (DWE) <
daniel(dot)westermann(at)dbi-services(dot)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.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Daniel Westermann (DWE) 2021-10-30 10:20:55 Re: Why does the OID jump by 3 when creating tables?
Previous Message Daniel Westermann (DWE) 2021-10-30 08:55:34 Why does the OID jump by 3 when creating tables?