Thread: BUG #6602: concurrent psql session clobbers history
The following bug has been logged on the website: Bug reference: 6602 Logged by: Adrian Dries Email address: i+pgbugs@avdd.tk PostgreSQL version: 9.1.3 Operating system: Ubuntu ppa:pitti/postgresql Description:=20=20=20=20=20=20=20=20 A concurrent psql session will overwrite the history of the first. This does not look good: a database tool causing me to lose my data! # session 1 $ psql -q postgres=3D# \echo first session exits first first session exits first postgres=3D# \q $ cat .psql_history=20 \echo first session exits first \q $ psql -q postgres=3D#=20 $ cat .psql_history=20 \echo second session exits second \q $ psql -q postgres=3D# \echo first session exits second first session exits second postgres=3D# \q $ cat .psql_history=20 \echo second session exits second \q \echo first session exits second \q # session 2 $ psql -q postgres=3D# \echo second session exits second second session exits second postgres=3D# \q $ cat .psql_history=20 \echo second session exits second \q $ psql -q postgres=3D# \echo second session exits first second session exits first postgres=3D# \q $ cat .psql_history=20 \echo second session exits second \q \echo second session exits first \q =20
i+pgbugs@avdd.tk writes: > A concurrent psql session will overwrite the history of the first. This > does not look good: a database tool causing me to lose my data! Works okay for me. I suspect you need to take this up with whoever packages libreadline for Ubuntu, because it's going to be libreadline's problem not ours. regards, tom lane
On tor, 2012-04-19 at 15:00 -0400, Tom Lane wrote: > i+pgbugs@avdd.tk writes: > > A concurrent psql session will overwrite the history of the first. This > > does not look good: a database tool causing me to lose my data! > > Works okay for me. I suspect you need to take this up with whoever > packages libreadline for Ubuntu, because it's going to be libreadline's > problem not ours. It's probably actually using libedit for the history part.
Peter Eisentraut <peter_e@gmx.net> writes: > On tor, 2012-04-19 at 15:00 -0400, Tom Lane wrote: >> i+pgbugs@avdd.tk writes: >>> A concurrent psql session will overwrite the history of the first. This >>> does not look good: a database tool causing me to lose my data! >> Works okay for me. I suspect you need to take this up with whoever >> packages libreadline for Ubuntu, because it's going to be libreadline's >> problem not ours. > It's probably actually using libedit for the history part. [ after further research... ] Mmm, maybe. I can reproduce the misbehavior on a Mac build using libedit. There is a relevant-looking comment in psql's saveHistory function: * On newer versions of libreadline, truncate the history file as * needed and then append what we've added. This avoids overwriting * history from other concurrent sessions (although there are still * race conditions when two sessions exit at about the same time). If * we don't have those functions, fall back to write_history(). A check of the configure output shows that Apple's libedit lacks append_history(), so that the fallback code path is used. The phrasing of this comment suggests that older versions of libreadline might be lacking as well. There's not a lot we can do about this issue when using a libreadline or libedit that lacks the necessary support functions, I think. regards, tom lane