2013-07-29 29 views
21

Mật khẩu hiển thị trong dấu nhắc psql của tôi (bằng cách nhấn mũi tên lên để xem các lệnh đã nhập trước đó). Vì vậy, tôi muốn xóa mục nhập đó từ máy khách psql.Lịch sử ứng dụng khách psql được lưu giữ ở đâu? (~/.psql_history non-existant!)

Các tài nguyên khác (1, 2) tuyên bố rằng lịch sử ứng dụng khách psql được lưu giữ là tệp ~/.psql_history, tuy nhiên tệp này chỉ đơn giản là không có. (không phải trong số .bash_history hoặc là)

Vì vậy, phải có một tệp khác có lưu ý lịch sử nhắc lệnh psql, bất kỳ ý tưởng nào ở đâu?

Lưu ý: Tôi đang làm việc trên Ubuntu 12.04

+0

Có thể bạn đang thực thi psql với tư cách người dùng khác? –

+0

Tôi không nghĩ như vậy, chỉ trong trường hợp, tôi đăng nhập vào dấu nhắc của tôi như thế này 'sudo -u postgres psql my_db' – Bentley4

+5

Đó chắc chắn là chạy psql là người dùng' postgres'. Vì vậy, lịch sử có thể được lưu trữ trong '~ postgres/.psql_history'. – qqx

Trả lời

28

Khi bạn sử dụng:

sudo -u postgres psql my_db 

bạn chạy psql như người sử dụng (Linux) postgres, do file .psql_history là trong thư mục chính của người dùng postgres (ví dụ /home/postgres/.psql_history), không phải trong thư mục chính của người dùng bạn đã đăng nhập lần đầu.

Trong một số cài đặt, vị trí của thư mục chính của người dùng là . Bạn có thể kiểm tra điều này bằng cách chạy:

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

Là một tham chiếu trong tương lai: Bạn có thể chuyển sang tên người dùng 'postgres' bằng cách thực hiện' sudo su postgres' và sau đó thực hiện 'cat ~/.psql_history'. Nhưng bạn thậm chí không cần phải chuyển người dùng nếu bạn làm '~ postgresql' và nhấn tab (mở rộng dấu ngã), sau đó nó mở rộng thành'/var/lib/postgresql/'. Tệp '.psql_history' cũng nằm trong thư mục thứ hai. – Bentley4

+0

Câu hỏi thực sự là: tại sao 'sudo'? 'psql my_db postgres' sẽ làm điều tương tự. –

+0

Lý do là khi tôi làm 'psql my_db postgres', tôi nhận được:' psql: FATAL: Xác thực ngang hàng không thành công cho người dùng "postgres" – Bentley4

6

Các tên tập tin được đưa ra bởi một biến nội tên HISTFILE. Về mặt kỹ thuật, nó không phải là ~/.psql_history.

Kiểm tra tệp ~/.psqlrc cho một cài đặt thay thế. Ví dụ nó có thể là:

\ bộ HISTFILE ~/.psql_history-: DBNAME

như đã đề cập trong manual cho một tập tin lịch sử mỗi cơ sở dữ liệu.

+1

Tôi không có bất kỳ tập tin '~/.psqlrc' (đã làm' ls -a' trong '~'). Bên trong dấu nhắc tôi có thể thực hiện 'SHOW hba_file;' để tìm vị trí của tệp 'pg_hba.conf'. Có một lệnh tương đương để hiển thị 'HISTFILE' không?('SHOW hist_file;' hoặc 'SHOW HISTFILE;' không hoạt động) – Bentley4

+0

Liệu 'echo $ PSQL_HISTORY' có hiển thị đường dẫn thay thế cho tệp .psql_history của bạn không? – bma

+1

Nó chỉ in một dòng trống. Nhưng tôi đã tìm ra giải pháp, xem câu trả lời của qqx. – Bentley4

0

Tôi có một máy chủ ở đây (Amazon Linux AMI, Centos like) không có thư mục nhà postgres. Tuy nhiên nó ghi nhớ lịch sử của psql. Sử dụng lệnh locate Tôi đã tìm thấy tệp lịch sử ở số /var/lib/pgsql93/.psql_history. Trên một máy khác, nó ở số /var/lib/pgsql/. Sau khi chỉnh sửa tệp này, xóa tất cả các dòng có liên quan, lịch sử đã biến mất.

Khi lệnh định vị không trả lại kết quả, hãy sử dụng lệnh updatedb để tạo cơ sở dữ liệu cho lệnh định vị. Bạn không thể chạy các lệnh này như người dùng postgres btw.

Các vấn đề liên quan