Quantcast
Channel: Linux.org.ru: Форум
Viewing all articles
Browse latest Browse all 109859

Удаление из большой таблицы без потери constraints

$
0
0

Добрый день!

Мне необходимо удалить большую часть таблицы с четырьмя миллионами строк, delete from tbl where работает бесконечность, поэтому, по всей видимости, нужно использовать промежуточные таблицы. Ситуацию осложняют несколько других таблиц, c Foreign-key constraints: ON DELETE SET NULL. И это правило должно выполняться во время удаления.

Если делать

BEGIN;
CREATE TABLE tbl_new AS SELECT * FROM tbl where a is b;           
ALTER TABLE tbl RENAME TO tbl_old;
ALTER TABLE tbl_new RENAME TO tbl;
COMMIT;
drop table tbl_old cascade;
То для сохранения целостности, после переименования tbl в tbl_old postgress меняет и constraints, превращая ссылки в REFERENCES tbl_old(id)

Если делать

BEGIN;
CREATE TABLE tbl_tmp AS SELECT * FROM tbl where a is b          
TRUNCATE tbl;
INSERT INTO cart SELECT * FROM tbl_tmp;
COMMIT;
То pg не деает выполнить TRUNCATE из за ссылок, и предлагат сделать TRUNCATE CASCADE.

Как быть?

 ,


Viewing all articles
Browse latest Browse all 109859

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>