Thread: BUG #5629: ALTER SEQUENCE foo START execute a RESTART

BUG #5629: ALTER SEQUENCE foo START execute a RESTART

From
"Alexsander"
Date:
The following bug has been logged online:

Bug reference:      5629
Logged by:          Alexsander
Email address:      alexsander.rosa@gmail.com
PostgreSQL version: 8.3.11
Operating system:   Linux
Description:        ALTER SEQUENCE foo START execute a RESTART
Details:

Steps to reproduce:

CREATE SEQUENCE foo;
SELECT setval('foo',12345);
ALTER SEQUENCE foo START WITH 10; -- can't change value
SELECT nextval('foo'); -- it's 10 instead of 12346

Apparently START is executing a RESTART.

Re: BUG #5629: ALTER SEQUENCE foo START execute a RESTART

From
Tom Lane
Date:
"Alexsander" <alexsander.rosa@gmail.com> writes:
> CREATE SEQUENCE foo;
> SELECT setval('foo',12345);
> ALTER SEQUENCE foo START WITH 10; -- can't change value
> SELECT nextval('foo'); -- it's 10 instead of 12346

> Apparently START is executing a RESTART.

Yup.  That's what it's defined to do, pre-8.4.

            regards, tom lane

Re: BUG #5629: ALTER SEQUENCE foo START execute a RESTART

From
Alexsander Rosa
Date:
Then the docs are misleading:
http://www.postgresql.org/docs/8.3/static/sql-altersequence.html

According the docs, 8.3 does NOT have a START clause -- only RESTART. I
think a START clause should raise an error at 8.3 servers; there's a chance
of someone run the command in several servers (like a pgdiff) and get
different behaviour for the same command.

2010/8/26 Tom Lane <tgl@sss.pgh.pa.us>

> "Alexsander" <alexsander.rosa@gmail.com> writes:
> > CREATE SEQUENCE foo;
> > SELECT setval('foo',12345);
> > ALTER SEQUENCE foo START WITH 10; -- can't change value
> > SELECT nextval('foo'); -- it's 10 instead of 12346
>
> > Apparently START is executing a RESTART.
>
> Yup.  That's what it's defined to do, pre-8.4.
>
>                        regards, tom lane
>



--=20
Atenciosamente,
Alexsander da Rosa
Linux User #113925

"Extremismo na defesa da liberdade n=E3o =E9 defeito.
Modera=E7=E3o na busca por justi=E7a n=E3o =E9 virtude."
-- Barry Goldwater

Re: BUG #5629: ALTER SEQUENCE foo START execute a RESTART

From
Tom Lane
Date:
Alexsander Rosa <alexsander.rosa@gmail.com> writes:
> According the docs, 8.3 does NOT have a START clause -- only RESTART. I
> think a START clause should raise an error at 8.3 servers; there's a chance
> of someone run the command in several servers (like a pgdiff) and get
> different behaviour for the same command.

We're not going to change the behavior like that in stable branches...

            regards, tom lane

Re: BUG #5629: ALTER SEQUENCE foo START execute a RESTART

From
Marko Tiikkaja
Date:
On 2010-08-27 12:51 AM +0300, Tom Lane wrote:
> Alexsander Rosa<alexsander.rosa@gmail.com>  writes:
>> According the docs, 8.3 does NOT have a START clause -- only RESTART. I
>> think a START clause should raise an error at 8.3 servers; there's a chance
>> of someone run the command in several servers (like a pgdiff) and get
>> different behaviour for the same command.
>
> We're not going to change the behavior like that in stable branches...

How about documenting it?


Regards,
Marko Tiikkaja

Re: BUG #5629: ALTER SEQUENCE foo START execute a RESTART

From
Alexsander Rosa
Date:
---------- Forwarded message ----------
From: Alexsander Rosa <alexsander.rosa@gmail.com>
Date: 2010/8/27
Subject: Re: [BUGS] BUG #5629: ALTER SEQUENCE foo START execute a RESTART
To: Tom Lane <tgl@sss.pgh.pa.us>


Let me get this straight: in version 8.3 the ALTER SEQUENCE command has an
*undocumented* [1] clause START that is actually an alias for RESTART (i.e.
both reset the sequence value to the value passed by the mandatory
argument). In version 8.4 this behavior was *changed* and, according the
docs [2], START now changes the "default start value" that will be used by
subsequent calls of ALTER SEQUENCE ... RESTART without argument (which is
not mandatory anymore). Is this correct?

