Обсуждение: BUG #6602: concurrent psql session clobbers history

Поиск
Список
Период
Сортировка

BUG #6602: concurrent psql session clobbers history

От
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:=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

Re: BUG #6602: concurrent psql session clobbers history

От
Tom Lane
Дата:
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

Re: BUG #6602: concurrent psql session clobbers history

От
Peter Eisentraut
Дата:
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.

Re: BUG #6602: concurrent psql session clobbers history

От
Tom Lane
Дата:
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