Re: LOCK TABLE oddness in PLpgSQL function called via JDBC
| От | Tom Lane |
|---|---|
| Тема | Re: LOCK TABLE oddness in PLpgSQL function called via JDBC |
| Дата | |
| Msg-id | 19799.1002061752@sss.pgh.pa.us обсуждение исходный текст |
| Ответ на | Re: LOCK TABLE oddness in PLpgSQL function called via JDBC (Dave Harkness <daveh@MEconomy.com>) |
| Ответы |
Re: LOCK TABLE oddness in PLpgSQL function called via
|
| Список | pgsql-jdbc |
Dave Harkness <daveh@MEconomy.com> writes:
> Running in serializable mode, I'm getting a Postgres exception:
> ERROR: Can't serialize access due to concurrent update
Well, in that case my theory about it all being one transaction is
wrong; you couldn't get that error without a cross-transaction conflict.
> It seems to me that the table locks grabbed in the PLpgSQL function aren't
> actually locking the tables. They check to make sure they can *get* the
> lock, but don't actually hold the lock. Same with the select for update. It
> makes sure it can get the lock, but still lets others get the same lock.
Once a lock has been grabbed, the *only* way it can be let go is to
end the transaction. So my new theory is that the JDBC driver is
issuing an auto-commit at points where you're not expecting it.
I'm not familiar enough with the behavior of "setAutoCommit" and friends
to be sure what's happening; but if you turn on query logging in the
server you'll probably see the evidence soon enough.
regards, tom lane
В списке pgsql-jdbc по дате отправления: