ref: https://www.postgresql.org/message-id/16186.1150464632@sss.pgh.pa.us
场景:
要删除的表articles
,articles
中有一个字段是表comments
的外键,即:
CREATE TABLE articles (
id integer PRIMARY KEY,
content text
);
CREATE TABLE comments (
content text,
article_id integer,
FOREIGN KEY (article_id) REFERENCES articles (id)
);
最简单的办法就是在确认没有错误的情况下,disable trigger,删完后再打开。但是还有一种可能性就是在删除的时候PG会去关联的表中查找有没有关联的记录,本例中就是在删除articles中的东西时会在comments中按article_id查找,如果article_id在此时没有加索引,而且comments和articles表中都有大量数据的时候,就会出现很慢的情况。解决方案就是给comments表中的article_id加上index
CREATE INDEX ON comments (article_id);