While looking at this report
http://archives.postgresql.org/pgsql-bugs/2009-08/msg00083.php
I spotted another error message which could use improvement:
CREATE TABLE foo(a int PRIMARY KEY DEFERRABLE);
CREATE TABLE bar(a int REFERENCES foo(a));
ERROR: there is no unique constraint matching given keys for
referenced table "foo"
Whereas if you define the FK slightly differently so that it goes
through transformFkeyGetPrimaryKey() instead, you get a much better
error message:
CREATE TABLE bar(a int REFERENCES foo);
ERROR: cannot use a deferrable primary key for referenced table "foo"
The attached patch to transformFkeyCheckAttrs() makes the former case
generate a similar error to the latter.
- Dean