Re: [PATCH] Support for Array ELEMENT Foreign Keys

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: Andres Freund <andres@2ndquadrant.com>
Cc: pgsql-hackers@postgresql.org, Andrew Dunstan <andrew@dunslane.net>, Marco Nenciarini <marco.nenciarini@2ndquadrant.it>
Date: 2012-10-19T21:20:06Z
Lists: pgsql-hackers
Andres Freund <andres@2ndquadrant.com> writes:
> What about sticking a WHERE in there? I.e. FOREIGN KEY (foo, WHERE EACH 
> ELEMENT OF bar) ...

Well, we don't really need it in the table-constraint case.  The
column-constraint case is the sticking point.

I tested, and indeed this seems to work:

	CREATE TABLE t1 (c int[] WHERE EACH ELEMENT REFERENCES t2);

and it's perfectly sensible from an English-grammar standpoint too.

If we take that, how would we spell the table-constraint case exactly?
Grammatically I'd prefer

	FOREIGN KEY (foo, EACH ELEMENT OF bar) REFERENCES

but this seems a bit far afield from the column-constraint syntax.
OTOH, that's a pretty minor quibble.  These work according to bison,
and they wouldn't make a grammarian run away screaming, so maybe we
should just be happy with that.

			regards, tom lane