Re: transactions from PHP - double COMMIT required?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



2007/3/1, Robert Treat <xzilla@xxxxxxxxxxxxxxxxxxxxx>:
On Thursday 01 March 2007 12:25, Martin A. Marques wrote:
> mikie wrote:
> > 2007/3/1, Martin Marques <martin@xxxxxxxxxxxxxxx>:
> >> mikie wrote:
> >> >> > But getting back to my problem - perhaps there is something I
> >> >> > misunderstood: is it the client application responsibility to
> >>
> >> check if
> >>
> >> >> > the transaction failed or succeeded and issue COMMIT or ROLLBACK
> >> >> > accordingly (how do I close the transaction block in that case)?
> >> >> > Or is it the database server that is suppose to check if
> >> >> > transaction succeded and perform the query, or ROLLBACK if anything
> >> >> > went wrong?
> >> >>
> >> >> PG will rollback all transactions that have an error in some part,
> >>
> >> as it
> >>
> >> >> can't commit the transaction as a whole.
> >> >
> >> > OK, so my way of programming seems correct.
> >> > Then why do I have to send another COMMIT after failed transaction to
> >> > continue with next queries in the same php script ?
> >>
> >> I may not have gotten your question right, but with one commit (or end)
> >> is enough. Transaction gets closed (commited or rolled back), and you
> >> can start a new transaction with BEGIN.
> >
> > Thats exactly what I was thinking, too. But PHP does things in some
> > other way, I guess.
> > I am sending an entire sql transaction block to the PHP pg_query
> > command, so it starts with BEGIN and ends with COMMIT. Then I still
> > have to execute another pg_query with "commit;" only - thats why I am
> > asking here if maybe someone know what the problem is.
>

It's possible that php is receiving an error back from one query and ignoring
the rest of the queries being sent (though that's not my recollection of how
it works, that's the behavior of what your describing, and you're using older
software aiui)

> Try executing the query without the last commit, and afterwords execute
> another query with commit.
>
> I personaly don't like to mix diferent querys and comands in one
> pg_query() line. Also, I am more bound to using things like MDB2 or PDO,
> which makes life easier.
>
> BTW, if you have log_statments = 'all', could you see those logs to
> check if the commits are really getting to the server?
>

Yeah, do the above recommendation to see if all of your statements are making
thier way into pg

OK, I have checked the logs. I can see both COMMIT statements in the
log - the first commit from my transaction and then the other that I
send to workaround the problem.


[Index of Archives]     [Postgresql General]     [Postgresql Admin]     [PHP Users]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Databases]     [Yosemite Backpacking]     [Postgresql Jobs]

  Powered by Linux