Lỗi PostgreSQL: Gây tử vong: vai trò Tên người dùng không tồn tại


732

Tôi đang thiết lập PostgreSQL 9.1. Tôi không thể làm bất cứ điều gì với PostgreSQL: không thể createdb, không thể createuser; tất cả các hoạt động trả về thông báo lỗi

Fatal: role h9uest does not exist

h9uestlà tên tài khoản của tôi và tôi sudo apt-get installPostgreQuery 9.1 trong tài khoản này.
Lỗi tương tự vẫn tồn tại cho roottài khoản.


1
Sau đó, bạn có thể chạy vào FATAL: role "user" is not permitted to log in, kiểm tra dba.stackexchange.com/questions/57723/ cho điều đó.
kqw

19
Tôi đã trả lời câu hỏi này ở đây . Đọc hướng dẫn này quá " Cách cài đặt Postgres cho Ubuntu Linux ".
ruzenhack

@Ruzenhack liên kết hướng dẫn đó chính xác là những gì tôi cần! Rất rõ ràng và đơn giản
lùn

4
psql -h localhost -U postgres
Metin Atalay

Nếu bạn gặp lỗi role doesn't existVÀ lỗi can't create role, it already existshãy xem câu trả lời này: stackoverflow.com/a/56658832/1689770
Jonathan

Câu trả lời:


774

Sử dụng người dùng hệ điều hành postgres để tạo cơ sở dữ liệu của bạn - miễn là bạn chưa thiết lập vai trò cơ sở dữ liệu với các đặc quyền cần thiết tương ứng với người dùng hệ điều hành cùng tên h9uestcủa bạn ( trong trường hợp của bạn):

sudo -u postgres -i

Theo khuyến cáo ở đây hoặc ở đây .

Sau đó thử lại. Nhập exitkhi thực hiện với hoạt động như người dùng hệ thống postgres.

Hoặc thực hiện lệnh đơn createusernhư postgresvới sudo, như được thể hiện bằng drees trong câu trả lời khác.

Vấn đề là sử dụng người dùng hệ điều hành phù hợp với vai trò cơ sở dữ liệu cùng tên để được cấp quyền truy cập thông qua identxác thực . postgreslà người dùng hệ điều hành mặc định đã khởi tạo cụm cơ sở dữ liệu. Hướng dẫn sử dụng:

Để khởi động hệ thống cơ sở dữ liệu, một hệ thống mới được khởi tạo luôn chứa một vai trò được xác định trước. Vai trò này luôn luôn là một siêu người dùng, và theo mặc định (trừ khi bị thay đổi khi chạy initdb), nó sẽ có cùng tên với người dùng hệ điều hành đã khởi tạo cụm cơ sở dữ liệu. Thông thường, vai trò này sẽ được đặt tên postgres. Để tạo thêm vai trò, trước tiên bạn phải kết nối với vai trò ban đầu này.

Tôi đã nghe nói về các thiết lập kỳ lạ với tên người dùng không chuẩn hoặc nơi người dùng hệ điều hành không tồn tại. Bạn cần điều chỉnh chiến lược của mình ở đó.

Đọc về vai trò cơ sở dữ liệuxác thực ứng dụng khách trong hướng dẫn.


1
Không thể chạy sudo etcnhư người dùng postgres ... Làm thế nào để cài đặt một chương trình? Xem vấn đề cài đặt S2geometry này .
Peter Krauss

Tùy thuộc vào cấu hình, người ta có thể chỉ cần su postgres.
Fabien Snauwaert

1
sudo -u postgreskhông hoạt động, trong khi sudo -u postgres -ilàm việc! Không những gì -icờ làm gì?
phân tích cú pháp

1
@parsecer: Một vỏ tương tác được bắt đầu, tương tự su, nhưng dựa trên các đặc quyền sudo. Xem man sudo.
Erwin Brandstetter

284

Sau khi thử nhiều giải pháp của người khác, và không thành công, câu trả lời này cuối cùng đã giúp tôi.

