Re: Inconsistent error message for varchar(n)
От | Tom Lane |
---|---|
Тема | Re: Inconsistent error message for varchar(n) |
Дата | |
Msg-id | 1922059.1636818145@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Inconsistent error message for varchar(n) (Japin Li <japinli@hotmail.com>) |
Ответы |
Re: Inconsistent error message for varchar(n)
|
Список | pgsql-hackers |
Japin Li <japinli@hotmail.com> writes: > postgres=# CREATE TABLE tbl (s varchar(2147483647)); > ERROR: length for type varchar cannot exceed 10485760 > LINE 1: CREATE TABLE tbl (s varchar(2147483647)); > ^ > postgres=# CREATE TABLE tbl (s varchar(2147483648)); > ERROR: syntax error at or near "2147483648" > LINE 1: CREATE TABLE tbl (s varchar(2147483648)); > ^ I'm having a very hard time getting excited about that. We could maybe switch the grammar production to use generic expr_list syntax for the typmod, like GenericType does. But that would just result in this: regression=# CREATE TABLE tbl (s "varchar"(2147483648)); ERROR: value "2147483648" is out of range for type integer LINE 1: CREATE TABLE tbl (s "varchar"(2147483648)); ^ which doesn't seem any less confusing for a novice who doesn't know that typmods are constrained to be integers. There might be something to be said for switching all the hard-wired type productions to use opt_type_modifiers and pushing the knowledge that's in, eg, opt_float out to per-type typmodin routines. But any benefit would be in reduction of the grammar size, and I'm dubious that it'd be worth the trouble. I suspect that overall, the resulting error messages would be slightly worse not better --- note for example the poorer placement of the error cursor above. A related example is regression=# CREATE TABLE tbl (s varchar(2,3)); ERROR: syntax error at or near "," LINE 1: CREATE TABLE tbl (s varchar(2,3)); ^ regression=# CREATE TABLE tbl (s "varchar"(2,3)); ERROR: invalid type modifier LINE 1: CREATE TABLE tbl (s "varchar"(2,3)); ^ That's explained by the comment in anychar_typmodin: * we're not too tense about good error message here because grammar * shouldn't allow wrong number of modifiers for CHAR and we could surely improve that message, but anychar_typmodin can't give a really on-point error cursor. regards, tom lane
В списке pgsql-hackers по дате отправления: