Thread: How to implement an auto-increment column for a system catalog table?
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
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
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