https://stackoverflow.com/a/16974197/2433309

Tóm lại, đang chạy

sudo -u postgres createuser owning_user

tạo một vai trò với tên owning_user (trong trường hợp này là h9uest). Sau đó, bạn có thể chạy rake db:createtừ thiết bị đầu cuối dưới bất kỳ tên tài khoản nào bạn thiết lập mà không cần phải nhập vào môi trường Postgres.


29
Nếu bạn gặp lỗi "không đủ đặc quyền" sau lỗi này, bạn có thể nối cờ -s vào lệnh trên. Điều này sẽ tạo người dùng mới của bạn như một siêu người dùng. Xin lưu ý về ý nghĩa bảo mật của việc này nếu bạn quyết định thực hiện.
sarink

1
Tôi nhận được "không đủ đặc quyền", nhưng bây giờ tôi đã có LRI: cuộn "tên người dùng" đã tồn tại.
Wylliam Judd

4
@ConnorL336 Bạn có thể thay thế 'postgres' bằng tên của siêu người dùng PG của bạn. Trong trường hợp của tôi đó là tên của tôi.
myfashiolahoma

1
Tôi cũng phải sử dụng -s, và không cần sử dụng sudo -u postgres(chỉ createuser new_userhoạt động tốt)
Meekohi

2
psql: FATAL: role "jonny" does not existđược rồi vậy sudo -u postgres -s createuser jonnytại sao createuser: creation of new role failed: ERROR: role "jonny" already exists
Jonathan

134
sudo su - postgres

psql template1

tạo vai trò trên pssql với đặc quyền là "siêu người dùng"

CREATE ROLE username superuser;
eg. CREATE ROLE demo superuser;

Sau đó tạo người dùng

CREATE USER username; 
eg. CREATE USER demo;

Gán đặc quyền cho người dùng

GRANT ROOT TO username;

Và sau đó kích hoạt đăng nhập người dùng đó, để bạn có thể chạy, ví dụ : psql template1, từ $thiết bị đầu cuối bình thường :

ALTER ROLE username WITH LOGIN;

4
Tôi mới thực hiện cài đặt mới PostgreQuery 9.4.4 và có thể sử dụng theo sau để tạo một siêu người dùng mới: CREATE ROLE username superuser createdb login; kết hợp cả ba bước ...
iPad Guy

25
# GRANT ROOT cho tôi;
LRI

6
phiên bản đơn giản hơn: sudo -u postgres createuser --superuser $USER; sudo -u postgres createdb $USER
Zach Estela

2
@shacker#GRANT postgres TO username
7kemZmani

Tôi đang sử dụng root để khởi động máy chủ, sau đó && \ createdb -O postgresondocker postgresondocker`` Tôi có thể sử dụng root để làm điều này nếu tôi thêm nó vào pg_ident không?
Shivangi Singh

85

Cài đặt postgres bằng cách sử dụng apt-getkhông tạo ra vai trò người dùng hoặc cơ sở dữ liệu.

Để tạo vai trò siêu người dùng và cơ sở dữ liệu cho tài khoản người dùng cá nhân của bạn:

sudo -u postgres createuser -s $(whoami); createdb $(whoami)


1
Tôi cần chạy phần thứ hai như sau:sudo -u postgres createdb $(whoami)
SanD

2
@SanD Nếu bạn đã tạo tài khoản người dùng của riêng mình dưới dạng siêu người dùng (thông qua -scờ trong lệnh đầu tiên), bạn có thể tự tạo cơ sở dữ liệu. Bạn sẽ không cần phải chạy createdbnhư postgres.
Miles Erickson

2
Câu trả lời chính xác! Tiết kiệm cho tôi hàng giờ gỡ lỗi !!
Aminu Kano

79

Điều này làm việc cho tôi:

psql -h localhost -U postgres

vui lòng thêm mật khẩu cho người dùng trên.
Chaudhry Waqas

1
@Vincent nếu mật khẩu không bao giờ thay đổi sau khi cài đặt PostgreSQL, theo mặc định nó là postgres(được thử nghiệm trên Linux và Windows).
silvioprog

