psql: FATAL: vai trò là postgres, không tồn tại


405

Tôi là một người mới làm quen.

Tôi đã cài đặt postgres.app cho mac. Tôi đang chơi xung quanh với các lệnh psql và tôi vô tình làm rơi cơ sở dữ liệu postgres. Tôi không biết những gì trong đó.

Tôi hiện đang làm việc trên một hướng dẫn: http://www.rosslaird.com/blog/building-a-project-with-mezzanine/

Và tôi bị mắc kẹt tại sudo -u postgres psql postgres

THÔNG BÁO LỖI: psql: FATAL: role "postgres" does not exist

$ mà psql

/Applications/Postgres.app/Contents/MacOS/bin/psql

Đây là những gì in ra psql -l

                                List of databases
    Name    |   Owner    | Encoding | Collate | Ctype |     Access privileges     
------------+------------+----------+---------+-------+---------------------------
 user       | user       | UTF8     | en_US   | en_US | 
 template0  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
 template1  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
(3 rows)

Vì vậy, các bước tôi nên làm là gì? Xóa mọi thứ liên quan đến psql và cài đặt lại mọi thứ?

Cảm ơn anh em về sự giúp đỡ!


1
Khởi động lại máy tính. Đảm bảo Launchd từ brew services start postresqlđược thực thi.
Michael Dimmitt

Câu trả lời:


410

LƯU Ý: Nếu bạn đã cài đặt postgres bằng homebrew, hãy xem nhận xét từ @ user3402754 bên dưới.

Lưu ý rằng thông báo lỗi KHÔNG nói về cơ sở dữ liệu bị thiếu, nó nói về vai trò bị thiếu. Sau đó trong quá trình đăng nhập, nó cũng có thể vấp phải cơ sở dữ liệu bị thiếu.

Nhưng bước đầu tiên là kiểm tra vai trò còn thiếu: Đầu ra bên trong psqllệnh là \dugì? Trên hệ thống Ubuntu của tôi, dòng liên quan trông như thế này:

                              List of roles
 Role name |            Attributes             | Member of 
-----------+-----------------------------------+-----------
 postgres  | Superuser, Create role, Create DB | {}        

Nếu không có ít nhất một vai trò với superuser, thì bạn có vấn đề :-)

Nếu có, bạn có thể sử dụng nó để đăng nhập. Và nhìn vào đầu ra của \llệnh của bạn : Các quyền cho usertrên template0template1cơ sở dữ liệu giống như trên hệ thống Ubuntu của tôi dành cho siêu người dùng postgres. Vì vậy, tôi nghĩ rằng thiết lập của bạn đơn giản sử dụng usernhư siêu người dùng. Vì vậy, bạn có thể thử lệnh này để đăng nhập:

sudo -u user psql user

Nếu userthực sự là siêu người dùng DB, bạn có thể tạo một siêu người dùng DB khác và cơ sở dữ liệu riêng, trống cho anh ta:

CREATE USER postgres SUPERUSER;
CREATE DATABASE postgres WITH OWNER postgres;

Nhưng vì thiết lập postgres.app của bạn dường như không làm điều này, bạn cũng không nên. Đơn giản thích ứng hướng dẫn.


10
Đối với tôi, người dùng không được tạo - điều này hoạt động thay vì CREATE USER postgres WITH SUPERUSER PASSWORD 'password'; sử dụng postgres v10.
arcseldon

230
Nếu bạn đã cài đặt Postgres từ homebrewđó thì bạn cần chạy /usr/local/opt/postgres/bin/createuser -s postgrestrong thiết bị đầu cuối của mình
user3402754

7
Tôi phải chạy/usr/local/opt/postgresql/bin/createuser -s postgres
user1807782

1
@ user1807782 Bạn đã lưu ngày của tôi; Tôi nghĩ bạn nên quảng cáo đây là một câu trả lời.
tolga

