Re: [newbie] How to do "batch insert"?

From: Mihail Mihailov <Mihail(dot)Mihailov(at)uta(dot)fi>
To: pgsql-php(at)postgresql(dot)org
Subject: Re: [newbie] How to do "batch insert"?
Date: 2007-06-08 10:34:40
Message-ID: 20070608133440.tiz9hbu3y9s0k8oo@imp1.uta.fi
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-php

Hi Ian,

It should be much easier to use pg_query function.

pg_query("START TRANSACTION");
for (......)
{
$your_insert_query = "INSERT INTO acls(oid,uid,gid,mod)
VALUES($1,$2,$3,$4)"
$r = pg_query($your_insert_query);
if (!$r) //Query failed
{
//issue error message
// exit loop, all changes in the table will not be saved
}
}
pg_query("COMMIT"); //Commit all changes in the table

If you mark the transaction block ("start transaction" ... "commit")
the changes will be commited only after the script reaches "commit"
clause. If it is aborted before, no changes will be saved. This is the
purpose of transaction (which is also the way to increase the speed of
the program execution).

- Mike

Quoting 李彦 Ian Li <liyan82(at)gmail(dot)com>:

> Hi all.
> In the scene I want to insert all elements of an array in to a table,
> how can I do to commit them as a whole?
> currently I do like this:
>
> <?php
> $result = pg_prepare($dbconn, "ins_acl", 'INSERT INTO
> acls(oid,uid,gid,mod) VALUES($1,$2,$3,$4)');
> for($i=0;$i<count($p["acls"]);$i++){
> pg_execute($dbconn, "ins_lgs",$p["acls"][i]);
> }
> ?>
>
> I wonder while doing so, will it commit in each LOOP or just ONCE?
>
> Thanks and Regards,
>
> Ian
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/docs/faq

In response to

Browse pgsql-php by date

  From Date Subject
Next Message Ray Garrison 2007-06-08 17:17:05 Re: Application Design: Where to implement historical revisions of objects
Previous Message 李彦 Ian Li 2007-06-08 08:44:10 [newbie] How to do "batch insert"?