Is the 8.3 behavior of ALTER SEQUENCE ... START clause as an alias to
RESTART a known bug (or unintended feature) than cannot be corrected because
it's a stable branch? Who would be using an undocumented buggy clause,
anyway? If it's not being considered a bug, or if it's not going to be
fixed, I think the docs should at least mention this oddity.

[1] http://www.postgresql.org/docs/8.3/static/sql-altersequence.html
[2] http://www.postgresql.org/docs/8.4/static/sql-altersequence.html

2010/8/26 Tom Lane <tgl@sss.pgh.pa.us>

> Alexsander Rosa <alexsander.rosa@gmail.com> writes:
>
> > According the docs, 8.3 does NOT have a START clause -- only RESTART. I
> > think a START clause should raise an error at 8.3 servers; there's a
> chance
> > of someone run the command in several servers (like a pgdiff) and get
> > different behaviour for the same command.
>
> We're not going to change the behavior like that in stable branches...
>
>                        regards, tom lane
>



--=20
Atenciosamente,
Alexsander da Rosa
Linux User #113925

"Extremismo na defesa da liberdade n=E3o =E9 defeito.
Modera=E7=E3o na busca por justi=E7a n=E3o =E9 virtude."
-- Barry Goldwater



--=20
Atenciosamente,
Alexsander da Rosa
Linux User #113925

"Extremismo na defesa da liberdade n=E3o =E9 defeito.
Modera=E7=E3o na busca por justi=E7a n=E3o =E9 virtude."
-- Barry Goldwater

Re: BUG #5629: ALTER SEQUENCE foo START execute a RESTART

From
Tom Lane
Date:
Alexsander Rosa <alexsander.rosa@gmail.com> writes:
> Let me get this straight: in version 8.3 the ALTER SEQUENCE command has an
> *undocumented* [1] clause START that is actually an alias for RESTART (i.e.
> both reset the sequence value to the value passed by the mandatory
> argument).

Yeah.  I just looked at the old code a bit.  This behavior was an
artifact of a sloppy implementation: internally, CREATE SEQUENCE ...
START WITH x did the same thing as ALTER SEQUENCE ... RESTART WITH x, so
the code didn't prevent you from using either spelling in either place.
But it wasn't documented or intended that you should write CREATE
SEQUENCE RESTART or ALTER SEQUENCE START.

As of 8.4 ALTER SEQUENCE START has an actually designed meaning, which
is different from ALTER SEQUENCE RESTART.  This wasn't documented as an
incompatibility because the syntax wasn't supposed to exist at all
before that.

I'm not inclined to go and retroactively document that these spellings
are possible but deprecated in the old branches.  I think that would
just confuse matters even more.

            regards, tom lane

Re: BUG #5629: ALTER SEQUENCE foo START execute a RESTART

From
Euler Taveira de Oliveira
Date:
Tom Lane escreveu:
> I'm not inclined to go and retroactively document that these spellings
> are possible but deprecated in the old branches.  I think that would
> just confuse matters even more.
>
Is it worth preventing that sloppy implementation in the old branches?


--
  Euler Taveira de Oliveira
  http://www.timbira.com/

Re: BUG #5629: ALTER SEQUENCE foo START execute a RESTART

From
Alvaro Herrera
Date:
Excerpts from Euler Taveira de Oliveira's message of mié sep 01 10:18:10 -0400 2010:
> Tom Lane escreveu:
> > I'm not inclined to go and retroactively document that these spellings
> > are possible but deprecated in the old branches.  I think that would
> > just confuse matters even more.
>
> Is it worth preventing that sloppy implementation in the old branches?

That risks removing a (mis)feature that people are currently depending on.

--
Álvaro Herrera <alvherre@commandprompt.com>
The PostgreSQL Company - Command Prompt, Inc.
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

Re: BUG #5629: ALTER SEQUENCE foo START execute a RESTART

