vamos imaginar que a tabela 't' tem o campo 'id' que você quer remover as
20 mil linhas:

postgres=# create table t (id integer);
CREATE TABLE
postgres=# insert into t select * from generate_series(1,1500000);
LOG:  temporary file: path
"pg_tblspc/581531196/PG_9.3_201306121/pgsql_tmp/pgsql_tmp29753.0", size
21000000
INSERT 0 1500000

Agora vou criar uma tabela temporária que tenha 20 mil registros
aleatórios. Serão os registros que eu vou querer apagar da tabela 't'

postgres=# create temporary table f (id integer);
CREATE TABLE
postgres=# insert into f select round(random()*1500000) from
generate_series(1,20000);
INSERT 0 20000

Agora eu faço o DELETE dos registros que escolhi:

postgres=# delete from t where exists (select 1 from f where f.id=t.id);
DELETE 19866

Ou seja, eu prefiro fazer um SUBSELECT para apagar tudo.


Em 18 de dezembro de 2017 17:15, Danilo Silva <danilo.dsg.go...@gmail.com>
escreveu:

> Pessoal,
>
> Qual seria a melhor prática para deletar 20 mil registros em uma tabela
> com 1,5 milhões de registros, vale ressaltar que o campo condicional do
> delete é a pk da tabela:
>
> a) Deletar os 20 mil de uma só vez com a condição "IN" no WHERE;
> b) Fazer um loop na aplicação e deletar um por vez;
> c) Outra técnica (qual?);
>
> Existe alguma forma de melhorar a rapidez do delete? Algum parâmetro no
> .conf?
>
> []s
> Danilo
>
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>



-- 
Atenciosamente,
Fábio Telles Rodriguez
blog: http:// <http://www.midstorm.org/~telles/>s
<http://tellesr.wordpress.com/>avepoint.blog.br
e-mail / gtalk / MSN: fabio.tel...@gmail.com
Skype: fabio_telles

Timbira - A empresa brasileira de Postgres
http://www.timbira.com.br
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a