Thread: name truncation problem in 7.0.0

name truncation problem in 7.0.0

From
Ed Loehr
Date:
Maybe someone can confirm what looks like a long-name-truncation bug in
7.0.0?  I haven't tested it on newer releases, nor have I dug into the
code.  The problem appears to be that a different truncation algorithm is
used for creating the truncated sequence name than the algorithm used
when doing the 'drop sequence', e.g.,

    'process_state_subscripti_id_seq'
    'process_state_subscription_id_s'

Here's my test case:

% createdb testdb
CREATE DATABASE

% psql -e -d testdb -f ~ed/pgbug
CREATE TABLE process_state_subscription (
    id                          SERIAL,
    process_id                  INTEGER,
    process_state_id            INTEGER,
    person_id                   INTEGER NOT NULL
);
psql:/home/ed/pgbug:8: NOTICE:  CREATE TABLE will create implicit
sequence 'process_state_subscripti_id_seq' for SERIAL column
'process_state_subscription.id'
psql:/home/ed/pgbug:8: NOTICE:  CREATE TABLE/UNIQUE will create implicit
index 'process_state_subscripti_id_key' for table
'process_state_subscription'
CREATE
DROP SEQUENCE process_state_subscription_id_seq;
psql:/home/ed/pgbug:10: NOTICE:  identifier
"process_state_subscription_id_seq" will be truncated to
"process_state_subscription_id_s"
psql:/home/ed/pgbug:10: ERROR:  Relation
'process_state_subscription_id_s' does not exist


Regards,
Ed Loehr

Attachment

Re: name truncation problem in 7.0.0

From
Tom Lane
Date:
Ed Loehr <eloehr@austin.rr.com> writes:
> Maybe someone can confirm what looks like a long-name-truncation bug in
> 7.0.0?

I see no bug here; it told you what name it planned to use for the
sequence:

> psql:/home/ed/pgbug:8: NOTICE:  CREATE TABLE will create implicit
> sequence 'process_state_subscripti_id_seq' for SERIAL column
> 'process_state_subscription.id'

so this is not surprising:

> DROP SEQUENCE process_state_subscription_id_seq;
> psql:/home/ed/pgbug:10: NOTICE:  identifier
> "process_state_subscription_id_seq" will be truncated to
> "process_state_subscription_id_s"
> psql:/home/ed/pgbug:10: ERROR:  Relation
> 'process_state_subscription_id_s' does not exist

It's not a bug that the sequence name is formed with a rule more complex
than "truncate table_field_seq at the right" ... if we did that, you'd
have a problem with sequences for tables with names longer than 32
characters ...

            regards, tom lane

Re: name truncation problem in 7.0.0

From
Ed Loehr
Date:
Tom Lane wrote:
>
> Ed Loehr <eloehr@austin.rr.com> writes:
> > Maybe someone can confirm what looks like a long-name-truncation bug in
> > 7.0.0?
>
> I see no bug here; it told you what name it planned to use for the
> sequence:
>
> > psql:/home/ed/pgbug:8: NOTICE:  CREATE TABLE will create implicit
> > sequence 'process_state_subscripti_id_seq' for SERIAL column
> > 'process_state_subscription.id'
>
> so this is not surprising:
>
> > DROP SEQUENCE process_state_subscription_id_seq;
> > psql:/home/ed/pgbug:10: NOTICE:  identifier
> > "process_state_subscription_id_seq" will be truncated to
> > "process_state_subscription_id_s"
> > psql:/home/ed/pgbug:10: ERROR:  Relation
> > 'process_state_subscription_id_s' does not exist
>
> It's not a bug that the sequence name is formed with a rule more complex
> than "truncate table_field_seq at the right" ... if we did that, you'd
> have a problem with sequences for tables with names longer than 32
> characters ...

Hmmm.  OK, I think I understand, but it sure makes for some ugliness in
guessing what the name of the SERIAL-generated sequence name will be in
order to drop it.

Is there a clean way I can bump the 32-char limit to something much
larger to support my verbosity?  Maybe NAMEDATALEN in
src/include/postgres_ext.h?  Assuming sufficient memory/disk, are there
other concerns about bumping it to, say, 64 or even 1024?  It's cramping
my style.

Regards,
Ed Loehr

Re: name truncation problem in 7.0.0

From
Tom Lane
Date:
Ed Loehr <eloehr@austin.rr.com> writes:
> Is there a clean way I can bump the 32-char limit to something much
> larger to support my verbosity?  Maybe NAMEDATALEN in
> src/include/postgres_ext.h?

Yup, see the archives.

> Assuming sufficient memory/disk, are there
> other concerns about bumping it to, say, 64 or even 1024?  It's cramping
> my style.

64 or 100 or so seems reasonable, I think 1024 would be excessive ...

            regards, tom lane