BUG #6602: concurrent psql session clobbers history

Started by Nonamealmost 14 years ago4 messagesbugs
Jump to latest
#1Noname
i+pgbugs@avdd.tk

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:

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=# \echo first session exits first
first session exits first
postgres=# \q
$ cat .psql_history
\echo first session exits first
\q
$ psql -q
postgres=#
$ cat .psql_history
\echo second session exits second
\q
$ psql -q
postgres=# \echo first session exits second
first session exits second
postgres=# \q
$ cat .psql_history
\echo second session exits second
\q
\echo first session exits second
\q

# session 2

$ psql -q
postgres=# \echo second session exits second
second session exits second
postgres=# \q
$ cat .psql_history
\echo second session exits second
\q
$ psql -q
postgres=# \echo second session exits first
second session exits first
postgres=# \q
$ cat .psql_history
\echo second session exits second
\q
\echo second session exits first
\q

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Noname (#1)
Re: BUG #6602: concurrent psql session clobbers history

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

#3Peter Eisentraut
peter_e@gmx.net
In reply to: Tom Lane (#2)
Re: BUG #6602: concurrent psql session clobbers history

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.

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#3)
Re: BUG #6602: concurrent psql session clobbers history

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