1
Nếu bạn đang sử dụng một phiên bản cụ thể của postgres, thì bạn cần đưa phiên bản vào đường dẫn -/usr/local/opt/postgresql@11/bin/createuser -s postgres
Digitrance

264

Chìa khóa là "Tôi đã cài đặt postgres.app cho mac." Ứng dụng này thiết lập cài đặt PostgreSQL cục bộ với một siêu người dùng cơ sở dữ liệu có tên vai trò giống như tên đăng nhập (viết tắt) của bạn.

Khi Postgres.app lần đầu tiên khởi động, nó sẽ tạo cơ sở dữ liệu $ USER, đây là cơ sở dữ liệu mặc định cho psql khi không được chỉ định. Người dùng mặc định là $ USER, không có mật khẩu.

Một số tập lệnh (ví dụ: bản sao lưu cơ sở dữ liệu được tạo pgdumptrên hệ thống Linux) và các hướng dẫn sẽ cho rằng siêu người dùng có tên vai trò truyền thống là postgres.

Bạn có thể làm cho cài đặt cục bộ của mình trông truyền thống hơn một chút và tránh những vấn đề này bằng cách thực hiện một lần:

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

cái sẽ làm cho những cái BẠC: vai trò "postgres" không tồn tại .


119
Nếu bạn đang sử dụng postgres từ Homebrew, thì bạn muốn /usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres(rõ ràng là phiên bản 9.2.4).
Roger Lipscombe

1
Đối với postgres.app 9.3, dường như họ đã sắp xếp lại các thư mục. Tôi đã thử: /Appluggest/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres, nhưng điều này tạo ra cùng một thông điệp eror: "
Michael Coxon

7
/Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgreschạy đúng cho tôi
cjspurgeon

9
@RogerLipscombe nếu bạn chạy brew link postgresqlsau khi cài đặt, không cần nối thêm toàn bộ đường dẫn createuser, đơn giản createuser -s postgressẽ hoạt động rất tốt
AlessioX

2
createuser -s postgresđã làm cho tôi. Tôi đã cài đặt postgres với Homebrew
biniam

228

Đối với MAC:

  1. Cài đặt Homebrew
  2. brew install postgres
  3. initdb /usr/local/var/postgres
  4. /usr/local/Cellar/postgresql/<version>/bin/createuser -s postgreshoặc /usr/local/opt/postgres/bin/createuser -s postgressẽ chỉ sử dụng phiên bản mới nhất.
  5. bắt đầu máy chủ postgres bằng tay: pg_ctl -D /usr/local/var/postgres start

Để khởi động máy chủ khi khởi động

  • mkdir -p ~/Library/LaunchAgents
  • ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
  • launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

Bây giờ, nó được thiết lập, đăng nhập bằng cách sử dụng psql -U postgres -h localhosthoặc sử dụng PGAdmin cho GUI.

Theo mặc định, người dùng postgressẽ không có bất kỳ mật khẩu đăng nhập.

Kiểm tra trang web này để biết thêm các bài viết như thế này: https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7


3
Với bản cài đặt brew mới nhất, bạn có thể làm brew services start postgresqlđể bắt đầu postgres
Automatico

<3 <3 <3 <3 <3 <3
Adeel Ahmad

đây là câu trả lời hay nhất
Alejandro Pablo Tkachuk

39
createuser postgres --interactive

hoặc tạo một siêu người dùng postgresl chỉ với

createuser postgres -s


Tôi thấy câu trả lời này hữu ích khi pgadmin của tôi tiếp tục yêu cầu người dùng postgres và tôi không có vai trò postgres nào, lệnh này đã tạo ra nó, tôi đã thêm pwadated tự động vào pgadmin của tôi và vấn đề đã được giải quyết!
19 giờ 43 phút

Điều này hiệu quả với tôi .. nhưng theo cách này: "tạo ra các bài đăng của người dùng"
Roberto Rodriguez

31

Điều này xảy ra khi bạn chạy initdbvới người dùng không có ID postgresmà không chỉ định postgrestên người dùng có --username=postgreshoặc -U postgres.