From
Alexsander Rosa
Date:
What about the risk of using ALTER SEQUENCE ... START N in a mixed
environment? In the 8.4.x servers it will work as designed but in the 8.3.x
(and below) servers, instead of issuing an error it will CORRUPT the
sequence value without notice. I understand the point of keeping a
(mis)feature when it's harmless or at least not amibiguous, but this is not
the case here. While the 8.4 behavior -- the correct one -- is a mere
configuration of little consequence, the 8.3 (and below) behavior is an
unexpected RESET. I think it's safer to require the people that was using
old versions with the wrong spell to fix their code than put lots of users
of the current version in risk of using a potentially disastrous command --
when executed in previous versions. Should all 8.4.x (and beyond) users be
forced to check server version before issuing this command?

2010/9/1 Alvaro Herrera <alvherre@commandprompt.com>

> Excerpts from Euler Taveira de Oliveira's message of mi=E9 sep 01 10:18:10
> -0400 2010:
> > Tom Lane escreveu:
> > > I'm not inclined to go and retroactively document that these spellings
> > > are possible but deprecated in the old branches.  I think that would
> > > just confuse matters even more.
> >
> > Is it worth preventing that sloppy implementation in the old branches?
>
> That risks removing a (mis)feature that people are currently depending on.
>
> --
> =C1lvaro Herrera <alvherre@commandprompt.com>
> The PostgreSQL Company - Command Prompt, Inc.
> PostgreSQL Replication, Consulting, Custom Development, 24x7 support
>



--=20
Atenciosamente,
Alexsander da Rosa
Linux User #113925

"Extremismo na defesa da liberdade n=E3o =E9 defeito.
Modera=E7=E3o na busca por justi=E7a n=E3o =E9 virtude."
-- Barry Goldwater

Re: BUG #5629: ALTER SEQUENCE foo START execute a RESTART

From
Bruce Momjian
Date:
Alexsander Rosa wrote:
> What about the risk of using ALTER SEQUENCE ... START N in a mixed
> environment? In the 8.4.x servers it will work as designed but in the 8.3.x
> (and below) servers, instead of issuing an error it will CORRUPT the
> sequence value without notice. I understand the point of keeping a
> (mis)feature when it's harmless or at least not amibiguous, but this is not
> the case here. While the 8.4 behavior -- the correct one -- is a mere
> configuration of little consequence, the 8.3 (and below) behavior is an
> unexpected RESET. I think it's safer to require the people that was using
> old versions with the wrong spell to fix their code than put lots of users
> of the current version in risk of using a potentially disastrous command --
> when executed in previous versions. Should all 8.4.x (and beyond) users be
> forced to check server version before issuing this command?

Should all 8.3 users be required to retest their applications after a
minor upgrade?  No.

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + It's impossible for everything to be true. +

Re: BUG #5629: ALTER SEQUENCE foo START execute a RESTART

From
Alexsander Rosa
Date:
Well, if it's not going to be fixed, then at least the docs should be
revised to warn all 8.4+ users to avoid this command and, if it's really
needed, always check the server version before using the ALTER SEQUENCE ...
START command, once it has a potentially hazardous bug that interprets it as
a RESTART in 8.3 version and below.

2010/9/7 Bruce Momjian <bruce@momjian.us>

> Alexsander Rosa wrote:
> > What about the risk of using ALTER SEQUENCE ... START N in a mixed
> > environment? In the 8.4.x servers it will work as designed but in the
> 8.3.x
> > (and below) servers, instead of issuing an error it will CORRUPT the
> > sequence value without notice. I understand the point of keeping a
> > (mis)feature when it's harmless or at least not amibiguous, but this is
> not
> > the case here. While the 8.4 behavior -- the correct one -- is a mere
> > configuration of little consequence, the 8.3 (and below) behavior is an
> > unexpected RESET. I think it's safer to require the people that was usi=
ng
> > old versions with the wrong spell to fix their code than put lots of
> users
> > of the current version in risk of using a potentially disastrous command
> --
> > when executed in previous versions. Should all 8.4.x (and beyond) users
> be
> > forced to check server version before issuing this command?
>
> Should all 8.3 users be required to retest their applications after a
> minor upgrade?  No.
>
> --
>  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
>  EnterpriseDB                             http://enterprisedb.com
>
>  + It's impossible for everything to be true. +
>



--=20
Atenciosamente,
Alexsander da Rosa
Linux User #113925

"Extremismo na defesa da liberdade n=E3o =E9 defeito.
Modera=E7=E3o na busca por justi=E7a n=E3o =E9 virtude."
-- Barry Goldwater