Re: BUG #13659: Constraint names truncated without error - Mailing list pgsql-bugs

From Tom Lane
Subject Re: BUG #13659: Constraint names truncated without error
Date
Msg-id 17808.1443714621@sss.pgh.pa.us
Whole thread Raw
In response to BUG #13659: Constraint names truncated without error  (jtc331@gmail.com)
Responses Re: BUG #13659: Constraint names truncated without error  (James Coleman <jtc331@gmail.com>)
List pgsql-bugs
jtc331@gmail.com writes:
> If I create the following schema:

> create table t(n integer);
> alter table t add constraint
>   test_contrainst_that_has_a_very_long_name_to_trigger_the_character_limit
>   check (n != 1);

> the constraint name appears to be automatically truncated without error, as
> confirmed with:

> SELECT tc.constraint_name, tc.table_name
> FROM information_schema.table_constraints AS tc
> WHERE tc.table_name = 't'

> Since PG raises errors when index names, for example, are too long, I
> believe it should do the same for constraints.

Really?  I see the same type of behavior for both cases:

regression=# create table t(n integer);
CREATE TABLE
regression=# alter table t add constraint
  test_contrainst_that_has_a_very_long_name_to_trigger_the_character_limit
  check (n != 1);
NOTICE:  identifier "test_contrainst_that_has_a_very_long_name_to_trigger_the_character_limit" will be truncated to
"test_contrainst_that_has_a_very_long_name_to_trigger_the_charac"
ALTER TABLE
regression=# create index test_index_test_contrainst_that_has_a_very_long_name_to_trigger_the_character_limit on t(n);
NOTICE:  identifier "test_index_test_contrainst_that_has_a_very_long_name_to_trigger_the_character_limit" will be
truncatedto "test_index_test_contrainst_that_has_a_very_long_name_to_trigger" 
CREATE INDEX
regression=# \d+ t
                          Table "public.t"
 Column |  Type   | Modifiers | Storage | Stats target | Description
--------+---------+-----------+---------+--------------+-------------
 n      | integer |           | plain   |              |
Indexes:
    "test_index_test_contrainst_that_has_a_very_long_name_to_trigger" btree (n)
Check constraints:
    "test_contrainst_that_has_a_very_long_name_to_trigger_the_charac" CHECK (n <> 1)


Given where the identifier truncation behavior occurs, in the lexer, it
would be mildly astonishing if it didn't work the same for both cases.

            regards, tom lane

pgsql-bugs by date:

Previous
From: Tom Lane
Date:
Subject: Re: BUG #13655: Incorrect Syntax Error
Next
From: Tom Lane
Date:
Subject: Re: BUG #13658: DELETE with syntax error in subselect deletes ALL