Если вы перечислите столбцы, на которые ссылаетесь, имена столбцов, на которые ссылаются, должны быть заключены в скобки (которые могут содержать разделенный запятыми список имен столбцов).
Если ваш внешний ключ ссылается на первичный ключ другой таблицы, достаточно указать имя ссылочной таблицы.
(Также обратите внимание, что в операторах CREATE TABLE в вопросе опущены типы данных столбцов в таблице, что приводит к общей синтаксической ошибке.)
Таким образом, вы можете использовать:
CREATE TABLE relacion_Usuarios_pertenecen_Instituto
(
foranea_CI_usuario INTEGER NOT NULL
REFERENCES Usuarios(CI) CONSTRAINT f1_relacion_usarios_pertencen_instituto,
foranea_id_instituto INTEGER NOT NULL
REFERENCES Institutos CONSTRAINT f2_relacion_usarios_pertencen_instituto,
PRIMARY KEY (foranea_CI_usuario, foranea_id_instituto)
CONSTRAINT pk_relacion_usarios_pertencen_instituto
);
Первый из них явно ссылается на столбец CI
таблицы Usuarios
, который не должен быть первичным ключом этой таблицы (но если это не первичный ключ, он должен иметь уникальное ограничение на ключе). Второй не указывает столбцы (больше; столбец был указан в вопросе), предполагая, что столбец id_instituto
таблицы Institutos
на самом деле является первичным ключом этой таблицы.
Обратите внимание, что у вас может быть первичный ключ из нескольких столбцов, и, следовательно, любые внешние ключи, которые ссылаются на этот первичный ключ, будут внешними ключами из нескольких столбцов. Часто лучше избегать таких ключей и использовать столбец «ID» (часто основанный на типах SERIAL или BIGSERIAL) в качестве первичного ключа. Затем важно обеспечить ограничение уникальности для ключа из нескольких столбцов, превратив его в альтернативный ключ.