bogus psql "could not save history file[...]" message in 9.3.6
Installed 9.3.6 from apt.postgresql.org onto a reasonably clean Ubuntu
14.04 (trusty)
$ sudo apt-get install [...] # ok
$ ls -la /var/lib/postgresql # 9.3 is the only result; equivalent to (ls
-la ~)
$ sudo su - postgres # ok
$ psql # ok
select 1; # ok
\q # 'could not save history to file "/var/lib/postgresql/.psql_history":
No such file or directory' !!!
$ ls -la /var/lib/postgresql # 9.3 and .psql_history are both present
$ cat /var/lib/postgresql/.psql_history # select 1; <newline> \q <eof>
$ psql # ok
select 2; # ok
\q # ok this time; no message
$ cat [...] # confirmed everything present
$ rm /var/lib/postgresql/.psql_history # gone
$ psql
select 3;
\q # same error again !!!
$ [confirm select 3 is present in .psql_history]
Seems like a file existence check and warning is in the wrong
place...everything works correctly except there is a bogus warning.
Or change the message to simply be "creating new .psql_history file in
/var/lib/postgresql"
Obviously its odd that /var/lib is where the history file is being placed
but the package sets that as HOME for the newly created postgres user...I'm
doubting this problem is limited to just that situation though.
David J.
"David G. Johnston" <david.g.johnston@gmail.com> writes:
Installed 9.3.6 from apt.postgresql.org onto a reasonably clean Ubuntu
14.04 (trusty)
$ sudo apt-get install [...] # ok
$ ls -la /var/lib/postgresql # 9.3 is the only result; equivalent to (ls
-la ~)
$ sudo su - postgres # ok
$ psql # okselect 1; # ok
\q # 'could not save history to file "/var/lib/postgresql/.psql_history":No such file or directory' !!!
Sigh ... let me guess ... libedit? How old? What was the last
combination that worked on this platform?
The only patch recently applied in this area is b0fd5c552, which I really
don't think would have any impact on exit-time saving behavior. What
seems substantially more likely is that your command history library
changed.
regards, tom lane
--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs
On Fri, Mar 13, 2015 at 5:36 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
"David G. Johnston" <david.g.johnston@gmail.com> writes:
Installed 9.3.6 from apt.postgresql.org onto a reasonably clean Ubuntu
14.04 (trusty)$ sudo apt-get install [...] # ok
$ ls -la /var/lib/postgresql # 9.3 is the only result; equivalent to (ls
-la ~)
$ sudo su - postgres # ok
$ psql # okselect 1; # ok
\q # 'could not save history to file"/var/lib/postgresql/.psql_history":
No such file or directory' !!!
Sigh ... let me guess ... libedit? How old? What was the last
combination that worked on this platform?The only patch recently applied in this area is b0fd5c552, which I really
don't think would have any impact on exit-time saving behavior. What
seems substantially more likely is that your command history library
changed.regards, tom lane
I can research a bit: I'm using a 14.04 Vagrant box
(box-cutter/ubuntu1404-desktop )
with some pre-installed (notably Libre (Open?) Office) on the box
before
I added tmux, git, and Sublime Text 3 myself
and then
install
ed
PostgreSQL.
Can you give me a command to run to check what it is you are saying. My
Linux-fu is not that strong yet...
There isn't any actual problem writing the history out, even the first
time, there is just the spurious warning.
This is my first time using Ubuntu 14.04 for any purpose.
I'm not inclined to spend too much time figuring out how the system came to
be whacked, if it is, but if you've got a few quick things I can check I'd
be glad to do so.
David J.
"David G. Johnston" <david.g.johnston@gmail.com> writes:
Can you give me a command to run to check what it is you are saying. My
Linux-fu is not that strong yet...
Running ldd on the psql executable would be a good first step.
regards, tom lane
--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs
On Fri, Mar 13, 2015 at 6:13 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
"David G. Johnston" <david.g.johnston@gmail.com> writes:
Can you give me a command to run to check what it is you are saying. My
Linux-fu is not that strong yet...Running ldd on the psql executable would be a good first step.
libedit.so.2 => /usr/lib/x86_64-linux-gnu/libedit.so.2 (0x00007f8b3af22000)
Not seeing libreadline
A plain psql when using this package performs the call via a wrapper -
/usr/share/postgresql-common/pg_wrapper.
I did the ldd against /usr/lib/postgresql/9.3/bin/psql
David J.
"David G. Johnston" <david.g.johnston@gmail.com> writes:
On Fri, Mar 13, 2015 at 6:13 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
Running ldd on the psql executable would be a good first step.
libedit.so.2 => /usr/lib/x86_64-linux-gnu/libedit.so.2 (0x00007f8b3af22000)
Righto. So now, what version of libedit have you got? (On Red Hat
"rpm -q libedit" would be the thing to do, but I have no idea about
Ubuntu's package manager.)
regards, tom lane
--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs
On Mar 13, 2015, at 6:42 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
"David G. Johnston" <david.g.johnston@gmail.com> writes:
On Fri, Mar 13, 2015 at 6:13 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
Running ldd on the psql executable would be a good first step.
libedit.so.2 => /usr/lib/x86_64-linux-gnu/libedit.so.2 (0x00007f8b3af22000)
Righto. So now, what version of libedit have you got? (On Red Hat
"rpm -q libedit" would be the thing to do, but I have no idea about
Ubuntu's package manager.)regards, tom lane
This is from an empty 14.04 vagrant where I installed postgresql-9.3 from the apt.postgresql.org <http://apt.postgresql.org/> repo:
agrant@vagrant-ubuntu-trusty-64:/etc/apt/sources.list.d$ dpkg -S /usr/lib/x86_64-linux-gnu/libedit.so.2
libedit2:amd64: /usr/lib/x86_64-linux-gnu/libedit.so.2
vagrant@vagrant-ubuntu-trusty-64:/etc/apt/sources.list.d$ dpkg --list libedit2
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-========================================-=========================-=========================-=====================================================================================
ii libedit2:amd64 3.1-20130712-2 amd64 BSD editline and history libraries
And it does the same thing:
vagrant@vagrant-ubuntu-trusty-64:/etc/apt/sources.list.d$ sudo su - postgres
postgres@vagrant-ubuntu-trusty-64:~$ psql
psql (9.3.6)
Type "help" for help.
postgres=# select 1;
?column?
----------
1
(1 row)
postgres=# \q
could not save history to file "/var/lib/postgresql/.psql_history": No such file or directory
postgres@vagrant-ubuntu-trusty-64:~$ ls -l /var/lib/postgresql/.psql_history
-rw------- 1 postgres postgres 10 Mar 14 01:53 /var/lib/postgresql/.psql_history
postgres@vagrant-ubuntu-trusty-64:~$
postgres@vagrant-ubuntu-trusty-64:~$ cat .psql_history
select 1;
On Fri, Mar 13, 2015 at 6:42 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
"David G. Johnston" <david.g.johnston@gmail.com> writes:
On Fri, Mar 13, 2015 at 6:13 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
Running ldd on the psql executable would be a good first step.
libedit.so.2 => /usr/lib/x86_64-linux-gnu/libedit.so.2
(0x00007f8b3af22000)
Righto. So now, what version of libedit have you got? (On Red Hat
"rpm -q libedit" would be the thing to do, but I have no idea about
Ubuntu's package manager.)
apt-cache showpkg libedit2
# 3.1-20130712-2
(us.archive.ubuntu.com_ubunut_dists_trusty_main_binary-amd64_Packages)
"Reverse Depends"
includes:
postgresql-client.9.3,libedit2 2.11-20080614 (same thing for 8.4 to 9.4)
David J.
"David G. Johnston" <david.g.johnston@gmail.com> writes:
\q # 'could not save history to file "/var/lib/postgresql/.psql_history":
No such file or directory' !!!
BTW, I poked around in the libedit sources and noted that it will call
wctomb() during write_history(), assuming it's configured to support wide
characters. Working hypothesis is that wctomb() is trying to read some
locale configuration file and not finding it, which it's probably okay
with, but our is-errno-set check is unhappy later. This behavior might
well vary depending on what locale environment you have set.
strace'ing psql while it exits might be informative.
regards, tom lane
--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs
On Mar 13, 2015, at 9:56 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
"David G. Johnston" <david.g.johnston@gmail.com> writes:
\q # 'could not save history to file "/var/lib/postgresql/.psql_history":
No such file or directory' !!!
BTW, I poked around in the libedit sources and noted that it will call
wctomb() during write_history(), assuming it's configured to support wide
characters. Working hypothesis is that wctomb() is trying to read some
locale configuration file and not finding it, which it's probably okay
with, but our is-errno-set check is unhappy later. This behavior might
well vary depending on what locale environment you have set.strace'ing psql while it exits might be informative.
Here you go:
Process 3951 attached
read(0, "\4", 1) = 1
ioctl(0, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, {B38400 opost isig -icanon -echo ...}) = 0
ioctl(0, SNDCTL_TMR_STOP or SNDRV_TIMER_IOCTL_GINFO or TCSETSW, {B38400 opost isig icanon echo ...}) = 0
ioctl(0, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
rt_sigaction(SIGINT, {0x7f5798b08730, [], SA_RESTORER|SA_RESTART, 0x7f5797c3dff0}, {0x7f57986b0ab0, [], SA_RESTORER, 0x7f5797c3dff0}, 8) = 0
rt_sigaction(SIGTERM, {SIG_DFL, [], SA_RESTORER, 0x7f5797c3dff0}, {0x7f57986b0ab0, [], SA_RESTORER, 0x7f5797c3dff0}, 8) = 0
rt_sigaction(SIGHUP, {SIG_DFL, [], SA_RESTORER, 0x7f5797c3dff0}, {0x7f57986b0ab0, [], SA_RESTORER, 0x7f5797c3dff0}, 8) = 0
rt_sigaction(SIGQUIT, {SIG_DFL, [], SA_RESTORER, 0x7f5797c3dff0}, {0x7f57986b0ab0, [], SA_RESTORER, 0x7f5797c3dff0}, 8) = 0
rt_sigaction(SIGALRM, {SIG_DFL, [], SA_RESTORER, 0x7f5797c3dff0}, {0x7f57986b0ab0, [], SA_RESTORER, 0x7f5797c3dff0}, 8) = 0
rt_sigaction(SIGTSTP, {SIG_DFL, [], SA_RESTORER, 0x7f5797c3dff0}, {0x7f57986b0ab0, [], SA_RESTORER, 0x7f5797c3dff0}, 8) = 0
rt_sigaction(SIGTTOU, {SIG_DFL, [], SA_RESTORER, 0x7f5797c3dff0}, {0x7f57986b0ab0, [], SA_RESTORER, 0x7f5797c3dff0}, 8) = 0
rt_sigaction(SIGTTIN, {SIG_DFL, [], SA_RESTORER, 0x7f5797c3dff0}, {0x7f57986b0ab0, [], SA_RESTORER, 0x7f5797c3dff0}, 8) = 0
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7f5797c3dff0}, {0x7f57986b0090, [], SA_RESTORER|SA_RESTART, 0x7f5797c3dff0}, 8) = 0
write(1, "\\q\n", 3) = 3
sendto(3, "X\0\0\0\4", 5, MSG_NOSIGNAL, NULL, 0) = 5
close(3) = 0
rt_sigaction(SIGPIPE, {SIG_DFL, [], SA_RESTORER|SA_RESTART, 0x7f5797c3dff0}, {SIG_DFL, [], 0}, 8) = 0
rename("/var/lib/postgresql/.psql_history", "/var/lib/postgresql/.psql_history-") = -1 ENOENT (No such file or directory)
open("/var/lib/postgresql/.psql_history", O_WRONLY|O_CREAT|O_TRUNC, 0600) = 3
write(3, "select 1;\n", 10) = 10
close(3) = 0
unlink("/var/lib/postgresql/.psql_history-") = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en_US.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
write(2, "could not save history to file \""..., 94) = 94
exit_group(0) = ?
+++ exited with 0 +++
--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs
Jeff Frost <jeff@pgexperts.com> writes:
On Mar 13, 2015, at 9:56 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
strace'ing psql while it exits might be informative.
Here you go:
...
rename("/var/lib/postgresql/.psql_history", "/var/lib/postgresql/.psql_history-") = -1 ENOENT (No such file or directory)
open("/var/lib/postgresql/.psql_history", O_WRONLY|O_CREAT|O_TRUNC, 0600) = 3
write(3, "select 1;\n", 10) = 10
close(3) = 0
unlink("/var/lib/postgresql/.psql_history-") = -1 ENOENT (No such file or directory)
... WTF? That rename() and that unlink() are certainly not coming from
Postgres, and I do not see anything like that in the libedit sources
either. (I'm looking at the libedit-20141030-3.1 version that Fedora
is currently shipping.) That must be coming from some Ubuntu-specific
patch?
open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
I'm guessing here, but I suspect these calls are coming from strerror()
looking for a translated version of "No such file or directory" --- ie,
at this point the damage is already done and we are trying to report
that we think we've failed.
Short answer seems to be that Ubuntu stuck in a patch that thinks nothing
of clobbering errno during a write_history() call.
regards, tom lane
--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs
Tom Lane wrote:
Jeff Frost <jeff@pgexperts.com> writes:
On Mar 13, 2015, at 9:56 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
strace'ing psql while it exits might be informative.Here you go:
...
rename("/var/lib/postgresql/.psql_history", "/var/lib/postgresql/.psql_history-") = -1 ENOENT (No such file or directory)
open("/var/lib/postgresql/.psql_history", O_WRONLY|O_CREAT|O_TRUNC, 0600) = 3
write(3, "select 1;\n", 10) = 10
close(3) = 0
unlink("/var/lib/postgresql/.psql_history-") = -1 ENOENT (No such file or directory)... WTF? That rename() and that unlink() are certainly not coming from
Postgres, and I do not see anything like that in the libedit sources
either. (I'm looking at the libedit-20141030-3.1 version that Fedora
is currently shipping.) That must be coming from some Ubuntu-specific
patch?
You can use
apt-get source libedit2
to obtain a copy of the tarball plus all the patches that were applied
to build the package.
--
�lvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs
On 14/03/15 15:46, Alvaro Herrera wrote:
Tom Lane wrote:
Jeff Frost <jeff@pgexperts.com> writes:
On Mar 13, 2015, at 9:56 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
strace'ing psql while it exits might be informative.Here you go:
...
rename("/var/lib/postgresql/.psql_history", "/var/lib/postgresql/.psql_history-") = -1 ENOENT (No such file or directory)
open("/var/lib/postgresql/.psql_history", O_WRONLY|O_CREAT|O_TRUNC, 0600) = 3
write(3, "select 1;\n", 10) = 10
close(3) = 0
unlink("/var/lib/postgresql/.psql_history-") = -1 ENOENT (No such file or directory)... WTF? That rename() and that unlink() are certainly not coming from
Postgres, and I do not see anything like that in the libedit sources
either. (I'm looking at the libedit-20141030-3.1 version that Fedora
is currently shipping.) That must be coming from some Ubuntu-specific
patch?You can use
apt-get source libedit2
to obtain a copy of the tarball plus all the patches that were applied
to build the package.
Also might be worth checking the ownership of postgres home directory
(/var/lib/postgresql) - I'd hazard a guess that it is owned by root and
postgres cannot write the history file.
Cheers
Mark
--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs