Re: CREATE TABLE glitch -fix request for 7.2

Поиск
Список
Период
Сортировка
От Jason Earl
Тема Re: CREATE TABLE glitch -fix request for 7.2
Дата
Msg-id 87k7ukegxe.fsf@npa01zz001.simplot.com
обсуждение исходный текст
Ответ на Re: CREATE TABLE glitch -fix request for 7.2  (Bruce Momjian <pgman@candle.pha.pa.us>)
Список pgsql-sql
Bruce Momjian <pgman@candle.pha.pa.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


В списке pgsql-sql по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: SQL Joins
Следующее
От: Jeff Eckermann
Дата:
Сообщение: Re: Result sets from functions