2011-07-22 33 views
24

Tôi đã cài đặt PostgreSQL và nó hoạt động tốt. Tuy nhiên, khi tôi khôi phục bản sao lưu, tôi nhận được lỗi -bash: psql: command not found:Postgresql -bash: psql: lệnh không tìm thấy

[[email protected] ~]# su postgres 
[[email protected] root]$ psql -f all.sql 
bash: psql: command not found 
[[email protected] root]$ 

Tôi đã làm gì sai?

+3

Điều này có thể xảy ra trên CentOS khi bạn vô tình cài đặt PostgreSQL 8.4 (gói 'postgresql-server') sau khi cài đặt PostgreSQL 9.2 (gói 'postgresql-serve r92') trên cùng một máy. Nếu bạn xóa PostgreSQL 8.4, yum cũng sẽ xóa thư mục bin postgres khỏi đường dẫn. –

+0

^^ NÀY! Cảm ơn Iain –

Trả lời

14

có lẽ psql không nằm trong số PATH của người dùng postgres. Sử dụng lệnh locate để tìm vị trí của psql và đảm bảo rằng đường dẫn của nó nằm trong số PATH cho người dùng postgres.

32
export PATH=/usr/pgsql-9.2/bin:$PATH 

Chương trình thực thi psql là trong thư mục /usr/pgsql-9.2/bin, và thư mục đó không được bao gồm trong đường dẫn mặc định, vì vậy chúng tôi phải nói với chương trình vỏ (terminal) của chúng tôi nơi để tìm psql. Khi hầu hết các gói được cài đặt, chúng được thêm vào một đường dẫn hiện có, chẳng hạn như /usr/local/bin, nhưng không phải là chương trình này.

Vì vậy, chúng ta phải thêm đường dẫn của chương trình vào biến shell PATH nếu chúng ta không muốn phải nhập đường dẫn đầy đủ vào chương trình mỗi khi chúng ta thực thi nó.

Dòng này thường sẽ được thêm vào tập lệnh khởi động theshell, cho bash shell sẽ nằm trong tệp ~/.bashrc.

+3

Bạn có sẵn lòng mở rộng nhận xét này không?Nó có vẻ phổ biến, nhưng nó có thể hữu ích hơn nhiều với thông tin bổ sung (ví dụ, nơi làm các dòng trên đi, và họ làm gì?) – rainbowsorbet

+0

Nếu bạn đang trên Mac và cài đặt Postgres.app, sau đó '' ' xuất PATH =/Applications/Postgres.app/Nội dung/Phiên bản/mới nhất/bin: $ PATH '' ' hoặc ' '' xuất PATH =/Applications/Postgres.app/Nội dung/Phiên bản/9.6/bin: $ PATH '' ' –

1

Nếu bạn đang sử dụng ứng dụng Postgres Mac (bởi Heroku) và Bundler, bạn có thể thêm pg_config trực tiếp bên trong ứng dụng, vào gói của bạn.

bundle config build.pg --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.4/bin/pg_config 

... sau đó chạy lại gói.

Lưu ý: kiểm tra phiên bản trước bằng cách sử dụng các bước sau.

ls /Applications/Postgres.app/Contents/Versions/ 
0

Trong trường hợp bạn đang chạy nó trên Fedora hoặc CentOS, đây là những gì làm việc cho tôi (PostgreSQL 9.6):

Trong terminal:

$ sudo visudo -f /etc/sudoers 

sửa đổi như sau văn bản từ:

Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin 

để

Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/pgsql-9.6/bin 

xuất cảnh, sau đó:

$ printenv PATH 

$ sudo su postgres 

$ psql 

Để thoát PostgreSQL thiết bị đầu cuối, bạn cần phải chữ số:

$ \q 

Nguồn: https://serverfault.com/questions/541847/why-doesnt-sudo-know-where-psql-is#comment623883_541880

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