Rails và PostgreSQL: Postgres vai trò không tồn tại


106

Tôi đã cài đặt PostgreSQL trên Mac OS Lion của mình và đang làm việc trên một ứng dụng rails. Tôi sử dụng RVM để giữ mọi thứ tách biệt với các ứng dụng Rails khác của tôi.

Vì một số lý do khi tôi cố gắng di chuyển db lần đầu tiên rake không thể tìm thấy người dùng postgres. Tôi nhận được lỗi

 FATAL:  role "postgres" does not exist

Tôi có pgAdmin nên tôi có thể thấy rõ ràng có một người dùng postgres trong DB - thực tế là tài khoản quản trị - vì vậy tôi không chắc phải làm gì khác.

Tôi đã đọc ở đâu đó về việc mọi người gặp vấn đề với PostgreSQL vì đường dẫn mà nó được cài đặt, nhưng sau đó tôi không nghĩ rằng tôi sẽ đi xa đến vậy nếu nó không thể tìm thấy db.


Đối với các vấn đề có liên quan chặt chẽ mà người dùng DB (= vai trò) postgresđã không được tạo ra, có thể dẫn đến các thông báo lỗi tương tự, xem câu hỏi này liên quan: stackoverflow.com/questions/11919391/...
Erwin Brandstetter

Câu trả lời:


12

Thông báo này bật lên, khi người dùng cơ sở dữ liệu không tồn tại. So sánh hướng dẫn sử dụng ở đây .
Nhiều cơ sở dữ liệu cục bộ không thể là lời giải thích. Các vai trò hợp lệ trên toàn bộ cụm. Các lần nữa thủ công :

Lưu ý rằng các vai trò được xác định ở cấp độ cụm cơ sở dữ liệu và do đó có giá trị trong tất cả các cơ sở dữ liệu trong cụm.

Bạn phải kết thúc trong một cụm cơ sở dữ liệu khác . Đó sẽ là một máy chủ khác chạy trên cùng một máy, lắng nghe một cổng khác. Hoặc, nhiều khả năng hơn, trên một máy khác.

Có thể là tin nhắn đến, trên thực tế, từ máy chủ từ xa?


Đó là nó - tôi đã gặp khó khăn trong việc đưa postgresql vào thời gian làm việc vì vậy tôi đã thực hiện một cài đặt mới, vì vậy tôi phải có một vài phiên bản ở đây bây giờ. Tuy nhiên, đã thay đổi cổng trong tệp database.yml và tất cả đều hoạt động tốt. Cảm ơn bạn đã giúp đỡ!
Adam

không hoạt động ngay cả sau khi xóa tất cả hình ảnh - docker rmi $(docker images -q) --force. nhưng volumestôi đoán là có vấn đề
Prayagupd 24/10/19

267

Trên thực tế, vì một số lý do không xác định, tôi thấy vấn đề thực sự là do vai trò postgresql chưa được tạo.

Thử chạy:

createuser -s -r postgres

Lưu ý rằng các vai trò là cách PostgreSQL duy trì quyền cơ sở dữ liệu . Nếu không có vai trò nào cho người dùng postgres, thì nó không thể truy cập bất cứ thứ gì. Lệnh createuser là một lớp bao bọc mỏng xung quanh các lệnh CREATE USER, CREATE ROLE, v.v.


8
Tôi phải sử dụng sudo su - postgrestrước khi lệnh này hoạt động với tôi. Cảm ơn!
Connor Leech

2
Không biết việc thiết lập của tôi ra sao nhưng tôi đã tạo postgresql mà không có người dùng và vai trò postgres, myUser với tư cách là người dùng duy nhất, nhưng từ chối cho tôi tham gia với lý do rằng cơ sở dữ liệu có tên myUser không tồn tại! phần này đã được làm sáng tỏ của tình trạng lộn xộn!
Jerome

@StuartNelson: Đây dường như là giải pháp cho một vấn đề phổ biến ( tương tự ở đây ). Nhưng rõ ràng nó không phải là câu trả lời cho câu hỏi này. OP tuyên bố rõ ràng rằng vai trò tồn tại trong DB của anh ấy.
Erwin Brandstetter

Ngoại trừ việc bạn đang ghép các vai trò với người dùng. Người dùng tồn tại, vai trò thì không - anh ấy nói rõ ràng rằng người dùng tồn tại, không phải vai trò.
Chris Sherlock

Các -rtùy chọn là không cần thiết với các -stùy chọn. Superuser bao gồm thuộc tính "Tạo vai trò".
Dennis

26

Gần đây, tôi gặp sự cố này ngay lập tức sau khi cài đặt postgres. Nếu nó xuất hiện ngay sau khi cài đặt, bạn có thể thiếu người dùng mặc định, postgres. Trong trường hợp đó, bạn có thể tạo postgres người dùng mặc định bằng lệnh dưới đây.

createuser -s -U $ USER

Ex: createuser -s -U $USER
enter your required role name: postgres
enter password for your the user: 

Nó sẽ nhắc bạn nhập tên vai trò cơ sở dữ liệu và mật khẩu bắt buộc Sau khi hoàn tất quá trình, bạn có thể đăng nhập vào bảng điều khiển postgres bằng lệnh dưới đây

psql -U 'your_database_name'

Ví dụ: psql -U postgres
Ở đây, Bạn cần nhập mật khẩu nếu bạn đã cung cấp, trong khi tạo người dùng.

Hy vọng nó giúp :)


22

Tôi đã sử dụng OSX 10.8 và mọi thứ tôi đã thử sẽ mang lại cho tôi FATAL: role "USER" does not exist. Giống như nhiều người đã nói ở đây, hãy chạy createuser -s USER, nhưng điều đó đã cho tôi cùng một lỗi. Điều này cuối cùng đã làm việc cho tôi:

$ sudo su
# su postgres
# createuser -s --username=postgres MYUSERNAME

Các createuser -s --username=postgrestạo ra một superuser (cờ -s) bằng cách kết nối như postgres (--username = postgres cờ).

Tôi thấy rằng câu hỏi của bạn đã được trả lời, nhưng tôi muốn thêm câu trả lời này cho những người sử dụng OSX đang cố gắng cài đặt PostgreSQL 9.2.4.


2
Bạn có thể rút ngắn hai dòng đầu tiên thành sudo su postgres.
6ft Dan

Đây cũng là giải pháp cho tôi trên ubuntu, đừng quên cập nhật database.yml của bạn để sử dụng tên người dùng tương tự như trên
crobicha

10

Tôi đã gặp sự cố này ngay khi cài đặt ứng dụng POSTGRES.app của Heroku lần đầu tiên. Sau một buổi sáng thử và gặp lỗi, tôi nghĩ rằng một dòng mã này đã giải quyết được vấn đề. Như đã mô tả trước đó, điều này là do postgresql không có vai trò mặc định trong lần đầu tiên nó được thiết lập. Và chúng ta cần thiết lập điều đó.

sovanlandy=# CREATE ROLE postgres LOGIN;

Bạn phải đăng nhập vào bảng điều khiển psql tương ứng của mình để sử dụng lệnh psql này.

Cũng lưu ý rằng, nếu bạn đã tạo vai trò 'postgre' nhưng vẫn gặp lỗi quyền, bạn cần thay đổi bằng lệnh:

sovanlandy=# ALTER ROLE postgres LOGIN;

Hy vọng nó giúp!


4

Trong tài liệu về Heroku; Bắt đầu whit rails 4, họ nói:

Bạn cũng sẽ cần xóa trường tên người dùng trong database.yml của mình nếu có trường như vậy: Trong tệp config / database.yml, hãy xóa: username: myapp

Sau đó, bạn chỉ cần xóa dòng đó trong "development:", nếu bạn không pg cho cơ sở dữ liệu hoạt động dưới vai trò "myapp"

Dòng này cho rails biết rằng cơ sở dữ liệu myapp_development nên được chạy dưới một vai trò của myapp. Vì bạn có thể không có vai trò này trong cơ sở dữ liệu của mình, chúng tôi sẽ xóa nó. Với dòng remove Rails sẽ cố gắng truy cập cơ sở dữ liệu với tư cách là người dùng hiện đang đăng nhập vào máy tính.

Cũng nên nhớ tạo cơ sở dữ liệu để phát triển:

$createdb myapp_development

Bổ sung "myapp" cho tên ứng dụng của bạn


2