Sau đó, cụm cơ sở dữ liệu được tạo bằng tài khoản người dùng của hệ thống mà bạn đã sử dụng để chạy initdb và nó được cấp quyền siêu người dùng.

Để khắc phục, chỉ cần tạo một người dùng mới có tên postgrestùy chọn --superuserbằng createusertiện ích đi kèm với Postgres. Tiện ích có thể được tìm thấy trong binthư mục của Postgres . ví dụ

createuser --superuser postgres

Nếu bạn có tên máy chủ hoặc cổng tùy chỉnh thì hãy chắc chắn đặt các tùy chọn phù hợp .

Đừng quên xóa tài khoản người dùng khác đã được initdb tạo cho bạn.


2
Đây là câu trả lời nhiều thông tin nhất.
MyWrathAcademia

17

Đối với tôi, mã này đã làm việc:

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

nó đến từ đây: http : // talk.grow ware.org/t/firth-role-postgres-does-not-exist/216/4


Làm việc cho tôi quá! Bạn đã cứu thịt xông khói của tôi.
Dave Munger

1
Tôi không nhận được vai trò "tôi"
SuperUberDuper

Điều đó có nghĩa là người dùng posgres mới này sẽ không có mật khẩu?
olaoluwa_98

16

Tôi cần phải bỏ đặt $PGUSER:

$ unset PGUSER
$ createuser -s postgres

1
Ôi trời, cuối cùng cũng có vấn đề. Nó cho thấy bạn đang cố gắng tạo ra các postgres của người dùng như các postgres của người dùng
Taras Matsyk

14

Trước tiên, bạn cần tạo một người dùng:

sudo -u postgres createuser --superuser $USER

Sau khi bạn tạo cơ sở dữ liệu:

sudo -u postgres createdb $USER

Thay đổi $USER tên người dùng hệ thống của bạn.

Bạn có thể xem các giải pháp hoàn chỉnh ở đây .


8

Chạy nó trên dòng lệnh nên sửa nó

/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>


1
Đây là điều duy nhất làm việc cho tôi. Cảm ơn bạn!
Herb Meehan

4

Bỏ postgrescơ sở dữ liệu không thực sự quan trọng. Cơ sở dữ liệu này ban đầu trống và mục đích của nó chỉ đơn giản là postgresngười dùng có một loại "nhà" để kết nối, nếu cần.

Tuy nhiên, bạn có thể tạo lại nó bằng lệnh SQL CREATE DATABASE postgres;

Lưu ý rằng hướng dẫn được đề cập trong câu hỏi không được viết postgres.apptrong tâm trí. Trái ngược với PostgreSQL cho Unix nói chung, postgres.appcố gắng trông giống như một ứng dụng thông thường trái ngược với dịch vụ sẽ được điều hành bởi một postgresngười dùng chuyên dụng có các đặc quyền khác với người dùng bình thường của bạn. postgres.appđược điều hành và quản lý bởi tài khoản của chính bạn.

Vì vậy, thay vì lệnh này:, sudo -u postgres psql -U postgressẽ có ý nghĩa hơn là postgres.app sẽ chỉ phát hành : psql, nó tự động kết nối với cơ sở dữ liệu khớp với tên người dùng của bạn và với tài khoản db cùng tên xảy ra là siêu người dùng, vì vậy nó có thể làm bất cứ điều gì cho phép


Được chứ. Nhưng tại sao tôi gặp lỗi ERROR: cannot drop the currently open databasekhi tôi cố xóa db người dùng? Vì vậy, nó không phải là một thực hành tốt để sử dụng postgres.app này?
dùng805981

Bạn không thể thả db trong khi kết nối với nó. Tại sao bạn lại muốn xóa nó đi? Nó ở đây để thuận tiện cho bạn.
Daniel Vérité

Tôi chỉ muốn xem nếu tôi có thể. Vì vậy, nó giống như một cơ sở dữ liệu mặc định chính xác khi tôi khởi động psql và postgres.app của tôi? Bây giờ những gì về đặc quyền truy cập? Tôi không thể thiết lập chúng nữa? Tôi thấy rằng template0 và template1 có các đặc quyền truy cập
user805981

