Tom Lane wrote:
Alvaro Herrera <[EMAIL PROTECTED]> writes:
On Thu, Nov 06, 2003 at 11:42:13AM -0500, Tom Lane wrote:
I don't have a problem with switching from "$1" to "tablename_$1", orIt certainly _is_ unique within a schema ...
some such, for auto-generated constraint names. But if it's not
guaranteed unique, does it really satisfy Philip's concern?
(But what happens to the constraint name when the table is renamed?)
Exactly. Also consider manually-assigned constraint names that happen to look like "foo_$n" --- these could cause trouble if table foo is created later. To make a guarantee of uniqueness would require more infrastructure than just a simple hack of the constraint name generator logic.
BTW we also have some problems with auto-generated names for column constraints; these generally look like "tablename_columnname", and that's not unique:
regression=# create table foo (f1 int check (f1 > 0) check (f1 < 10));
ERROR: check constraint "foo_f1" already exists
Is this a TODO to fix?
I think there are several of them from this thread:
. make autogenerated column constraint names unique per table (by adding "_$n" ?)
. add tableoid or tablename to information_schema.{check_constraints, referential_constraints} (I think those are the only places where it would be needed, from my quick skimming).
. add tableoid or tablename to autogenerated table constraint names
Is that a fair summary of discussion so far?
(My take)
Using tableoid instead of tablename avoids renaming problems, but makes the names horribly opaque IMNSHO. I know I've been annoyed from an aesthetic POV more than once by the "$1" thing.
cheers
andrew
---------------------------(end of broadcast)--------------------------- TIP 4: Don't 'kill -9' the postmaster