PostgreSQL:Psql 客户端无法使用方向建查看历史命令

今天在一开发环境上维护时,发现 使用 psql 连接到数据库后,无法使用方向键查看历史命令,如下所示。

问题现象

psql 命令台无法使用方向键

1
2
3
4
5
6
7
8
9
10
11
12
-bash-3.2$ psql
psql (9.2.2)
Type "help" for help.

postgres=# select now();
now
-------------------------------
2013-05-23 16:54:16.278334+08
(1 row)

postgres=# ^[[A^[[A^[[A^[[A^[[A --这里尝试使用方向键,出现这个字符。
postgres-#

备注:方向键无法使用,非常不方便,这个与 readline 有关。

排查过程

检查系统

1
2
[root@skycac44 ~]# rpm -qa | grep readline
readline-5.1-3.el5

备注:系统上已安装 readline。

检查 PostgreSQL 客户端

1
-bash-3.2$ pg_config --configure '--prefix=/usr/local/postgres' '--without-readline'

备注: 以上命令显示编译 PostgreSQL 时的配置参数列表,上面果然没有安装 readline。

configure 时手册上的解释

without-readline
Prevents use of the Readline library (and libedit as well). This option disables command-line editing
and history in psql, so it is not recommended.

备注:手册上不建议禁用 readline。 对于已安装 readline 的 PostgreSQL 客户端,也有参数可以控制是否session 级禁用 readline。

测试

查看编译信息

1
2
[pg93@redhatB ~]$ pg_config --configure
'--prefix=/opt/pgsql9.3beta1' '--with-pgport=1925' '--with-segsize=8' '--with-wal-segsize=16' '--with-wal-blocksize=64' '--with-perl' '--with-python' '--with-openssl' '--with-pam' '--with-ldap' '--with-libxml' '--with-libxslt' '--enable-thread-safety'

备注:这个是我笔记本上 9.3 的库,编译时已安装 readline。

psql 测试1: 启用 readline

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[pg93@redhatB ~]$ psql
psql (9.3beta1)
Type "help" for help.

postgres=# select now();
now
------------------------------
2013-05-23 17:00:09.76174+08
(1 row)

postgres=# select now(); 这里使用方向键滚动历史命令,正常。
now
-------------------------------
2013-05-23 17:00:13.901787+08
(1 row)

备注:方向键滚动历史命令正常。

psql 测试2:session 级禁用 readline

1
2
3
4
5
6
7
8
9
10
11
12
[pg93@redhatB ~]$ psql --no-readline
psql (9.3beta1)
Type "help" for help.

postgres=# select now();
now
-------------------------------
2013-05-23 17:01:48.875906+08
(1 row)

postgres=# ^[[A^[[A
postgres-#

备注:psql 连接时加了参数“–no-readline”,设置后,方向键又抽风了,更进一步,TAB 补全功能也被禁用了。

总结

  1. 建议开启 readline 功能,便于数据库管理,维护。
  2. readline 功能与 psql 客户端相关,而与服务端无关。

原创文章,作者:kirin,如若转载,请注明出处:https://blog.ytso.com/237971.html

(0)
上一篇 2022年1月29日
下一篇 2022年1月29日

相关推荐

发表回复

登录后才能评论