On Apr 18, 2006, at 4:03 PM, Kynn Jones wrote:
I have a Perl script that is supposed to make a large number of
inserts in a PostgreSQL database. Performing individual inserts
with SQL's INSERT command is too slow, however, I can use a
"COPY ... from stdin" approach that is fast enough. Basically, I
fork a psql process (yes, I'm on unix) and have the parent write
the new records into the child, as part of a COPY from stdin
command. Admittedly, this is very convoluted, but it works.
Well, it almost works. It did in my preliminary tests, but failed
in the real run with the actual database because the owner of the
tables that get modified by this COPY statement is a user for which
the psql command requires a password ( i.e. this user exists solely
for the purpose of owning the database in question; it does not
have a UID, nor disk space assigned to it), and I don't know how to
give this password programmatically.
So I'm back at the drawing board. How can I make fast bulk inserts
into a PostgreSQL database from within a Perl script?
Assuming you're using DBI, perldoc DBD::Pg will be enlightening.
Check the pg_putline and pg_endcopy functions.
Cheers,
Steve