Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PGSQL删除级联_Sql_Postgresql_Foreign Keys_Ddl - Fatal编程技术网

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