Re: Please recommend me the best bulk-delete option - Mailing list pgsql-general

From David Johnston
Subject Re: Please recommend me the best bulk-delete option
Date
Msg-id 046c01cca556$775f3340$661d99c0$@yahoo.com
Whole thread Raw
In response to Please recommend me the best bulk-delete option  (Siva Palanisamy <siva_p@hcl.com>)
Responses Re: Please recommend me the best bulk-delete option  ("Tomas Vondra" <tv@fuzzy.cz>)
List pgsql-general
-----Original Message-----
From: pgsql-general-owner@postgresql.org
[mailto:pgsql-general-owner@postgresql.org] On Behalf Of Siva Palanisamy
Sent: Thursday, November 17, 2011 1:04 PM
To: pgsql-general@postgresql.org
Subject: [GENERAL] Please recommend me the best bulk-delete option

Hi All,

I'm using PostgreSQL 8.1.4. I've 3 tables: one being the core (table1),
others are dependents (table2,table3). I inserted 70000 records in table1
and appropriate related records in other 2 tables. As I'd used CASCADE, I
could able to delete the related records using DELETE FROM table1; It works
fine when the records are minimal in my current PostgreSQL version. When
I've a huge volume of records, it tries to delete all but there is no sign
of deletion progress for many hours! Whereas, bulk import, does in few
minutes. I wish to do bulk-delete in reasonable minutes. I tried TRUNCATE
also. Like, TRUNCATE table3, table2,table1; No change in performance though.
It just takes more time, and no sign of completion! From the net, I got few
options, like, deleting all constraints and then recreating the same would
be fine. But, no query seems to be successfully run over 'table1' when it's
loaded more data!
Please recommend me the best solutions to delete all the records in minutes.

CREATE TABLE table1(
        t1_id   SERIAL PRIMARY KEY,
        disp_name       TEXT NOT NULL DEFAULT '',
        last_updated TIMESTAMP NOT NULL DEFAULT current_timestamp,
        UNIQUE(disp_name)
    ) WITHOUT OIDS;

CREATE UNIQUE INDEX disp_name_index on table1(upper(disp_name));

CREATE TABLE table2 (
        t2_id           SERIAL PRIMARY KEY,
        t1_id   INTEGER REFERENCES table1 ON DELETE CASCADE,
        type    TEXT
    ) WITHOUT OIDS;

CREATE TABLE table3 (
        t3_id           SERIAL PRIMARY KEY,
        t1_id   INTEGER REFERENCES table1 ON DELETE CASCADE,
        config_key      TEXT,
        config_value    TEXT
    ) WITHOUT OIDS;

Regards,
Siva.

---------------------------------------------------------------

The fastest you can do is:

TRUNCATE table3;
TRUNCATE table2;
TRUNCATE table1;
(do them separately to avoid any possible re-ordering - I am unsure whether
it is allowed but given your comments it may be)

Well, not totally true since:

DROP DATABASE ...;

CREATE TABLE table1;
CREATE TABLE table2;
CREATE TABLE table3;

Is possibly faster...

Anyway, if you execute the three TRUNCATEs in the proper order, thus
avoiding any kind of cascade, you should get maximum performance possible on
your UNSUPPORTED VERSION of PostgreSQL.

David J.




pgsql-general by date:

Previous
From: Siva Palanisamy
Date:
Subject: Please recommend me the best bulk-delete option
Next
From: "Tomas Vondra"
Date:
Subject: Re: Please recommend me the best bulk-delete option