Rails 및 PostgreSQL : 역할 postgres가 존재하지 않습니다.


106

Mac OS Lion에 PostgreSQL을 설치했으며 Rails 앱에서 작업 중입니다. RVM을 사용하여 모든 것을 다른 Rails 앱과 별도로 유지합니다.

어떤 이유로 처음으로 db를 마이그레이션하려고 할 때 rake가 postgres 사용자를 찾을 수 없습니다. 오류가 발생합니다

 FATAL:  role "postgres" does not exist

pgAdmin이 있으므로 DB에 postgres 사용자 (사실 관리자 계정)가 있음을 분명히 알 수 있으므로 다른 작업을 수행해야할지 모르겠습니다.

PostgreSQL이 설치된 경로로 인해 PostgreSQL에 문제가있는 사람들에 대해 어딘가에서 읽었지만 db를 찾을 수 없다면 그렇게 멀리 가지 않았을 것이라고 생각합니다.


postgres동일한 오류 메시지로 이어질 수 있는 DB 사용자 (= 역할) 가 생성되지 않은 밀접하게 관련된 문제에 대해서는 다음 관련 질문을 참조하십시오. stackoverflow.com/questions/11919391/…
Erwin Brandstetter

답변:


12

이 메시지는 데이터베이스 사용자가 존재하지 않을 때 나타납니다. 여기 에서 설명서를 비교 하십시오 .
여러 로컬 데이터베이스 설명이 될 수 없습니다 . 역할은 클러스터 전체에서 유효합니다. 설명서를 다시 :

역할은 데이터베이스 클러스터 수준에서 정의되므로 클러스터의 모든 데이터베이스에서 유효합니다.

다른 데이터베이스 클러스터 에 있어야 합니다 . 이는 동일한 시스템에서 실행되는 다른 서버이며 다른 포트를 수신합니다. 또는 다른 컴퓨터에서 가능합니다.

메시지가 실제로 원격 서버에서 온 것일 수 있습니까?


그게 다였습니다. postgresql을 작동시키는 데 어려움을 겪었으므로 새로 설치 했으므로 여기에 몇 가지 인스턴스가 있어야합니다. 그래도 database.yml 파일의 포트를 변경했으며 모두 정상적으로 작동했습니다. 당신의 도움을 주셔서 감사합니다!
Adam

모든 이미지를 정리 한 후에도 작동하지 않습니다.- docker rmi $(docker images -q) --force. 하지만 문제는 volumes내가 추측에 있었다
prayagupd

267

사실 알 수없는 이유로 postgresql 역할이 생성되지 않았기 때문에 문제가 발생했습니다.

다음을 실행 해보십시오.

createuser -s -r postgres

역할은 PostgreSQL이 데이터베이스 권한을 유지 하는 방식입니다 . postgres 사용자에 대한 역할이 없으면 아무 것도 액세스 할 수 없습니다. createuser 명령은 CREATE USER, CREATE ROLE 등의 명령을 둘러싼 얇은 래퍼입니다 .


8
sudo su - postgres이 명령이 작동하기 전에 사용해야 했습니다. 감사!
Connor Leech 2013

2
내 설정이 어떻게 이루어 졌는지 모르겠지만 postgres 사용자 및 역할없이 만 postgresql을 만들었고 myUser를 유일한 사용자로 만들었지 만 myUser라는 데이터베이스가 존재하지 않는다는 구실로 나를 거부했습니다! 신체 상해의이 풀린 부분!
Jerome

@StuartNelson : 이것은 일반적인 문제에 대한 해결책 인 것 같습니다 ( 여기에서도 동일 ). 그러나 이것은 분명히이 질문에 대한 답이 아닙니다 . OP는 자신의 DB에 역할이 있음을 분명히 밝힙니다.
Erwin Brandstetter 2014 년

역할을 사용자와 결합하는 경우를 제외하고. 사용자는 존재했지만 역할은 없었습니다. 그는 역할이 아니라 사용자 가 존재 한다고 분명히 말합니다 .
Chris Sherlock

-r옵션은 함께 필요가 없습니다 -s옵션을 선택합니다. 수퍼 유저는 "역할 만들기"속성을 포함합니다.
Dennis

26

최근에 postgres를 설치 한 직후이 문제가 발생했습니다. 설치 직후에 오는 경우 기본 사용자 인 postgres가 누락되었을 수 있습니다. 이 경우 아래 명령을 사용하여 기본 사용자 postgres를 만들 수 있습니다.

createuser -s -U $ USER

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

필요한 데이터베이스 역할 이름과 암호를 입력하라는 메시지가 표시됩니다. 프로세스를 완료하면 아래 명령을 사용하여 postgres 콘솔에 로그인 할 수 있습니다.

psql -U 'your_database_name'

예 : psql -U postgres
여기에서 사용자를 생성하는 동안 암호가있는 경우 암호를 입력해야합니다.

도움이되기를 바랍니다 :)


22

나는 OSX 10.8을 사용했고 내가 시도한 모든 것이 나에게 FATAL: role "USER" does not exist. 많은 사람들이 여기에서 말했듯이 실행 createuser -s USER하지만 동일한 오류가 발생했습니다. 이것은 마침내 나를 위해 일했습니다.

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

createuser -s --username=postgres포스트 그레스로 (--username = POSTGRES 플래그)를 연결하여 유저 (-s 플래그)를 생성한다.

귀하의 질문에 대한 답변이 확인되었지만 PostgreSQL 9.2.4를 설치하려는 OSX 사용자를 위해이 답변을 추가하고 싶습니다.


2
처음 두 줄을 sudo su postgres.
6ft Dan

