No Postgres, é possível configurar uma restrição de chave estrangeira envolvendo componentes de um tipo composto, em uma situação como a seguinte?
Suponha que eu tenha
CREATE TABLE main (
-- a and b are separate fields
a INTEGER,
b INTEGER,
PRIMARY KEY (a,b)
);
CREATE TYPE abtype AS (
a INTEGER,
b INTEGER
);
CREATE TABLE sub (
-- a and b are components of a composite type
ab abtype,
PRIMARY KEY (ab)
);
Como configuro uma restrição de chave estrangeira especificando essas sub.ab
referências main.(a,b)
?
As tentativas a seguir estão todas sintaticamente erradas.
ALTER TABLE sub ADD CONSTRAINT sub_ab_fkey FOREIGN KEY
... (ab) REFERENCES main(a,b);
... (ab) REFERENCES main((a,b));
... (ab) REFERENCES main((a,b)::abtype);
... (ab) REFERENCES main(a,b)::abtype;
... ((ab).a,(ab).b) REFERENCES main(a,b);
... (ab.a,ab.b) REFERENCES main(a,b);
Como apontei nos comentários, você pode adicionar uma nova coluna composta na
main
tabela:E defina um índice exclusivo:
Agora você pode referenciar seu FK para esta coluna:
db<>fique aqui