Received: from localhost (postgresql.org [64.49.215.8]) by postgresql.org (Postfix) with ESMTP id 61BA1475ECE; Thu, 21 Nov 2002 14:11:15 -0500 (EST) Received: from candle.pha.pa.us (momjian.navpoint.com [207.106.42.251]) by postgresql.org (Postfix) with ESMTP id 67664475EB2; Thu, 21 Nov 2002 14:11:13 -0500 (EST) Received: (from pgman@localhost) by candle.pha.pa.us (8.11.6/8.10.1) id gALJB8G21214; Thu, 21 Nov 2002 14:11:08 -0500 (EST) From: Bruce Momjian Message-Id: <200211211911.gALJB8G21214@candle.pha.pa.us> Subject: Re: [HACKERS] [GENERAL] Bug with sequence In-Reply-To: To: "Thomas O'Connell" Date: Thu, 21 Nov 2002 14:11:08 -0500 (EST) Cc: pgsql-hackers@postgresql.org, pgsql-sql@postgresql.org X-Mailer: ELM [version 2.4ME+ PL99 (25)] MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Virus-Scanned: by AMaViS new-20020517 X-Archive-Number: 200211/335 X-Sequence-Number: 10477 Of course, those would be SQL purists who _don't_ understand concurrency issues. ;-) --------------------------------------------------------------------------- Thomas O'Connell wrote: > 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 > > ---------------------------(end of broadcast)--------------------------- > TIP 3: if posting/reading through Usenet, please send an appropriate > subscribe-nomail command to majordomo@postgresql.org so that your > message can get through to the mailing list cleanly > -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073