Я нашел способ решить эту проблему, используя сохраненную функцию, которая проверяет, соответствует ли каждый элемент в массиве уже существующей авиакомпании.
В коде
-- tipo para aeropuerto
create type taeropuerto as (
nombre varchar(90),
ubicacion tubicacionAeorpuerto,
medidas tmedidasPista,
aerolineas oid[]
);
-- Aerolineas
create type taerolinea as (
nombre varchar(100)
);
-- tabla correspondiente
create table aerolinea of taerolinea
(primary key(oid))
with oids;
-- function para chequear que cada aerolinea insertada sea correcta
create or replace function check_aerolineas(aerolineas oid[]) returns boolean as
$$
declare
aerolineas_tbl record;
o oid;
valido boolean;
begin
valido = true;
foreach o in array aerolineas loop
valido = valido and (o in (select oid from aerolinea));
end loop;
return valido;
end;
$$ language plpgsql;
create table aeropuerto of taeropuerto (
constraint aerolineas_check check(check_aerolineas(aerolineas))
);
Таким образом, при каждом добавлении или обновлении аэропорта будут проверяться авиакомпании. Сбой, если в массиве есть несуществующая авиакомпания