Re: [HACKERS] Re: Serial Data Type Failure - Mailing list pgsql-hackers

From Thomas G. Lockhart
Subject Re: [HACKERS] Re: Serial Data Type Failure
Date
Msg-id 3605E705.3E9A0ADA@alumni.caltech.edu
Whole thread Raw
In response to Serial Data Type Failure  (David Hartwig <daveh@insightdist.com>)
List pgsql-hackers
> > ERROR:  Cannot create index: 'bar_id_key' already exists
> > -- This is bad.  Sorry.

postgres=> CREATE TABLE bar (
postgres->         id serial,
postgres->         name varchar(32)
postgres-> );
NOTICE:  CREATE TABLE will create implicit sequence bar_id_seq for
SERIAL column bar.id
NOTICE:  CREATE TABLE/UNIQUE will create implicit index bar_id_key for
table bar
CREATE

I hadn't noticed that there was a positional dependency in the code I
had moved around to implement the SERIAL PRIMARY KEY feature. Sorry
about that.

Patch enclosed. Will commit to source tree soon...

                   - Tom
*** analyze.c.orig    Wed Sep 16 14:59:22 1998
--- analyze.c    Mon Sep 21 05:18:07 1998
***************
*** 517,528 ****

                  if (column->is_sequence)
                  {
!                     char       *cstring;
                      CreateSeqStmt *sequence;

                      constraint = makeNode(Constraint);
                      constraint->contype = CONSTR_DEFAULT;
!                     constraint->name = makeTableName(stmt->relname, column->colname, "seq", NULL);
                      cstring = palloc(9 + strlen(constraint->name) + 2 + 1);
                      strcpy(cstring, "nextval('");
                      strcat(cstring, constraint->name);
--- 517,529 ----

                  if (column->is_sequence)
                  {
!                     char          *sname;
!                     char          *cstring;
                      CreateSeqStmt *sequence;

                      constraint = makeNode(Constraint);
                      constraint->contype = CONSTR_DEFAULT;
!                     constraint->name = sname = makeTableName(stmt->relname, column->colname, "seq", NULL);
                      cstring = palloc(9 + strlen(constraint->name) + 2 + 1);
                      strcpy(cstring, "nextval('");
                      strcat(cstring, constraint->name);
***************
*** 551,557 ****
                      }

                      sequence = makeNode(CreateSeqStmt);
!                     sequence->seqname = pstrdup(constraint->name);
                      sequence->options = NIL;

                      elog(NOTICE, "CREATE TABLE will create implicit sequence %s for SERIAL column %s.%s",
--- 552,558 ----
                      }

                      sequence = makeNode(CreateSeqStmt);
!                     sequence->seqname = pstrdup(sname);
                      sequence->options = NIL;

                      elog(NOTICE, "CREATE TABLE will create implicit sequence %s for SERIAL column %s.%s",

pgsql-hackers by date:

Previous
From: Christopher Oliver
Date:
Subject: Re: [sferac@bo.nettuno.it: Re: [HACKERS] BUG: NOT boolfield kills backend]
Next
From: The Hermit Hacker
Date:
Subject: Re: My patches