PostgreSQL 오류 : 치명적 : "username"역할이 없습니다.


732

PostgreSQL 9.1을 설정하고 있습니다. PostgreSQL로는 아무것도 할 수 없습니다 : ca n't createdb, ca n't createuser; 모든 작업은 오류 메시지를 반환

Fatal: role h9uest does not exist

h9uest내 계정 이름 sudo apt-get install이며이 계정으로 PostgreSQL 9.1을 사용합니다. 계정에
대해 유사한 오류가 지속 root됩니다.


1
이후에 실행될 수 있으므로 dba.stackexchange.com/questions/57723/…FATAL: role "user" is not permitted to log in확인하십시오 .
kqw

19
나는이 질문에 대답 여기 . 이 튜토리얼도 " 우분투 리눅스 용 Postgres 설치 방법 "을 읽어보십시오 .
ruzenhack

@Ruzenhack 그 튜토리얼 링크는 내가 필요한 것입니다! 매우 명확하고 단순함
dwanderson

4
psql -h localhost -U postgres
Metin Atalay

오류가 발생 role doesn't exist하면 오류를 can't create role, it already exists확인하십시오. stackoverflow.com/a/56658832/1689770
Jonathan

답변:


774

사용하는 운영 체제 사용자 postgres 데이터베이스를 생성 - 한 당신은 설정하지 않은으로 데이터베이스 에 필요한 권한을 가진 역할을하는 (같은 이름의 운영 체제 사용자에 해당하는 h9uest사용자의 경우) :

sudo -u postgres -i

여기 또는 여기 권장 됩니다 .

그런 다음 다시 시도하십시오. exit시스템 사용자로 작동하면 입력하십시오 postgres.

또는 하나의 명령을 실행 createuser으로 postgressudo같이, DREES에 의해 입증 다른 대답한다.

요점은 동일한 이름의 데이터베이스 역할과 일치하는 운영 체제 사용자를 사용하여 ident인증을 통해 액세스 권한을 부여하는 것 입니다. postgres데이터베이스 클러스터를 초기화 한 기본 운영 체제 사용자입니다. 매뉴얼 :

데이터베이스 시스템을 부트 스트랩하기 위해 새로 초기화 된 시스템에는 항상 하나의 사전 정의 된 역할이 포함됩니다. 이 역할은 항상“수퍼 유저”이며 기본적으로 (실행시 변경되지 않는 한 initdb) 데이터베이스 클러스터를 초기화 한 운영 체제 사용자와 이름이 동일합니다. 일반적으로이 역할의 이름은 postgres입니다. 더 많은 역할을 만들려면 먼저이 초기 역할로 연결해야합니다.

비표준 사용자 이름 또는 운영 체제 사용자가없는 이상한 설정에 대해 들었습니다. 거기에서 전략을 조정해야합니다.

매뉴얼에서 데이터베이스 역할클라이언트 인증 에 대해 읽으십시오 .


1
sudo etcpostgres 사용자 로 실행할 수 없습니다 ... 프로그램을 설치하는 방법? 이 S2geometry 설치 문제를 참조하십시오 .
Peter Krauss

구성에 따라 간단하게 필요할 수 있습니다 su postgres.
Fabien Snauwaert

1
sudo -u postgres작동하는 동안 sudo -u postgres -i작동 하지 않습니다 ! 뭐라고합니까 -i플래그는 무엇입니까?
파 섹터

1
@parsecer : 대화식 쉘이 시작 su되지만 sudo 권한을 기반으로 시작 됩니다. 참조하십시오 man sudo.
Erwin Brandstetter

284

다른 많은 사람들의 솔루션을 시도했지만 성공하지 못하면이 답변이 마침내 도움이되었습니다.

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

요컨대, 달리기

sudo -u postgres createuser owning_user

owning_user (이 경우 h9uest)라는 이름의 역할을 만듭니다. 그런 rake db:create다음 Postgres 환경에 입력하지 않고도 설정 한 계정 이름으로 터미널에서 실행할 수 있습니다.


29
이 후에 "권한 부족"오류가 발생하면 위 명령에 -s 플래그를 추가 할 수 있습니다. 그러면 새 사용자가 슈퍼 유저로 생성됩니다. 이를 수행하기로 결정한 경우 보안에 미치는 영향에 유의하십시오.
sarink

1
"권한이 충분하지 않습니다"라는 메시지가 표시되지만 이제 오류가 발생합니다. "username"롤이 이미 있습니다.
Wylliam Judd

4
@ConnorLeech 'postgres'를 PG 수퍼 유저 이름으로 바꿀 수 있습니다. 제 경우에는 제 이름이었습니다.
myfashionhub

1
나도 사용해야했고 사용 -s하지 않아도됩니다 sudo -u postgres( createuser new_user잘 작동했습니다)
Meekohi

2
psql: FATAL: role "jonny" does not exist좋아, sudo -u postgres -s createuser jonny그럼 왜 createuser: creation of new role failed: ERROR: role "jonny" already exists
Jonathan

134
sudo su - postgres

psql template1

"수퍼 유저"권한을 가진 pgsql에서 역할 생성

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

그런 다음 사용자를 만드십시오

CREATE USER username; 
eg. CREATE USER demo;

사용자에게 권한 할당

GRANT ROOT TO username;

그런 다음 해당 사용자 로그인을 활성화 psql template1하여 일반 $터미널 에서 다음 과 같이 실행할 수 있습니다 .

ALTER ROLE username WITH LOGIN;

