Re: Index seems "lost" after consecutive deletes

Поиск
Список
Период
Сортировка
От rob stone
Тема Re: Index seems "lost" after consecutive deletes
Дата
Msg-id 1465870720.9896.16.camel@gmail.com
обсуждение исходный текст
Ответ на Re: Index seems "lost" after consecutive deletes  (Edson Richter <edsonrichter@hotmail.com>)
Ответы Re: Index seems "lost" after consecutive deletes  (Edson Richter <edsonrichter@hotmail.com>)
Список pgsql-general
On Mon, 2016-06-13 at 22:41 -0300, Edson Richter wrote:
> Em 13/06/2016 22:33, Edson Richter escreveu:
> > I've a table "A" with 4,000,000 records.
> >
> > I've decided to delete records from oldest to newest but I can't 
> > delete records that have references in tables "B", "C" or "D".
> >
> >
> > so, I've
> >
> >
> > with qry as (
> >
> >     select A.id
> >
> >       from A
> >
> >     where not exists (select 1 from B where B.a_id = A.id)
> >
> >        and not exists (select 1 from C where C.a_id = A.id)
> >
> >        and not exists (select 1 from D where D.a_id = A.id)
> >
> >        and A.creation_date < (now()::date - interval '12 month')
> >
> >   order by A.id DESC
> >
> >   limit 2000
> >
> > )
> >
> > delete from A where id in (select id from qry);
> >
> >
> > All three referenced tables have indexes (B.a_id; C.a_id; D.a_id)
> > in 
> > order to make query faster.
> >
> > So for first 2 million rows it worked really well, taking about 1 
> > minute to delete each group of 2000 records.
> >
> > Then, after a while I just started to get errors like:
> >
> >
> > ERROR: update or delete in "A" violates foreign key "fk_C_A" in
> > "C".
> >
> > DETAIL:  Key (id)=(3240124) is still referenced by table "C".
> >
> >
> > Seems to me that indexes got lost in the path - the query is
> > really 
> > specific and no "C" referenced records can be in my deletion.
> >
> > Has anyone faced a behavior like this?
> >
> > Am I doing something wrong?
> >
> >
>
> Of course:
> Version string    PostgreSQL 9.4.8 on x86_64-unknown-linux-gnu,
> compiled 
> by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4), 64-bit
> Oracle Linux 7 x64 with all updates. Running on EXT4 file system.
> Computer is Dell R420 with mirrored disks, 80GB of RAM (database has
> < 
> 40GB in total).
>
> Sorry for not putting the info in the first e-mail.
>
> Edson
>
>

What does:-

SELECT COUNT(*) FROM C WHERE C.a_id = 3240124;

return?

Is it a many-to-one or a one-to-one relationship?




В списке pgsql-general по дате отправления:

Предыдущее
От: rob stone
Дата:
Сообщение: Re: Automate copy - Postgres 9.2
Следующее
От: Melvin Davidson
Дата:
Сообщение: Re: Automate copy - Postgres 9.2