Re: a better way to do a data import?
| From: | Robert Cummings | Date: | Mon, 21 Jan 2008 17:55:50 +0000 |
| Subject: | Re: a better way to do a data import? | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-267772@lists.php.net to get a copy of this message | ||
On Mon, 2008-01-21 at 12:35 -0500, blackwater dev wrote:
> I have a text file that contains 200k rows. These rows are to be imported
> into our database. The majority of them will already exists while a few are
> new. Here are a few options I've tried:
>
> I've had php cycle through the file row by row and if the row is there,
> delete it and do a straight insert but that took a while.
>
> Now I have php get the row from the text file and then to array_combine with
> a default array I have in the class so I can have key value pairs. I then
> take that generated array and do array_diff to the data array I pulled from
> the db and I then have the columns that are different so I do an update on
> only those columns for that specific row. This is slow and after about
> 180,000 rows, php throws a memory error. I'm resetting all my vars to NULL
> at each iteration so am not sure what's up.
>
>
> Anyone have a better way to do this? In MySQL, I could simply a replace on
> each row...but not in postgres.
Does Postgres support any method of temporarily disabling keys/indexing?
Indexing is what causes the inserts to take a while. MySQL can optimize
an import by locking the table and allowing the keys/indexes to be
temporarily disabled. You'll see the following lines in recent MySQL
database dumps surrounding the inserts:
/*!40000 ALTER TABLE
xxx DISABLE KEYS */;
INSERT ...
INSERT ...
/*!40000 ALTER TABLE xxx ENABLE KEYS */;
Cheers,
Rob.
--
...........................................................
SwarmBuy.com - http://www.swarmbuy.com
Leveraging the buying power of the masses!
...........................................................