@ user805981 Postgres.applà dành cho mục đích thử nghiệm và phát triển; đó là gói PostgreSQL từ Heroku được thiết kế để giúp người dùng Mac phát triển dễ dàng hơn với Ruby on Rails để kiểm tra với PostgreQuery thay vì SQLite mặc định. Rails sử dụng có xu hướng kiểm tra bằng SQLite và triển khai lên PostgreSQL, điều này gây ra tất cả các loại vấn đề, vì vậy Heroku đã cố gắng để kiểm tra trên PostgreQuery dễ dàng hơn. Postgres.applà tốt để thử nghiệm, nhưng tôi sẽ không xem xét sử dụng nó cho sản xuất hoặc dữ liệu thực, đó không phải là những gì nó dùng cho.
Craig Ringer

4

Đối với những gì nó có giá trị, tôi đã cài đặt Ubuntu và nhiều gói và nó đã xung đột với nó.

Đối với tôi câu trả lời đúng là:

sudo -i -u postgres-xc
psql

2

Đây là người duy nhất đã sửa nó cho tôi:

createuser -s -U $USER

2
Điều này làm cho người dùng hiện tại trở thành một siêu người dùng hệ thống chứ không chỉ là một siêu người dùng hậu kỳ. Tôi có thể nói rằng đây nói chung sẽ là một ý tưởng tồi vì nó phá vỡ các chính sách bảo mật thông thường. Bạn nên sử dụng sudođể có được đặc quyền siêu người dùng tạm thời.
Sean Dawson

1

Trên hệ thống Ubuntu, tôi đã xóa PostgreSQL và cài đặt lại nó. Tất cả các cơ sở dữ liệu được khôi phục. Điều này giải quyết các vấn đề đối với tôi.

Lời khuyên - Hãy sao lưu cơ sở dữ liệu để ở bên an toàn hơn.


0

Tôi không nghĩ rằng sudo là cần thiết ở đây vì psql -l trả về một danh sách các cơ sở dữ liệu. Điều này cho tôi biết rằng initdb đã được chạy dưới người dùng hiện tại của người dùng, không phải dưới người dùng postgres.

Bạn chỉ có thể:

psql

Và tiếp tục hướng dẫn.

Tôi sẽ đề xuất các điểm chung của AH về việc tạo người dùng postgres và db vì nhiều ứng dụng có thể mong đợi điều này tồn tại.

Một lời giải thích ngắn gọn:

PostgreSQL sẽ không chạy với quyền truy cập quản trị vào hệ điều hành. Thay vào đó, nó chạy với một người dùng thông thường và để hỗ trợ xác thực ngang hàng (hỏi hệ điều hành đang cố gắng kết nối), nó tạo ra một người dùng và db với người dùng chạy quá trình khởi tạo. Trong trường hợp này, đó là người dùng bình thường của bạn.


xóa một vài sự khác biệt quan trọng trong postgres. Cảm ơn bạn.
imsrgadich

0

Tôi đã bị mắc kẹt về vấn đề này đã thực hiện brew services stop postgresqlngày hôm trước.
Ngày tiếp theo: brew services start postgresqlsẽ không hoạt động. Điều này là do như được hiển thị khi bạn cài đặt bằng homebrew. postgresql sử dụng launchd ... tải khi máy tính của bạn được bật.

độ phân giải:
brew services start postgresql
Khởi động lại máy tính của bạn.


0

Các \dulệnh trở lại:

Tên vai trò = postgres@implicit_files

postgres=# \password postgreslỗi trả về lệnh đó :

LRI: vai trò "postgres" không tồn tại.

Nhưng điều đó postgres=# \password postgres@implicit_fileschạy tốt.

Ngoài ra sau khi sudo -u postgres createuser -s postgresbiến thể đầu tiên cũng hoạt động.

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.