Received: from localhost (postgresql.org [64.49.215.8]) by postgresql.org (Postfix) with ESMTP id 8F09E475DAD; Thu, 21 Nov 2002 13:53:46 -0500 (EST) Received: from news.hub.org (news.hub.org [64.49.215.80]) by postgresql.org (Postfix) with ESMTP id 2B680475CA9; Thu, 21 Nov 2002 13:53:46 -0500 (EST) Received: by news.hub.org (Postfix, from userid 8) id 1B21943A632; Thu, 21 Nov 2002 13:53:46 -0500 (EST) From: Thomas O'Connell X-Newsgroups: comp.databases.postgresql.hackers,comp.databases.postgresql.sql Subject: Re: [GENERAL] Bug with sequence Date: Thu, 21 Nov 2002 12:53:46 -0600 Organization: Monster Labs, Inc. Lines: 54 Message-ID: References: <7017.1037851915@sss.pgh.pa.us> X-Complaints-To: usenet@news.hub.org User-Agent: MT-NewsWatcher/3.3b1 (PPC Mac OS X) To: pgsql-hackers@postgresql.org, pgsql-sql@postgresql.org X-Virus-Scanned: by AMaViS new-20020517 X-Archive-Number: 200211/334 X-Sequence-Number: 10476 It seems worth pointing out, too, that some SQL purists propose not relying on product-specific methods of auto-incrementing. I.e., it is possible to do something like: insert into foo( col, ... ) values( coalesce( ( select max( col ) from foo ), 0 ) + 1, ... ); and this is easily placed in a trigger. -tfo In article <7017.1037851915@sss.pgh.pa.us>, tgl@sss.pgh.pa.us (Tom Lane) wrote: > Justin Clift writes: > > Oliver Elphick wrote: > >> I created a sequence using SERIAL when I created a table. I used the > >> same sequence for another table by setting a column default to > >> nextval(sequence). > >> > >> I deleted the first table. The sequence was deleted too, leaving the > >> default of the second table referring to a non-existent sequence. > > > This sounds like a serious bug in our behaviour, and not something we'd > > like to release. > > We will be releasing it whether we like it or not, because > nextval('foo') doesn't expose any visible dependency on sequence foo. > > (If you think it should, how about nextval('fo' || 'o')? If you think > that's improbable, consider nextval('table' || '_' || 'col' || '_seq').) > > The long-term answer is to do what Rod alluded to: support the > Oracle-style syntax foo.nextval, so that the sequence reference is > honestly part of the parsetree and not buried inside a string > expression. > > In the meantime, I consider that Oliver was misusing the SERIAL > feature. If you want multiple tables fed by the same sequence object, > you should create the sequence as a separate object and then create > the tables using explicit "DEFAULT nextval('foo')" clauses. Doing what > he did amounts to sticking his fingers under the hood of the SERIAL > implementation; if he gets his fingers burnt, it's his problem. > > > Specifically in relation to people's existing scripts, and also to > > people who are doing dump/restore of specific tables (it'll kill the > > sequences that other tables depend on too!) > > 7.3 breaks no existing schemas, because older schemas will be dumped > as separate CREATE SEQUENCE and CREATE TABLE ... DEFAULT nextval() > commands. > > regards, tom lane