BUG #3295: pg_get_serial_sequence returns wrong sequence name for a serial column

Started by Philip Ivesalmost 19 years ago2 messagesbugs
Jump to latest
#1Philip Ives
phil@ivesdigital.com

The following bug has been logged online:

Bug reference: 3295
Logged by: Philip Ives
Email address: phil@ivesdigital.com
PostgreSQL version: 8.1.4
Operating system: Darwin and FreeBSD 4
Description: pg_get_serial_sequence returns wrong sequence name for a
serial column
Details:

pg_get_serial_sequence doesn't return the correct sequence name and returns
a null. This function either shouldn't exist or it should always return the
right name.

: Table "public.ccprocesses"
Column | Type |
Modifiers
---------------------+-----------------------------+------------------------
------------------------------------------
id | bigint | not null default
nextval(('seq_ccprocesses_id'::text)::regclass)

select * from pg_get_serial_sequence('ccprocesses','id');
pg_get_serial_sequence
------------------------

(1 row)

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Philip Ives (#1)
Re: BUG #3295: pg_get_serial_sequence returns wrong sequence name for a serial column

"Philip Ives" <phil@ivesdigital.com> writes:

pg_get_serial_sequence doesn't return the correct sequence name and returns
a null.

Can you provide a reproducible test case for this?

The example you give looks suspiciously like the column was not created
using the SERIAL notation, but through some hand approximation to that.
pg_get_serial_sequence() only works for actual SERIAL columns, because
it looks for a pg_depend entry that's made by SERIAL but not by just
creating a column that happens to involve a nextval() default.

As of 8.2 there's an ALTER SEQUENCE OWNED BY command that you can use
to reproduce this side-effect of SERIAL, but in prior releases there's
no way, unless you're brave enough to insert the pg_depend entry by
hand.

regards, tom lane