1
role postgres does not exist
Jacob Schneider

15

Phương pháp làm việc,

  1. vi /etc/postgresql/9.3/main/pg_hba.conf
  2. local all postgres peer ở đây thay đổi ngang hàng để tin tưởng
  3. khởi động lại, sudo service postgresql restart

  4. bây giờ cố gắng, psql -U postgres


1
Rõ ràng là trustphương pháp này chỉ được khuyến khích trong một môi trường hoàn toàn an toàn. Mặc dù có thể truy cập từ các kết nối không tin cậy, nhưng không bao giờ để lộ cụm DB của bạn như thế.
Erwin Brandstetter

cái này tốt đấy
horoyoi o

Kiểm tra: Nếu dịch vụ postgresql chưa được khởi động, có thể có một số lỗi trong tệppg_hba.conf
Đi bộ

11

Đối với phiên bản Postgres 9.5, hãy sử dụng thông tin sau:

psql -h localhost -U postgres

Hy vọng điều này sẽ giúp.


11
psql postgres

postgres=# CREATE ROLE username superuser;
postgres=# ALTER ROLE username WITH LOGIN;

4
psql postgreskết quả:psql: FATAL: role "root" does not exist
TomSawyer

2
psql postgres -U postgres? Phụ thuộc vào người dùng (-U) bạn có.
Meadowlark Bradsher

cảm ơn bạn! Tôi đã đấu tranh làm thế nào để sao lưu postgresql bằng root vì tôi không biết mật khẩu postgres
Dika

7

Trong lời nhắc người dùng cục bộ, không phải lời nhắc người dùng root, gõ

sudo -u postgres createuser <local username>

Sau đó nhập mật khẩu cho người dùng cục bộ.

Sau đó nhập lệnh trước đó đã tạo "vai trò 'tên người dùng' không tồn tại."

Các bước trên đã giải quyết vấn đề cho tôi. Nếu không, xin vui lòng gửi tin nhắn thiết bị đầu cuối cho các bước trên.



3

Tự tạo một cụm DB đã giải quyết nó trong trường hợp của tôi.

Vì một số lý do, khi tôi cài đặt postgres, "DB ban đầu" không được tạo. Thi cônginitdb đã lừa tôi.

Giải pháp này được cung cấp trong Wiki PostgreSQL - Các bước đầu tiên :

initdb

Thông thường, cài đặt postgres vào HĐH của bạn sẽ tạo ra một "DB ban đầu" và bắt đầu trình nền của máy chủ postgres chạy. Nếu không thì bạn sẽ cần chạy initdb


2

Đối với người dùng Windows :psql -U postgres

Sau đó, bạn sẽ thấy giao diện dòng lệnh tới PostgreSQL: postgres=#


0

Thực hiện theo các bước này và nó sẽ làm việc cho bạn:

  1. chạy msfconsole
  2. gõ db_console
  3. Một số thông tin sẽ được hiển thị cho bạn đã chọn thông tin người bảo bạn thực hiện: db_connect user:pass@host:port.../databasexin lỗi tôi không nhớ nhưng nó giống như thông tin này sau đó thay thế người dùng và mật khẩu và máy chủ lưu trữ và cơ sở dữ liệu với thông tin được bao gồm trong database.ymlvị trí :/usr/share/metasploit-framework/config
  4. Bạn sẽ thấy. xây dựng lại bộ đệm mô hình trong nền.
  5. Nhập apt-get update && apt-get nâng cấp sau khi cập nhật khởi động lại thiết bị đầu cuối và msfconsole và nó hoạt động, bạn có thể kiểm tra xem bằng cách nhập vào msfconsole: msf>db_statusbạn sẽ thấy nó được kết nối.

0

đổ và khôi phục với --no-owner --no-privilegescờ

ví dụ

bãi rác - pg_dump --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname > /tmp/full.dump

khôi phục - pg_restore --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname /tmp/full.dump

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.