Người tạo: không thể kết nối với cơ sở dữ liệu postgres: FATAL: vai trò “tom” không tồn tại


92

Tôi đang cố gắng thiết lập Postgres lần đầu tiên và tôi cần tạo người dùng có quyền đọc và tạo cơ sở dữ liệu. Tuy nhiên, khi tôi sử dụng:

createuser username

trong thiết bị đầu cuối của tôi, tôi nhận được thông báo sau:

createuser: không thể kết nối với cơ sở dữ liệu postgres: FATAL: role "tom" không tồn tại

Tom là tài khoản người dùng Ubuntu của tôi mà tôi đã đăng nhập ngay bây giờ. Tôi đang cố gắng tạo tên người dùng là "postgres", sau đó làm psql -U psql template1như vậy để tôi có thể tạo cơ sở dữ liệu và chỉ định chủ sở hữu cho nó cho ứng dụng Rails của mình.


Bạn có thực sự đang cố gắng tạo một người dùng 'postgres' không? Hay chỉ là người dùng cho ứng dụng Rails của bạn? Thông thường người dùng 'postgres' đã tồn tại và vấn đề chỉ là kết nối với nó để làm những gì bạn cần.
ostergaard

Câu trả lời:


132

Bạn đã đề cập đến Ubuntu nên tôi đoán bạn đã cài đặt các gói PostgreSQL từ Ubuntu thông qua apt.

Nếu vậy, postgrestài khoản người dùng PostgreSQL đã tồn tại và được định cấu hình để có thể truy cập thông qua peerxác thực cho các ổ cắm unix trong pg_hba.conf. Bạn có thể thực hiện nó bằng cách chạy các lệnh với tư cách là postgresngười dùng unix, ví dụ:

sudo -u postgres createuser owning_user
sudo -u postgres createdb -O owning_user dbname

Đây là tất cả trong tài liệu Ubuntu PostgreSQL , đây là bản hit đầu tiên của Google cho "Ubuntu PostgreSQL" và được bao gồm trong nhiều câu hỏi về Stack Overflow.

(Bạn đã làm cho câu hỏi này khó trả lời hơn rất nhiều bằng cách bỏ qua các chi tiết như hệ điều hành và phiên bản bạn đang sử dụng, cách bạn cài đặt PostgreSQL, v.v.)


sau khi tạo own_user, Làm cách nào để bạn kết nối với người dùng này? Ý tôi là kết nối người dùng mặc định mà tôi sử dụng, sudo -u postgres psql postgres. tương tự cách kết nối own_user?
Jony

2
Ba lựa chọn. (a) Đặt mật khẩu cho người dùng đó và chỉnh sửa pg_hba.confđể sử dụng md5xác thực cho người dùng đó (xem hướng dẫn); (b) Tạo người dùng hệ điều hành có cùng tên và tiếp tục sử dụng peerxác thực; hoặc (c) nâng cao hơn, tạo pg_ident.confánh xạ để cho phép người dùng hệ điều hành của bạn đăng nhập với tư cách người dùng mới.
Craig Ringer

66

Xem git gist với hướng dẫn tại đây

Chạy cái này:

 sudo -u postgres psql

HOẶC LÀ

psql -U postgres

trong thiết bị đầu cuối của bạn để vào bưu điện

NB: Nếu bạn đang sử dụng máy Mac và cả hai lệnh trên đều không thành công, hãy chuyển đến phần về máy Mac bên dưới

postgres=#

Chạy

CREATE USER new_username;

Lưu ý: Thay thế new_username bằng người dùng bạn muốn tạo, trong trường hợp đó sẽ là tom.

postgres=# CREATE USER new_username;
CREATE ROLE

Vì bạn muốn người dùng đó có thể tạo DB, bạn cần thay đổi vai trò thành superuser

postgres=# ALTER USER new_username SUPERUSER CREATEDB;
ALTER ROLE

Để xác nhận, mọi thứ đã thành công,

postgres=# \du
                         List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
new_username     | Superuser, Create DB                           | {}
postgres         | Superuser, Create role, Create DB, Replication | {}
root             | Superuser, Create role, Create DB              | {}

postgres=# 

Cập nhật / Sửa đổi (Đối với Mac):

Gần đây tôi đã gặp một lỗi tương tự trên máy Mac của mình:

psql: FATAL: role "postgres" does not exist

Điều này là do cài đặt của tôi được thiết lập với một siêu người dùng cơ sở dữ liệu có tên vai trò giống với tên đăng nhập (viết tắt) của bạn.

Nhưng một số tập lệnh linux giả định superuser có tên vai trò truyền thống là postgres

Tôi đã giải quyết điều này như thế nào?

Nếu bạn đã cài đặt với homebrewrun:

