Re: CREATE TABLE glitch -fix request for 7.2

From: Jason Earl <jason(dot)earl(at)simplot(dot)com>
To: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
Cc: Josh Berkus <josh(at)agliodbs(dot)com>, pgsql-sql(at)postgresql(dot)org
Subject: Re: CREATE TABLE glitch -fix request for 7.2
Date: 2002-01-14 21:55:25
Message-ID: 87k7ukegxe.fsf@npa01zz001.simplot.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us> writes:

> Josh Berkus wrote:
> > Tom, Peter, Stephan, et al.:
> >
> > Here's a glitch that's bothered me for a while (ver 7.0 -> 7.2b4 ) in
> > PostgreSQL DDL statements. I was thinking that since 7.2 is still in beta,
> > that you could fix it this version.
> >
> > To produce the glitch:
> > 1. Create a SQL script file that drops a table, then creates that table with a
> > SERIAL primary key (I do this all the time to build my databases)
> > 2. Run the script once to create the table. You'll get a error (no table to
> > drop) but that doesn't matter.
> > 3. Run the script a second time, as if you were making changes to the data
> > structure and needed to rebuild.
> > 4. You will get an error telling you that "table1_id_seq" already exists, and
> > the CREATE TABLE statement will fail.
> >
> > This is very user-unfriendly behaviour, especially in a database that still
> > does not support about 50% of ALTER TABLE. I spend a fair amount of extra
> > time deleting SERIAL sequences when I am doing the database-building part of
> > the development process.
> >
> > Can we change this behavior, please? I'd suppose that it would require you to
> > create some sort of permanent link between SERIAL columns and the sequences
> > they spawn.
>
> We need pg_depend table to track dependency of sequence on specific
> tables, hopefully in >=7.3.

In the meantime Josh the simple workaround is to not use the SERIAL
type. Instead when you create your SQL script create the sequences
manually (that way you can drop them manually as well. My SQL scripts
look like this:

DROP TABLE prod_journal;
DROP SEQUENCE prod_journal_id_seq;

BEGIN;

CREATE SEQUENCE prod_journal_id_seq;

CREATE TABLE prod_journal (
id int PRIMARY KEY
DEFAULT nextval('prod_journal_id_seq'),
...

You undoubtedly get the picture by now. With the right text editor
creating a template for this sort of thing is almost as easy as using
the SERIAL keyword and a whole lot more flexible.

More importantly, if I want to run the script again and rebuild my
schema, everything works as expected.

Jason

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message Tom Lane 2002-01-14 22:01:55 Re: SQL Joins
Previous Message Tom Lane 2002-01-14 21:37:26 Re: nested inner join help