PGSQL删除级联
这是我的桌子:PGSQL删除级联,sql,postgresql,foreign-keys,ddl,Sql,Postgresql,Foreign Keys,Ddl,这是我的桌子: create table location ( nom text primary key, adresse text ); create table groupe (nom text primary key); create table groupelocation ( nomGroupe text references groupe (nom) on delete cascade, nomLocation text references loca
create table location (
nom text primary key,
adresse text
);
create table groupe (nom text primary key);
create table groupelocation (
nomGroupe text references groupe (nom) on delete cascade,
nomLocation text references location (nom) on delete cascade,
primary key(nomGroupe, nomLocation)
);
insert into groupe values('groupe');
insert into location values('location', 'là bas');
insert into groupelocation values('groupe', 'location');
我想在删除组表中的某些内容时,删除所有关联但找不到解决方案的位置:/
我尝试过这样做:
create rule deletelocations as on delete to groupe do(delete from(select location natural join groupelocation where old.nom=nomGroupe))
但这不起作用:/you can't help me please?Postgres不支持提供CASCADE to DELETE语句,但它支持在创建表时进行级联删除
级联删除引用已删除行的任何行,或更新
引用列的值转换为引用列的新值
列,分别为
有一个解决方案,我创建了一个小的plpgsql函数来解决这个问题
CREATE OR REPLACE FUNCTION deletelocation()
RETURNS text AS $$
DECLARE
idloc int;
curs refcursor;
BEGIN
OPEN curs FOR SELECT location.id FROM location except SELECT location.id FROM location JOIN groupelocation ON location.id = groupelocation.idLocation;
LOOP
FETCH curs INTO idloc;
EXIT WHEN NOT FOUND;
DELETE FROM location WHERE id = idloc;
END LOOP;
CLOSE curs;
RETURN '';
END;
$$ language plpgsql;
这太难了:没有比这更容易的解决方案了吗?喜欢使用规则吗?我不明白为什么我的规则行不通:s