2013-07-29 48 views
21

密碼在我的psql提示符中可見(通過向上箭頭查看以前輸入的命令)。所以我想從psql客戶端刪除該條目。psql客戶端歷史記錄保存在哪裏? (〜/ .psql_history不存在!)

其他資源(1,2)聲稱psql客戶端歷史保存在~/.psql_history文件中,但該文件根本就不存在。 (它不在.bash_history要麼)

所以必須有另一個文件保存psql提示的歷史,任何想法在哪裏?

注:我的工作Ubuntu 12.04

+0

也許你正在執行psql作爲一個不同的用戶? –

+0

我不這麼認爲,以防萬一,我登錄到我的提示像這樣'sudo -u postgres psql my_db' – Bentley4

+5

這肯定是運行psql作爲用戶'postgres'。所以歷史可能存儲在'〜postgres/.psql_history'中。 – qqx

回答

28

當你使用:

sudo -u postgres psql my_db 

運行PSQL作爲(Linux)的用戶postgres,爲此該.psql_history文件是在postgres用戶的主目錄(如/home/postgres/.psql_history),而不是在主目錄您最初登錄的用戶。

在某些安裝中,postgres用戶的主目錄的位置是/var/lib/postgresql。您可以通過運行檢查:

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

作爲將來的參考:您可以通過執行'sudo su postgres'切換到'postgres'用戶名,然後執行'cat〜/ .psql_history'。但是,如果你使用'〜postgresql'並點擊tab(波浪擴展),你甚至不需要切換用戶,然後擴展到'/ var/lib/postgresql /'。 '.psql_history'文件也位於後一個目錄中。 – Bentley4

+0

真正的問題是:爲什麼'sudo'呢? 'psql my_db postgres'會做同樣的事情。 –

+0

原因是,當我做'psql my_db postgres'時,我得到:'psql:FATAL:對於用戶「postgres」的對等認證失敗' – Bentley4

6

文件名由名爲HISTFILE內部變量給出。 從技術上講,它不一定是~/.psql_history.

檢查~/.psqlrc文件以獲取備用設置。例如,它可能是:

\設置HISTFILE〜/ .psql_history-:DBNAME

作爲 manual爲每個數據庫歷史文件中提到

+1

我沒有任何'〜/ .psqlrc'文件('〜'中有'ls -a')。在提示符內部,我可以執行'SHOW hba_file;'查找'pg_hba.conf'文件的位置。有沒有等同的命令來顯示'HISTFILE'?('SHOW hist_file;'或'SHOW HISTFILE;'不起作用) – Bentley4

+0

'echo $ PSQL_HISTORY'是否顯示您的.psql_history的備用路徑? – bma

+1

它只是打印一個空行。但我找到了解決方案,請參閱qqx的答案。 – Bentley4

0

我這裏有一臺服務器(亞馬遜的Linux AMI,Centos下等)不具有Postgres的主文件夾。它還記得psql的歷史。使用locate命令,我發現位於/var/lib/pgsql93/.psql_history的歷史文件。在另一臺機器上,它在/var/lib/pgsql/。編輯這個文件後,刪除所有相關的行,歷史消失了。

當locate命令未返回結果時,請使用命令updatedb爲locate命令創建數據庫。您不能以用戶postgres順便運行這些命令。