Обсуждение: bad error message
I got a really bad error message in postgres on a CREATE TABLE in 8.1.0:
ERROR: column "id" referenced in foreign key constraint does not exist
That seems odd-- I mean, I know I obviously made an error. I'm just
used to more detailed errors.
I didn't see anything in the changelogs since 8.1.0 saying that it
was addressed-- I could have missed that-- but it also might not have
been.
So... where can i complain that the error message should include the
field name I tried to toss the references constraint in ?
// Jonathan Vanasco
am Thu, dem 12.10.2006, um 15:27:08 -0400 mailte Jonathan Vanasco folgendes: > > I got a really bad error message in postgres on a CREATE TABLE in 8.1.0: > > ERROR: column "id" referenced in foreign key constraint does not > exist > > That seems odd-- I mean, I know I obviously made an error. I'm just > used to more detailed errors. Can you show us your SQL? The message is clear: you create a new table with a foreign key to an other table that doesn't exist. An example: -- first, i create a table with a primary key test=# create table t1 (id int primary key, foo text); NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "t1_pkey" for table "t1" CREATE TABLE -- now i create a new table with a foreign key constraint to the first -- table test=# create table t2 (id int references t1(id)); CREATE TABLE -- -- and now i make a mistake -- test=# create table t3 (id int references t1(id_)); ERROR: column "id_" referenced in foreign key constraint does not exist HTH, Andreas -- Andreas Kretschmer Kontakt: Heynitz: 035242/47215, D1: 0160/7141639 (mehr: -> Header) GnuPG-ID: 0x3FFF606C, privat 0x7F4584DA http://wwwkeys.de.pgp.net
On Oct 12, 2006, at 3:44 PM, A. Kretschmer wrote:
> Can you show us your SQL? The message is clear: you create a new table
> with a foreign key to an other table that doesn't exist. An example:
Yes, I know that part. The error message is bad though, because it
doesn't tell me exactly where the error is.
I got as an error
ERROR: column "id" referenced in foreign key constraint does not exist
I should have gotten something like
ERROR: column "id" referenced in foreign key constraint on column
"xyz" table "abc" does not exist
( the table "abc" is not necessary, i just wanted to be explicit
about the message )
In that create table statement, i had 10 columns each referencing an
'id' in another column. I like very normalized DBs.
I had to go through each column individually to see where my error
was. Postgres should have immediately told me which of the source
table columns that constraint failed on-- not just about the target
column name.
Jonathan Vanasco <postgres@2xlp.com> writes:
> Yes, I know that part. The error message is bad though, because it
> doesn't tell me exactly where the error is.
> I got as an error
> ERROR: column "id" referenced in foreign key constraint does not exist
> I should have gotten something like
> ERROR: column "id" referenced in foreign key constraint on column
> "xyz" table "abc" does not exist
That's not necessarily all that much help, if you've got so many FK
constraints in your command that you don't know exactly where to look.
I think what you're really wishing for is an error cursor position.
8.2 has the infrastructure for this, eg
regression=# create table foo (a int, b int, c int);
CREATE TABLE
regression=# select a, b, q from foo;
ERROR: column "q" does not exist
LINE 1: select a, b, q from foo;
^
regression=#
but unfortunately the facility hasn't been extended to foreign key
constraint clauses in particular :-(. Maybe next time.
regards, tom lane
On Oct 12, 2006, at 7:39 PM, Tom Lane wrote: > That's not necessarily all that much help, if you've got so many FK > constraints in your command that you don't know exactly where to look. > I think what you're really wishing for is an error cursor position. > 8.2 has the infrastructure for this, eg > > regression=# create table foo (a int, b int, c int); > CREATE TABLE > regression=# select a, b, q from foo; > ERROR: column "q" does not exist > LINE 1: select a, b, q from foo; > ^ > regression=# > > but unfortunately the facility hasn't been extended to foreign key > constraint clauses in particular :-(. Maybe next time I'll be glad if it makes it into a future release. It would be a GREAT feature. Thats for the info on the cursor position. thats a nice update in the .2 branch.
am Thu, dem 12.10.2006, um 19:39:37 -0400 mailte Tom Lane folgendes: > I think what you're really wishing for is an error cursor position. > 8.2 has the infrastructure for this, eg > > regression=# create table foo (a int, b int, c int); > CREATE TABLE > regression=# select a, b, q from foo; > ERROR: column "q" does not exist > LINE 1: select a, b, q from foo; > ^ > regression=# Very cool feature ... Andreas -- Andreas Kretschmer Kontakt: Heynitz: 035242/47215, D1: 0160/7141639 (mehr: -> Header) GnuPG-ID: 0x3FFF606C, privat 0x7F4584DA http://wwwkeys.de.pgp.net