Обсуждение: CREATE TABLE glitch -fix request for 7.2

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

CREATE TABLE glitch -fix request for 7.2

От
"Josh Berkus"
Дата:
Tom, Peter, Stephan, et al.:

Here's a glitch that's bothered me for a while (ver 7.0 -> 7.2b4 ) inPostgreSQL DDL statements.  I was thinking that
since7.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 aSERIAL primary key (I do this all the
timeto build my databases)
 
2. Run the script once to create the table.  You'll get a error (no table todrop) but that doesn't matter.
3. Run the script a second time, as if you were making changes to the datastructure and needed to rebuild.  
4. You will get an error telling you that "table1_id_seq" already exists, andthe CREATE TABLE statement will fail.

This is very user-unfriendly behaviour, especially in a database that stilldoes not support about 50% of ALTER TABLE.
Ispend a fair amount of extratime deleting SERIAL sequences when I am doing the database-building part ofthe
developmentprocess.
 

Can we change this behavior, please?  I'd suppose that it would require you tocreate some sort of permanent link
betweenSERIAL columns and the sequencesthey spawn.
 

-Josh Berkus

______AGLIO DATABASE SOLUTIONS___________________________                                      Josh Berkus Complete
informationtechnology      josh@agliodbs.com  and data management solutions       (415) 565-7293 for law firms, small
businesses       fax 621-2533   and non-profit organizations.      San Francisco
 


Re: CREATE TABLE glitch -fix request for 7.2

От
Tom Lane
Дата:
"Josh Berkus" <josh@agliodbs.com> writes:
>  I was thinking that since 7.2 is still in beta,
>  that you could fix it this version.

Not a chance.  Sorry.  If you'd cared to submit some code six months
ago...  but this is a nontrivial change, the problem has been of long
standing and yet hasn't especially motivated anyone to work on it, and
we are *not* holding up 7.2 any more for anything but critical bugs.
        regards, tom lane


Re: CREATE TABLE glitch -fix request for 7.2

От
Bruce Momjian
Дата:
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.

--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610)
853-3000+  If your life is a hard drive,     |  830 Blythe Avenue +  Christ can be your backup.        |  Drexel Hill,
Pennsylvania19026
 


Re: CREATE TABLE glitch -fix request for 7.2

От
"Josh Berkus"
Дата:
Tom,

> Not a chance.  Sorry.  If you'd cared to submit some code six months
> ago...  but this is a nontrivial change, the problem has been of long
> standing and yet hasn't especially motivated anyone to work on it, and
> we are *not* holding up 7.2 any more for anything but critical bugs.

OK.  In 7.3, then?  Maybe?

-Josh

______AGLIO DATABASE SOLUTIONS___________________________                                      Josh Berkus Complete
informationtechnology      josh@agliodbs.com  and data management solutions       (415) 565-7293 for law firms, small
businesses       fax 621-2533   and non-profit organizations.      San Francisco
 


Re: CREATE TABLE glitch -fix request for 7.2

От
Jason Earl
Дата:
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