이것은 또한 위와 동일한 이름을 사용하도록 database.yml을 업데이트하는 것을 잊지 마세요, 우분투에 나를 위해 솔루션이었습니다
crobicha

10

Heroku의 POSTGRES.app을 처음 설치할 때 바로이 문제를 만났습니다. 어느 날 아침 시행 착오 후에 나는이 한 줄의 코드가 문제를 해결했다고 생각합니다. 앞에서 설명한 것처럼 이것은 postgresql이 처음 설정할 때 기본 역할이 없기 때문입니다. 그리고 우리는 그것을 설정해야합니다.

sovanlandy=# CREATE ROLE postgres LOGIN;

이 psql 명령을 사용하려면 각 psql 콘솔에 로그인해야합니다.

또한 이미 'postgre'역할을 생성했지만 여전히 권한 오류가 발생하면 다음 명령으로 변경해야합니다.

sovanlandy=# ALTER ROLE postgres LOGIN;

도움이 되었기를 바랍니다.


4

Heroku 문서에서; 시작하기 whit rails 4는 다음과 같이 말합니다.

사용자 이름 필드가있는 경우 database.yml에서 제거해야합니다. config / database.yml 파일에서 제거 : 사용자 이름 : myapp

그런 다음 "development :"에서 해당 줄을 삭제합니다. pg가 "myapp"역할에서 작동하는 데이터베이스에 알리지 않으면

이 줄은 myapp_development 데이터베이스가 myapp의 역할로 실행되어야 함을 rails에 알려줍니다. 데이터베이스에이 역할이 없을 가능성이 높으므로 제거합니다. remove 라인을 사용하면 Rails는 현재 컴퓨터에 로그인 한 사용자로 데이터베이스에 액세스하려고합니다.

또한 개발 용 데이터베이스를 만들어야합니다.

$createdb myapp_development

앱 이름에 "myapp"보충


2

여러 로컬 데이터베이스를 가질 수 있습니까? 당신 database.yml을 확인하고 원하는 pg db를 치고 있는지 확인하십시오. rails console확인하는 데 사용 합니다.


2

설치 절차 postgres는 기본 Postgres 역할과 연결된 라는 사용자 계정을 생성합니다 . Postgres를 사용하려면 해당 계정에 로그인하면됩니다. 그러나 명시 적으로 지정되지 않은 경우 rails 앱은 다른 역할, 특히 postgres 역할에서 생성되지 않을 수있는 유닉스 사용자 이름을 가진 역할을 찾습니다.

이를 극복하기 위해 먼저 설치 중에 생성 된 기본 역할 인 postgres로 전환하여 새 역할을 생성 할 수 있습니다.

sudo -i -u postgres

postgres 계정에 로그인 한 후 다음 명령으로 새 사용자를 만들 수 있습니다.

createuser --interactive

그러면 몇 가지 선택 사항이 표시되고 응답에 따라 올바른 Postgres 명령을 실행하여 사용자를 만듭니다.

역할 이름과 일부 권한을 전달하고 역할이 생성되면 DB를 마이그레이션 할 수 있습니다.


1

제 대답은 훨씬 더 간단했습니다. 방금 db 폴더로 가서 강제로 만들려고했지만 실제로는 자동으로 생성되는 id 열을 삭제했습니다. 또한 database.yml 파일 (config 폴더 아래)에서 USERNAME을 삭제했습니다.


1

Ubuntu 로컬 사용자 명령 프롬프트에서 루트 사용자가 아닌 경우 다음을 입력합니다.

sudo -u postgres createuser 사용자 이름

위의 사용자 이름은 "치명적 : 역할 '사용자 이름'이 존재하지 않습니다."메시지에 표시된 이름과 일치해야합니다.

사용자 이름에 대한 암호를 입력하십시오.

그런 다음 역할이 존재하지 않는다는 메시지를 생성 한 명령을 다시 입력하십시오.


0

저는 고무로 AWS EC2에 배포하는 방법에 대한 Ryan Bate의 자습서를 따르려고 시도한 후 여기에 왔습니다. 저에게 일어난 일은 다음과 같습니다. "

rails new blog -d postgresql

분명히 이것은 데이터베이스로 pg를 사용하여 새로운 앱을 생성하지만 데이터베이스는 아직 만들어지지 않았습니다. sqlite에서는 rake db : migrate 만 실행하지만 pg에서는 먼저 pg 데이터베이스를 만들어야합니다. Ryan은이 단계를 수행하지 않았습니다. 명령은 rake db:create:all이면 다음을 실행할 수 있습니다.rake db:migrate

두 번째 부분은 database.yml 파일을 변경하는 것입니다. 파일 생성시 사용자 이름의 기본값은 'appname'입니다. 그러나 postgresql 관리자에 대한 귀하의 역할은 다른 것입니다 (적어도 저에게는 그랬습니다). 나는 그것을 내 이름으로 변경했고 (역할 이름을 만드는 것에 대한 위의 조언을보세요) 잘 됐습니다.

도움이 되었기를 바랍니다.


0

Postgres를 설치하고 제거한 후 Os X Mavericks, Rails 4 및 Ruby 2에서 일관되게 작동하는 것 같습니다.

  1. database.yml 파일에서 기본 사용자 이름을 "admin"인 내 컴퓨터의 사용자 이름으로 변경합니다.

  2. 명령 줄에서 rake db : create : all을 실행합니다.

  3. 그런 다음 rake db : migrate를 실행합니다.

  4. Rails 서버를 실행하고 로컬 호스트를 확인하면 "Welcome aboard"라고 표시됩니다.


0

initdb -U postgres -D /path/to/data기본값은 현재 사용자로 설정되어 있으므로 postgres 사용자로 실행 하거나 실행 하여이 문제를 해결할 수 있습니다 . GL!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.