如何在psql终端中粘贴汉字?

use*_*521 4 postgresql psql postgresql-9.4

我正在尝试将中文字符粘贴到 psql 终端中:

$ psql
=> \encoding
=> UTF8
# Ctrl+v (?????)
=> ???????
Run Code Online (Sandbox Code Playgroud)

粘贴到普通终端(Max OS)时,它工作正常:

$ # Ctrl+v (?????)
$ ?????
Run Code Online (Sandbox Code Playgroud)

可能有什么问题?

Dan*_*ité 6

psql将输入处理委托给共享库,即libreadlinelibedit

但是libedit过去在多字节字符集上不能可靠地工作,正如多次报道的那样,例如这里对于 OSX

从你的评论:

/Library/PostgreSQL/9.4/bin/psql -> libedit@1.47.0不工作,/Library/PostgreSQL/9.4/bin/psql -> libedit@1.48.0不工作但/Applications/Postgres.app/Contents/Versions/9.4/bin/psql -> libedit@3.0.0工作!

...似乎通过重新链接到较新版本,您可以解决问题。知道这很有用。

之所以libedit使用,而libreadline首先做得更好是因为后者是根据 GPL 许可的,而psql像 PostgreSQL 的其余部分一样是 BSD 许可的。结果是,psqllibreadline不违反其许可的情况下,无法以编译形式与调用 的必要部分一起交付。另一方面,libedit使用 BSD 许可证,因此可以随附它。

到目前为止,psql 打包程序的解决方案是随 PostgreSQL 一起提供,libedit并让用户libreadline在必要时重新链接它。

在 Linux 上,Debian/Ubuntu 软件包甚至可以在没有用户干预的情况下动态执行此操作。