Postgres级联删除不起作用

时间:2017-12-02 09:39:33

标签: postgresql parent-child cascade

我有两张桌子:

gender.lower()    

CREATE TABLE cars(
    id SERIAL PRIMARY KEY,
    brand VARCHAR(100),
    model VARCHAR(100),
    transmission VARCHAR(50),
    engine REAL,
    year INTEGER
);

当我删除某些广告时

CREATE TABLE ads(
id SERIAL PRIMARY KEY,
description VARCHAR(500),
price INTEGER,
sold BOOLEAN,
create_date TIMESTAMP,
car_id INTEGER REFERENCES cars(id) ON DELETE CASCADE
);

它工作正常 - 并删除,但适当的汽车不会删除。为什么? 我在网上找不到合适的答案。感谢您的期待。

1 个答案:

答案 0 :(得分:2)

#include <iostream> #include <typeinfo> class Foo { public: Foo() { const char * const name = typeid(this).name(); std::cout << name << std::endl; } }; int main() { Foo my_obj; } 以相反的方式工作 - 当引用列的值被删除时,它会级联到引用,扫描孤儿。反过来没有多大意义 - 如果你不允许没有引用广告的汽车,你甚至不能插入第一行,同时在添加汽车之前,ads.car_id上的FK将不允许插入。 / p>

这导致得出的结论是,您需要一项可以检查孤独父母的工作(没有广告的汽车)并将其删除,或添加一些可以检查广告删除的触发器,如果​​on delete cascade然后{{1这样你就可以插入没有广告的汽车,但只要广告出现,就不要让汽车没有广告。