4
방금 PostgreSQL 9.4.4를 새로 설치했으며 다음을 사용하여 새로운 수퍼 유저를 만들 수있었습니다. CREATE ROLE username superuser createdb login; 세 단계를 모두 결합한 ...
iPad Guy

25
나에게 GROT ROOT; 오류 : "root"역할이 없습니다
Shacker

6
더 간단한 버전 : sudo -u postgres createuser --superuser $USER; sudo -u postgres createdb $USER
Zach Estela 3

2
@shacker#GRANT postgres TO username
7kemZmani

루트를 사용하여 서버를 시작한 다음```psql -U postgres -h 127.0.0.1-명령 "슈퍼 유저 비밀번호를 가진 사용자 생성 postgresondocker 'postgresondocker';" && \ createdb -O postgresondocker postgresondocker`` pg_ident에 루트를 추가하면 루트를 사용할 수 있습니까?
Shivangi Singh

85

postgres를 사용하여 설치해도 apt-get사용자 역할이나 데이터베이스가 생성되지 않습니다.

개인 사용자 계정에 대한 수퍼 유저 역할 및 데이터베이스를 만들려면

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


1
다음과 같이 두 번째 부분을 실행해야했습니다.sudo -u postgres createdb $(whoami)
SanD

2
@SanD -s첫 번째 명령 의 플래그를 통해 슈퍼 유저로 자신의 사용자 계정을 생성 한 경우 데이터베이스를 직접 생성 할 수 있습니다. 당신은 실행할 필요가 없습니다 것 createdb같은 postgres.
마일스 에릭슨

2
좋은 답변입니다! 디버깅 시간을 절약했습니다 !!
Aminu Kano

79

이것은 나를 위해 작동합니다 :

psql -h localhost -U postgres

위 사용자의 비밀번호를 추가하십시오.
Chaudhry Waqas

1
@Vincent PostgreSQL 설치 후 비밀번호가 변경되지 않은 경우 기본적으로 비밀번호는 postgresLinux 및 Windows에서 테스트됩니다.
silvioprog 2016 년

1
role postgres does not exist
Jacob Schneider

15

작업 방법,

  1. vi /etc/postgresql/9.3/main/pg_hba.conf
  2. local all postgres peer 여기에 동료신뢰로 바꾸십시오
  3. 재시작, sudo service postgresql restart

  4. 이제 시도해보십시오 psql -U postgres


1
trust방법은 완전히 안전한 환경에서만 권장되는 것이 분명 합니다. 신뢰할 수없는 연결에서 액세스 할 수는 있지만 DB 클러스터를 노출시키지 마십시오 .
Erwin Brandstetter

이것은 좋은
horoyoi o

확인 : postgresql 서비스가 시작되지 않은 경우 파일에 약간의 오류가있을 수 있습니다.pg_hba.conf
걷습니다.

11

Postgres 9.5 버전의 경우 다음 쉼표를 사용하십시오.

psql -h localhost -U postgres

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


11
psql postgres

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

4
psql postgres결과 :psql: FATAL: role "root" does not exist
TomSawyer

2
psql postgres -U postgres? 가지고있는 사용자 (-U)에 따라 다릅니다.
Meadowlark Bradsher

감사합니다! postgres 암호를 모르기 때문에 루트로 postgresql을 백업하는 방법에 어려움을 겪었습니다
Dika

7

루트 사용자 프롬프트가 아닌 로컬 사용자 프롬프트에서 다음을 입력하십시오.

sudo -u postgres createuser <local username>

그런 다음 로컬 사용자의 비밀번호를 입력하십시오.

그런 다음 "role 'username'이 없습니다."를 생성 한 이전 명령을 입력하십시오.

위의 단계는 나를 위해 문제를 해결했습니다. 그렇지 않은 경우 위 단계에 대한 터미널 메시지를 보내십시오.



3

내 경우에는 DB 클러스터를 수동으로 생성하여 해결했습니다.

어떤 이유로 postgres를 설치할 때 "초기 DB"가 생성되지 않았습니다. 집행 initdb은 나를 위해 속임수를 썼다.

이 솔루션은 PostgreSQL Wiki-첫 번째 단계 에서 제공됩니다 .

initdb

일반적으로 OS에 postgres를 설치하면 "초기 DB"가 생성되고 postgres 서버 데몬이 실행됩니다. 그렇지 않은 경우 initdb실행 해야합니다.


2

들어 윈도우 사용자 :psql -U postgres

그러면 PostgreSQL에 대한 명령 줄 인터페이스가 표시되어야합니다. postgres=#


0

다음 단계를 수행하면 효과가 있습니다.

  1. 운영 msfconsole
  2. db_console 유형
  3. 어떤 정보는 당신에게 당신이 말한 정보를 선택했다는 것을 보여줄 것입니다 : db_connect user:pass@host:port.../database죄송합니다, 기억이 안납니다. 그러나 이것과 같습니다. 그런 다음 사용자와 암호, 그리고 호스트와 데이터베이스를 database.yml직장에 포함 된 정보로 교체하십시오. :/usr/share/metasploit-framework/config
  4. 당신은 볼 것이다. 백그라운드에서 모델 캐시를 재구성합니다.
  5. 업데이트 후 터미널 및 점심 msfconsole을 다시 시작한 후 apt-get update && apt-get upgrade를 입력 msfconsole: msf>db_status하면 입력하여 연결되어 있는지 확인할 수 있습니다 .

0

--no-owner --no-privileges플래그로 덤프 및 복원

예 :

덤프- pg_dump --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname > /tmp/full.dump

복원 - pg_restore --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname /tmp/full.dump

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