/usr/local/opt/postgres/bin/createuser -s postgres

Nếu bạn đang sử dụng một phiên bản cụ thể của postgres, hãy nói 10.5rồi chạy:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s postgres

HOẶC LÀ:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s new_username

HOẶC LÀ:

/usr/local/opt/postgresql@11/bin/createuser -s postgres

Nếu bạn đã cài đặt postgres.appcho Mac chạy:

/Applications/Postgres.app/Contents/Versions/10.5/bin/createuser -s postgres

Tái bút: thay thế 10.5 bằng phiên bản PostgreSQL của bạn


Điều này làm việc để có được vào postgres:psql -U postgres
leontalbot

29
sudo -u postgres createuser -s tom 

điều này sẽ giúp bạn vì điều này sẽ xảy ra nếu quản trị viên chưa tạo tài khoản người dùng PostgreSQL cho bạn. Cũng có thể là bạn đã được chỉ định một tên người dùng PostgreSQL khác với tên người dùng hệ điều hành của bạn, trong trường hợp đó, bạn cần sử dụng chuyển đổi -U.


7

1- Đăng nhập với tư cách người dùng PostgreSQL mặc định (postgres)

sudo -u postgres -i

2- Là người dùng postgres. Thêm người dùng cơ sở dữ liệu mới bằng createuserlệnh

[postgres]$ createuser --interactive

3-lối ra

[postgres]$ exit

5

Lỗi của bạn được đăng trong tài liệu chính thức. Bạn có thể đọc bài viết này .

Tôi đã sao chép lý do cho bạn (và siêu liên kết các URL) từ bài viết đó:

Điều này sẽ xảy ra nếu quản trị viên chưa tạo tài khoản người dùng PostgreSQL cho bạn. (Tài khoản người dùng PostgreSQL khác với tài khoản người dùng hệ điều hành.) Nếu bạn là quản trị viên, hãy xem Chương 20 để được trợ giúp tạo tài khoản. Bạn sẽ cần trở thành người dùng hệ điều hành mà PostgreSQL đã được cài đặt (thường là postgres) để tạo tài khoản người dùng đầu tiên. Cũng có thể là bạn đã được gán tên người dùng PostgreSQL khác với tên người dùng hệ điều hành của bạn; trong trường hợp đó, bạn cần sử dụng công tắc -U hoặc đặt biến môi trường PGUSER để chỉ định tên người dùng PostgreSQL của bạn

Đối với mục đích của bạn, bạn có thể làm:

1) Tạo tài khoản người dùng PostgreSQL:

sudo -u postgres createuser tom -d -P

( -Ptùy chọn đặt mật khẩu; -dtùy chọn cho phép tạo cơ sở dữ liệu cho tên người dùng 'tom' của bạn. Lưu ý rằng 'tom' là tên người dùng hệ điều hành của bạn. Bằng cách đó, bạn có thể thực hiện các lệnh PostgreSQL mà không cần nhập sudo.)

2) Bây giờ bạn sẽ có thể thực thi createdbvà các lệnh PostgreSQL khác.


1

Tôi đã gặp vấn đề tương tự, tôi chỉ làm điều này

sudo su - postgres

createuser odoo -U postgres -dRSP #P cho mật khẩu ( odoo hoặc tên người dùng mà bạn muốn o cấp quyền truy cập postgres)



0

Nếu bạn không muốn thay đổi phương thức xác thực (danh tính) và gây rối với pg_hba.conf, hãy sử dụng điều này:

Lần đăng nhập đầu tiên với tư cách người dùng mặc định

 sudo su - posgres

sau đó truy cập psql và tạo người dùng có cùng tên với người bạn đang đăng nhập

postgres=# CREATE USER userOS WITH PASSWORD 'garbage' CREATEDB;

bạn có thể xác minh người dùng của mình với các vai trò tương ứng với

postgres=#  \du

Với điều này, bạn có thể tạo cơ sở dữ liệu của mình và xác minh nó bằng

psql -d dbName
\l
\q

-4

Trước tiên, bạn cần chạy initdb. Nó sẽ tạo cụm cơ sở dữ liệu và thiết lập ban đầu

Xem Cách định cấu hình postgresql lần đầu tiên? http://www.postgresql.org/docs/8.4/static/app-initdb.html


5
Điều này hoàn toàn không chính xác. Nếu người dùng không chạy, initdbhọ sẽ không có máy chủ cơ sở dữ liệu đang chạy và chấp nhận các kết nối để tạo ra thông báo lỗi được báo cáo. Vui lòng xóa câu trả lời gây hiểu lầm này. (BTW, trong tương lai, xin vui lòng liên kết đến / docs / hiện tại / static / để tránh liên kết cũ tích lũy)
Craig Ringer
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.