Postgres9.6 - 包含引用已创建元素的元素数组的列

时间:2018-05-06 16:48:29

标签: sql database postgresql extended-sql

我遇到这种情况:

我有一张名为Airports的桌子,需要有一组航空公司代表航空公司在该机场的航班。当然,我希望让这样的数组的每个值与现有的航空公司相匹配。

有没有办法使用数组来实现这一目标?如果是这样,那么干净的方法是什么呢?

1 个答案:

答案 0 :(得分:0)

我找到了一种方法来解决这个问题,使用存储的函数来检查数组中的每个元素是否与现有的航空公司相对应。

代码

-- 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))
);

这样,每次插入或更新机场时,都会检查航空公司。如果阵列中存在不存在的航空公司,则失败