首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PGSQL删除级联

PGSQL删除级联
EN

Stack Overflow用户
提问于 2016-02-19 00:57:48
回答 2查看 26关注 0票数 0

下面是我的表格:

代码语言:javascript
复制
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 instead (delete from (select location natural join groupelocation where old.nom = nomGroupe));但这不起作用:/你能帮我吗?

EN

回答 2

Stack Overflow用户

发布于 2016-02-19 01:01:29

Postgres不支持向DELETE语句提供级联,但它支持在表创建时进行级联删除。

http://www.postgresql.org/docs/9.0/static/sql-createtable.html

级联分别删除引用已删除行的任何行,或将引用列的值更新为被引用列的新值。

票数 0
EN

Stack Overflow用户

发布于 2016-02-19 02:19:56

有一个解决方案,我创建了一个小的plpgsql函数来解决这个问题

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35487736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档