Если на таблицу, из которой Вы удаляете, ссылаются some_other_table
(и Вы не хотите отбрасывать внешние ключи даже временно), удостоверьтесь, что у Вас есть индекс на ссылка столбец в some_other_table
!
я имел подобную проблему и использовал auto_explain
с auto_explain.log_nested_statements = true
, который показал, что эти delete
на самом деле делал seq_scans на some_other_table
:
Query Text: SELECT 1 FROM ONLY "public"."some_other_table" x WHERE $1 OPERATOR(pg_catalog.=) "id" FOR KEY SHARE OF x
LockRows (cost=[...])
-> Seq Scan on some_other_table x (cost=[...])
Filter: ($1 = id)
, По-видимому, это пытается заблокировать строки ссылки в другой таблице (который не должен существовать, или удаление перестанет работать). После того, как я создал индексы на таблицах ссылки, удаление было порядками величины быстрее.