Bạn có thể có nhiều cơ sở dữ liệu cục bộ không? Kiểm tra của bạn database.ymlvà đảm bảo rằng bạn đang đạt pg db mà bạn muốn. Sử dụng rails consoleđể xác nhận.


2

Quy trình cài đặt tạo một tài khoản người dùng được gọi là tài khoản postgresđược liên kết với vai trò Postgres mặc định. Để sử dụng Postgres, bạn có thể đăng nhập vào tài khoản đó. Nhưng nếu không được chỉ định rõ ràng, ứng dụng rails sẽ tìm kiếm một vai trò khác, đặc biệt hơn là vai trò có tên người dùng unix của bạn mà có thể không được tạo trong các vai trò postgres.

Để khắc phục điều đó, bạn có thể tạo một vai trò mới, trước tiên bằng cách chuyển sang các postgres vai trò mặc định đã được tạo trong quá trình cài đặt

sudo -i -u postgres

Sau khi đăng nhập vào tài khoản postgres, bạn có thể tạo người dùng mới bằng lệnh:

createuser --interactive

Điều này sẽ nhắc bạn với một số lựa chọn và dựa trên phản hồi của bạn, thực hiện các lệnh Postgres chính xác để tạo người dùng.

Chuyển tên vai trò và một số quyền và vai trò được tạo, sau đó bạn có thể di chuyển db của mình


1

Câu trả lời của tôi đơn giản hơn nhiều. Chỉ cần đi đến thư mục db và xóa cột id mà tôi đã cố gắng tạo một cách cưỡng bức, nhưng thực sự nó được tạo tự động. Tôi cũng đã xóa USERNAME trong tệp database.yml (trong thư mục cấu hình).


1

Trong dấu nhắc lệnh người dùng cục bộ Ubuntu, nhưng không phải người dùng root, hãy nhập

sudo -u postgres tạo tên người dùng

tên người dùng ở trên phải khớp với tên được chỉ ra trong thông báo "FATAL: role 'username' không tồn tại."

Nhập mật khẩu cho tên người dùng.

Sau đó nhập lại lệnh mà vai trò đã tạo không tồn tại thông báo.


0

Tôi đã kết thúc ở đây sau khi cố gắng làm theo hướng dẫn của Ryan Bate về việc triển khai lên AWS EC2 bằng cao su. Đây là những gì đã xảy ra với tôi: Chúng tôi đã tạo một ứng dụng mới bằng cách sử dụng "

rails new blog -d postgresql

Obviosuly điều này tạo ra một ứng dụng mới với pg làm cơ sở dữ liệu, nhưng cơ sở dữ liệu vẫn chưa được tạo. Với sqlite, bạn chỉ cần chạy rake db: migrate, tuy nhiên với pg, bạn cần tạo cơ sở dữ liệu pg trước. Ryan đã không làm bước này. Lệnh là rake db:create:all, sau đó chúng ta có thể chạyrake db:migrate

Phần thứ hai là thay đổi tệp database.yml. Mặc định cho tên người dùng khi tệp được tạo là 'tên ứng dụng'. Tuy nhiên, rất có thể vai trò của bạn đối với quản trị viên postgresql là một cái gì đó khác (ít nhất là đối với tôi). Tôi đã đổi nó thành tên của mình (xem lời khuyên ở trên về việc tạo tên vai trò) và tôi đã sẵn sàng.

Hi vọng điêu nay co ich.


0

Sau một loạt cài đặt và gỡ cài đặt Postgres, đây là những gì hiện có vẻ hoạt động nhất quán đối với tôi với Os X Mavericks, Rails 4 và Ruby 2.

  1. Trong tệp database.yml, tôi thay đổi tên người dùng mặc định thành tên người dùng máy tính của mình, đối với tôi chỉ là "quản trị viên".

  2. Trong dòng lệnh, tôi chạy rake db: create: all

  3. Sau đó, tôi chạy rake db: migrate

  4. Khi tôi chạy máy chủ rails và kiểm tra máy chủ cục bộ, nó nói "Chào mừng bạn lên tàu".


0

Bạn có thể giải quyết vấn đề này bằng cách chạy initdb -U postgres -D /path/to/datahoặc chạy nó dưới dạng postgres của người dùng, vì nó được đặt mặc định cho người dùng hiện tại. GL!

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.