Обсуждение: How to implement an auto-increment column for a system catalog table?

Поиск
Список
Период
Сортировка

How to implement an auto-increment column for a system catalog table?

От
Xin Wang
Дата:
Hi all,
I am using Postgres to build the prototype in a research project. I need
to create a new system catalog table with an auto-increment column. For
a ordinary table, CREATE SEQUENCE or a serial type can be used to
implement the auto-increment column, but it seems Postgres do not
support creating a sequence or serial types in system catalogs. How to
implement an auto-increment column for a catalog table?

Thanks in advance.

Wang


Re: How to implement an auto-increment column for a system catalog table?

От
Simon Riggs
Дата:
On Mon, 2009-03-16 at 10:18 +0800, Xin Wang wrote:

> I am using Postgres to build the prototype in a research project. I need
> to create a new system catalog table with an auto-increment column. For
> a ordinary table, CREATE SEQUENCE or a serial type can be used to
> implement the auto-increment column, but it seems Postgres do not
> support creating a sequence or serial types in system catalogs. How to
> implement an auto-increment column for a catalog table?

Other catalog tables use a new oid for each new row/entry. Just do it in
the code for adding each new entry. Look at backend/catalog/heap.c
heap_create_with_catalog(), or something simpler like
backend/commands/dbcommands.c createdb().

-- Simon Riggs           www.2ndQuadrant.comPostgreSQL Training, Services and Support



Re: How to implement an auto-increment column for a system catalog table?

От
Tom Lane
Дата:
Simon Riggs <simon@2ndQuadrant.com> writes:
> On Mon, 2009-03-16 at 10:18 +0800, Xin Wang wrote:
>> I am using Postgres to build the prototype in a research project. I need
>> to create a new system catalog table with an auto-increment column.

> Other catalog tables use a new oid for each new row/entry. Just do it in
> the code for adding each new entry. Look at backend/catalog/heap.c
> heap_create_with_catalog(), or something simpler like
> backend/commands/dbcommands.c createdb().

Note that in fact the bottom level heap_insert code will handle
assigning a new OID for you.  The only cases where calling code needs to
do that explicitly are when the OID has to be known before creation of
the new row for some reason (usually, circular OID references).
        regards, tom lane