Richard Huxton <dev@archonet.com> writes:
> You might get somewhere with:
> CREATE OR REPLACE FUNCTION testfunc(ct) RETURNS int AS
> 'SELECT $1.foo;'
> LANGUAGE SQL IMMUTABLE;
> CREATE UNIQUE INDEX t1_b_uniq ON t1 (testfunc(b));
The point is that "attr.foo" is an expression, not a column name, and
the SQL spec allows UNIQUE and PRIMARY KEY only on bare column names.
I don't believe you need the function -- this should be enough:
CREATE UNIQUE INDEX t1_b_uniq ON t1 ((attr.foo));
regards, tom lane