Người dùng Postgres không tồn tại?


92

Tôi mới cài đặt Postgres và mày mò với nó và nhiều cấu hình khác nhau trong 1-2 giờ.

Tôi gặp khó khăn khi không thể thay đổi thành người dùng postgres

$ su - postgres dẫn đến lỗi sau: su: unknown login: postgres

$ sudo -u postgres psql dẫn đến lỗi sau: sudo: unknown user: postgres

Những nỗ lực này được thực hiện như người dùng bình thường. Thử chúng dưới dạng root có kết quả chính xác như nhau. Tôi đã cài đặt postgres qua Homebrew trên OS X và tôi đã đọc hướng dẫn nhiều lần.


Bạn chỉ đang cố gắng chạy psql?
danielM

Vâng, tôi muốn chạy với tư cách là postgresngười dùng thích hợp .
krystah

Trên một số phiên bản Mac OS X, với một số phương pháp cài đặt, tôi nghĩ rằng người dùng được tạo postgres_thay thế. Lưu ý dấu gạch dưới ở cuối. Ngoài ra, bạn có chắc mình (hoặc trình cài đặt) đã thực sự tạo phiên bản PostgreSQL và khởi động cơ sở dữ liệu không?
Craig Ringer

1
Tôi quá không thể chuyển sang postgresngười dùng. Đã giải quyết vấn đề sau khi cài đặt postgresql-servergói.
sergio 郝海东 冠状 病 六四 事件 法轮功

Câu trả lời:


89

psql: Đăng nhập cho tôi bằng tên người dùng mặc định của tôi

psql -U postgres: Đăng nhập cho tôi với tư cách là người dùng postgres

Sudo dường như không bắt buộc đối với tôi.

Tôi sử dụng Postgres.app cho cơ sở dữ liệu postgres OS X của mình. Nó loại bỏ sự đau đầu của việc đảm bảo cài đặt hoạt động và máy chủ cơ sở dữ liệu được khởi chạy đúng cách. Kiểm tra nó tại đây: http://postgresapp.com

Chỉnh sửa: Ghi có cho @Erwin Brandstetter để sửa cách tôi sử dụng các đối số.


8
Tôi đã cài đặt bằng Brew và nó không tạo người dùng có tên là postgres hoặc _postgres (theo như tôi có thể thấy) nên điều này không thành công đối với tôi. @kangkyu solution giải thích và hướng dẫn bạn các vấn đề - giả sử bạn không có người dùng postgres thì: psql postgrespsql -d postgres.
notapatch

21

Bởi psql --help, khi bạn không đặt tùy chọn cho tên cơ sở dữ liệu (không có -dtùy chọn), nó sẽ là tên người dùng của bạn, nếu bạn không đặt -U, tên người dùng cơ sở dữ liệu cũng sẽ là tên người dùng của bạn, v.v.

Nhưng bằng lệnh initdb(để tạo cơ sở dữ liệu đầu tiên) nó không có tên người dùng của bạn như bất kỳ tên cơ sở dữ liệu nào. Nó có một cơ sở dữ liệu được đặt tên postgres. Cơ sở dữ liệu đầu tiên luôn được tạo bởi lệnh initdb khi vùng lưu trữ dữ liệu được khởi tạo. Cơ sở dữ liệu này được gọi là postgres.

Vì vậy, nếu bạn không có cơ sở dữ liệu khác có tên tên người dùng của mình, bạn cần phải làm psql -d postgresđể lệnh psql hoạt động. Và có vẻ như nó cung cấp -dtùy chọn theo mặc định, psql postgrescũng hoạt động.

Nếu bạn đã tạo một cơ sở dữ liệu khác có tên giống với tên người dùng của mình, (nên thực hiện với createdb) thì bạn chỉ có thể ra lệnh psql. Và có vẻ như tên người dùng cơ sở dữ liệu đầu tiên được đặt làm tên người dùng máy của bạn bởi bia.

psql -d <first database name> -U <first database user name>

hoặc là,

psql -d postgres -U <your machine username>
psql -d postgres

sẽ hoạt động theo mặc định.


17

OS X có xu hướng đặt tiền tố tên tài khoản hệ thống bằng "_"; bạn không cho biết bạn đang sử dụng phiên bản OS X nào, nhưng ít nhất trong 10.8 và 10.9 người dùng _postgres tồn tại trong cài đặt mặc định. Lưu ý rằng bạn sẽ không thể truy sucập tài khoản này (ngoại trừ tài khoản gốc), vì nó không có mật khẩu. sudo -u _postgres, mặt khác, sẽ hoạt động tốt.


Cảm ơn! Đây là câu trả lời mà tôi đang tìm kiếm. Tôi có thể làm gì để đổi tên người dùng thành "postgres" không? Đăng nhập với tư cách người dùng _postgres đó dẫn đến psql phàn nàn rằng người dùng "_postgres" không tồn tại. Tôi đang cố gắng để khôi phục lại một postgres trường hợp rõ ràng với một tập tin sao lưu từ cơ sở dữ liệu khác
Chris Reyes - ông-ông

1
@ChrisReyes Việc thay đổi tên tài khoản hệ thống có thể phá vỡ các thành phần hệ thống sử dụng chúng, vì vậy tôi thực sự khuyên bạn không nên làm như vậy. Bạn có thể tạo một tài khoản người dùng khác với tên "postgres" và sử dụng tên đó, nhưng nếu tôi hiểu đúng (mà tôi có thể không hiểu), điều bạn đang gặp phải là tài khoản người dùng trong cơ sở dữ liệu postgres không có tên _postgres. AIUI, tên tài khoản trong DB tách biệt với tên tài khoản hệ thống, vì vậy sẽ không có vấn đề gì khi chạy phiên bản DB trong tài khoản hệ thống "_postgres" và mở DB đó bằng tài khoản cơ sở dữ liệu "postgres".
Gordon Davisson


4
psql -U postgres

Làm việc tốt cho tôi trong trường hợp tên db: postgres & tên người dùng: postgres. Vì vậy, bạn không cần phải viết sudo.

Và trong trường hợp db khác, bạn có thể thử

psql -U yourdb postgres

Như nó được đưa ra trong trợ giúp của Postgres:

psql [OPTION]... [DBNAME [USERNAME]]

Trường hợp của tôi: $ psql -U postgrestạo ra đầu ra psql: FATAL: role "postgres" does not exist, nhưng psql postgreshoạt động.
Frozen Flame,

4

Tôi nhận được chính xác các lỗi tương tự như kryshah với su - postgressudo -u postgres psql. Câu trả lời của DanielM cũng có lỗi.

Kết quả đầu ra khi cài đặt sai

Tuy nhiên, câu trả lời từ bình luận của przbabu.

masi$ psql
psql: FATAL:  database "masi" does not exist
masi$ psql -U postgres
psql: FATAL:  role "postgres" does not exist
masi$ psql postgres
psql (9.4.1)
Type "help" for help.

Tôi nghĩ một số phần của vấn đề này có thể nằm trong cài đặt chủ sở hữu trong OSX

masi$ ls -al /Users/
total 0
drwxr-xr-x   7 root      admin  238 Jul  3 09:50 .
drwxr-xr-x  37 root      wheel 1326 Jul  2 19:02 ..
-rw-r--r--   1 root      wheel    0 Sep 10  2014 .localized
drwxrwxrwt   7 root      wheel  238 Apr  9 19:49 Shared
drwxr-xr-x   2 root      admin   68 Jul  3 09:50 postgres
drwxr-xr-x+ 71 masi      staff 2414 Jul  3 09:50 masi

nhưng làm sudo chown -R postgres:staff /Users/postgrescho chown: invalid user: ‘postgres:staff’.

Trong ngắn hạn, đây không phải là giải pháp vấn đề. Sử dụng các công cụ được cung cấp bởi cài đặt postgres để tạo người dùng và cơ sở dữ liệu.

Để có được cài đặt và đầu ra phù hợp

Có các lệnh cụ thể sau khi cài đặt postgres để thêm người dùng mới vào hệ thống cơ sở dữ liệu. Sau initdb, hãy chạy phần sau như được mô tả ở đây

createuser --pwprompt postgres
createdb -Opostgres -Eutf8 masi_development
psql -U postgres -W masi_development

Để tránh yêu cầu mật khẩu mọi lúc, bạn có ba lựa chọn như được mô tả ở đây .


2

Đối với tôi Đây là giải pháp trên macOS Cài đặt lại psql

brew install postgres

Khởi động máy chủ PostgreSQL

pg_ctl -D /usr/local/var/postgres start

Khởi tạo DB

initdb /usr/local/var/postgres

Nếu lệnh này gây ra lỗi, hãy rm tệp cơ sở dữ liệu cũ và chạy lại lệnh trên

rm -r /usr/local/var/postgres

Tạo cơ sở dữ liệu mới

createdb postgres_test
psql -W postegres_test

Bạn sẽ đăng nhập vào db này và có thể tạo người dùng tại đây để đăng nhập


0

Giải pháp rất đơn giản:
đăng nhập với quyền root
và sau:

su - postgres

psql
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.