Минимальные определения:
CREATE TYPE GlobalId AS (
id1 BigInt,
id2 SmallInt
);
CREATE TABLE table1 (
id1 BigSerial NOT NULL,
id2 SmallInt NOT NULL,
PRIMARY KEY (id1, id2)
);
CREATE TABLE table2 (
global_id GlobalId NOT NULL,
FOREIGN KEY (global_id) REFERENCES table1 (id1, id2)
);
Короче говоря, я использую составной тип для table2
(и многих других таблиц), но для основной таблицы (table1
) я не работаю напрямуюиспользуйте составной тип, потому что составные типы не поддерживают использование Serial
.
. Выше приведено следующее сообщение об ошибке из-за очевидного несоответствия между global_id
и id1, id2
: number of referencing and referenced columns for foreign key disagree
.
В качестве альтернативы, если я определяю внешний ключ как FOREIGN KEY (global_id.id1, global_id.id2) REFERENCES table1 (id1, id2)
, я получаю синтаксическую ошибку при использовании средства доступа на global_id
.
Есть какие-нибудь идеи о том, как определить эту связь внешнего ключа?В качестве альтернативы, если у table1
есть способ использовать составной тип GlobalId
, в то же время получая последовательное / последовательное поведение для id1
, это также работает.