【问题标题】:Where is psql client history kept? (~/.psql_history non-existent!)psql 客户端历史记录保存在哪里? (~/.psql_history 不存在!)
【发布时间】:2013-07-29 13:06:20
【问题描述】:

密码在我的 psql 提示符中可见(通过向上箭头查看以前输入的命令)。所以我想从 psql 客户端中删除该条目。

其他资源(1, 2) 声称 psql 客户端历史记录保存在一个 ~/.psql_history 文件中,但是这个文件根本不存在。 (它也不在.bash_history 中)

所以必须有另一个文件保存 psql 提示的历史记录,有什么想法吗?

我像这样登录到我的提示 sudo -u postgres psql my_db

注意:我正在处理Ubuntu 12.04

【问题讨论】:

  • 虽然我出于同样的原因提出了这个问题,但我认为没有必要从这个历史文件中删除这个命令。历史文件只能由postgres 用户(或root)读取/写入,如果您有权访问该用户,则可以更改您想要的任何密码。

标签: postgresql psql


【解决方案1】:

使用时:

sudo -u postgres psql my_db

您以 (Linux) 用户 postgres 运行 psql,因此 .psql_history 文件位于 postgres 用户的主目录中(例如 /home/postgres/.psql_history),而不是您最初登录的用户的主目录与。

在某些安装中,postgres 用户的主目录的位置是/var/lib/postgresql。您可以通过运行来检查:

grep postgres /etc/passwd | cut -d ':' -f 6

【讨论】:

  • 作为未来参考:您可以通过执行sudo su postgres 切换到postgres 用户名,然后执行cat ~/.psql_history。但是,如果您执行~postgresql 并点击标签(波浪号扩展),您甚至不需要切换用户,然后它会扩展为/var/lib/postgresql/.psql_history 文件也位于后一个目录中。
  • 真正的问题是:为什么是sudopsql my_db postgres 会做同样的事情。
  • 原因是当我做psql my_db postgres时,我得到:psql: FATAL: Peer authentication failed for user "postgres"
  • 我的 Postgres Docker 容器上没有这样的文件,也没有 /home/postgres
  • 在 Centos 中也可以在 /var/lib/pgsql 中
【解决方案2】:

文件名由名为HISTFILE 的内部变量给出。 从技术上讲,它不必是~/.psql_history.

检查~/.psqlrc 文件以获取替代设置。例如它可能是:

\set HISTFILE ~/.psql_history- :DBNAME

manual 中提到的每个数据库的历史文件。

【讨论】:

  • 我没有任何~/.psqlrc 文件(在~ 中有ls -a)。在提示符中,我可以使用SHOW hba_file; 来查找pg_hba.conf 文件的位置。是否有显示HISTFILE 的等效命令? (SHOW hist_file;SHOW HISTFILE; 不起作用)
  • echo $PSQL_HISTORY 是否显示您的 .psql_history 的替代路径?
  • 它只是打印一个空行。不过我已经找到解决办法了,看qqx的回答。
  • 对我来说也一样。只有一个黑色文件。你找到解决办法了吗?
  • 感谢@bma 提到环境变量$PSQL_HISTORY!这正是我想要的。
【解决方案3】:

我这里有一个没有 postgres 主文件夹的服务器(Amazon Linux AMI,Centos 之类的)。它仍然记得 psql 的历史。使用locate 命令,我找到了位于/var/lib/pgsql93/.psql_history 的历史文件。在另一台机器上,它位于/var/lib/pgsql/。编辑此文件,删除所有相关行后,历史记录就消失了。

当定位命令没有返回结果时,使用命令updatedb 为定位命令创建数据库。顺便说一句,您不能以用户 postgres 的身份运行这些命令。

【讨论】:

    【解决方案4】:

    你需要修改 /etc/passwd. 将 pgsql 文件夹的位置放在 postgres 行并尝试: grep postgres /etc/passwd |剪切 -d ':' -f 6

    【讨论】:

      【解决方案5】:

      其他一些答案已经暗示了这一点,并提到了如何在您的 postgres 用户没有主目录的情况下查找 .psql_history 文件的保存位置(即您没有 /home/postgres/) ,但他们没有提到默认位置是什么。

      为了节省查看目录引用的时间,您的 .psql_history 文件(以及 postgres 用户的 .bash_history 文件)可以在 var/lib/postgresql/ 找到

      另请注意,如果您使用 ls 检查此目录是否包含 -a 标志,因为它们仍然是隐藏文件。

      【讨论】:

      • CentOS 7 上不存在任何目录。我想清除历史记录,因为它包含密码条目。
      猜你喜欢
      • 2021-08-07
      • 1970-01-01
      • 2011-10-24
      • 1970-01-01
      • 2010-11-26
      • 2016-12-25
      • 2015-02-19
      • 2010-11-01
      • 1970-01-01
      相关资源
      最近更新 更多