Tom Lane <tgl@sss.pgh.pa.us> writes:
> Peter Eisentraut <peter@eisentraut.org> writes:
>> Would it work to just overload pg_get_serial_sequence with regclass
>> argument types?
>
> Probably not; the parser would have no principled way to resolve
> pg_get_serial_sequence('foo', 'bar') as one or the other. I'm
> not sure offhand if it would throw error or just choose one, but
> if it just chooses one it'd likely be the text variant.
That works fine, and it prefers the text version:
~=# create function pg_get_serial_sequence(tbl regclass, col name)
returns regclass strict stable parallel safe
return pg_get_serial_sequence(tbl::text, col::text)::regclass;
CREATE FUNCTION
~=# select pg_typeof(pg_get_serial_sequence('identest', 'id'));
┌───────────┐
│ pg_typeof │
├───────────┤
│ text │
└───────────┘
(1 row)
~=# select pg_typeof(pg_get_serial_sequence('identest', 'id'::name));
┌───────────┐
│ pg_typeof │
├───────────┤
│ regclass │
└───────────┘
(1 row)
> It's possible that we could get away with just summarily changing
> the argument type from text to regclass. ISTR that we did exactly
> that with nextval() years ago, and didn't get too much push-back.
> But we couldn't do the same for the return type. Also, this
> approach does nothing for the concern about the name being
> misleading.
Maybe we should go all the way the other way, and call it
pg_get_identity_sequence() and claim that "serial" is a legacy form of
identity columns?
- ilmari