psql : 치명적 : 역할 "postgres"가 존재하지 않습니다


404

저는 postgres 초보자입니다.

Mac 용 postgres.app를 설치했습니다. psql 명령으로 놀고 있었고 우연히 postgres 데이터베이스를 삭제했습니다. 나는 그 안에 무엇이 있는지 모른다.

나는 현재 튜토리얼에서 일하고있다 : http://www.rosslaird.com/blog/building-a-project-with-mezzanine/

그리고 나는 붙어있다 sudo -u postgres psql postgres

에러 메시지: psql: FATAL: role "postgres" does not exist

어떤 psql

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

이것이 인쇄되는 것입니다 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)

그래서 내가 취해야 할 단계는 무엇입니까? psql과 관련된 모든 것을 삭제하고 다시 설치 하시겠습니까?

도와 주셔서 감사합니다!


1
컴퓨터를 다시 시작합니다. Launchd from brew services start postresql이 실행되도록합니다.
Michael Dimmitt 2016 년

답변:


410

참고 : homebrew를 사용하여 postgres를 설치 한 경우 아래 @ user3402754의 설명을 참조하십시오.

오류 메시지가 않습니다 하지 누락 된 데이터베이스에 대해 이야기, 그것은 누락 된 역할에 대해 이야기합니다. 나중에 로그인 프로세스에서 누락 된 데이터베이스를 우연히 발견 할 수도 있습니다.

그러나 첫 번째 단계는 누락 된 역할을 확인하는 것 psql입니다. 명령 내에서 출력은 무엇입니까 \du? 내 우분투 시스템에서 관련 줄은 다음과 같습니다.

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

에 역할이 하나 이상 없으면 superuser문제가있는 것입니다 :-)

하나 있으면 로그인 할 수 있습니다. 그리고 \l명령 의 출력을 살펴보십시오 . 및 데이터베이스 user에 대한 권한 은 수퍼 유저의 Ubuntu 시스템에서와 동일합니다 . 따라서 설정 이 수퍼 유저로 간단하게 사용된다고 생각합니다 . 따라서이 명령을 사용하여 로그인 할 수 있습니다.template0template1postgresuser

sudo -u user psql user

user실제로 DB 수퍼 유저 인 경우 다른 DB 수퍼 유저와 개인용 빈 데이터베이스를 만들 수 있습니다.

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

그러나 postgres.app 설정이 그렇게하지 않는 것 같아서도 안됩니다. 튜토리얼을 간단하게 조정하십시오.


10
나를 위해, 사용자가 생성되지 않았습니다-대신 CREATE USER postgres WITH SUPERUSER PASSWORD 'password'; postgres v10을 사용하고 있습니다.
arcseldon

229
Postgres를 설치 한 경우 터미널에서 homebrew실행해야합니다./usr/local/opt/postgres/bin/createuser -s postgres
user3402754

7
나는 실행했다/usr/local/opt/postgresql/bin/createuser -s postgres
user1807782을

1
@ user1807782 당신은 내 하루를 저장; 나는 당신이 대답으로 광고해야한다고 생각합니다.
tolga

1
특정 버전의 postgres를 사용하는 경우 경로에 버전을 포함해야합니다./usr/local/opt/postgresql@11/bin/createuser -s postgres
Digitrance

264

열쇠는 "Mac 용 postgres.app를 설치했습니다."입니다. 이 응용 프로그램 은 역할 이름이 로그인 (짧은) 이름과 동일한 데이터베이스 수퍼 유저로 로컬 PostgreSQL 설치를 설정합니다.

Postgres.app는 처음 시작될 때 $ USER 데이터베이스를 생성합니다. $ USER 데이터베이스는 아무것도 지정하지 않은 경우 psql의 기본 데이터베이스입니다. 기본 사용자는 $ USER이며 암호는 없습니다.

일부 스크립트 (예 : pgdumpLinux 시스템에서 생성 된 데이터베이스 백업 ) 및 자습서에서는 수퍼 유저의 전통적인 역할 이름이이라고 가정합니다 postgres.

로컬 설치를 좀 더 전통적인 것처럼 보이게하고 한 번만 수행하면 이러한 문제를 피할 수 있습니다.

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

이는 그 것 FATAL : 역할 "포스트 그레스"존재하지 않는 멀리 이동합니다.


119
Homebrew의 postgres를 사용하는 경우 /usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres버전 9.2.4의 경우 분명히 필요합니다.
Roger Lipscombe 2014 년

1
postgres.app 9.3의 경우 디렉토리를 다시 정렬 한 것으로 보입니다. 나는 /Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres를 시도했지만, 같은 오류 메시지가 생성되었습니다. "createuser : 데이터베이스 postgres에 연결할 수 없습니다 : 치명적 :"postgres "역할이 없습니다. "
Michael Coxon

7
/Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres나를 위해 올바르게 달렸다.
cjspurgeon

9
@RogerLipscombe brew link postgresql설치 후 실행 하면 전체 경로를 추가 할 필요가 없습니다 createuser. 간단한 createuser -s postgres작업도 훌륭합니다.
AlessioX

2
createuser -s postgres나를 위해 일했다. Homebrew와 함께 postgres를 설치했습니다
biniam

228

MAC의 경우 :

  1. Homebrew 설치
  2. brew install postgres
  3. initdb /usr/local/var/postgres
  4. /usr/local/Cellar/postgresql/<version>/bin/createuser -s postgres또는 /usr/local/opt/postgres/bin/createuser -s postgres최신 버전 만 사용합니다.
  5. postgres 서버를 수동으로 시작하십시오 : pg_ctl -D /usr/local/var/postgres start

시작시 서버를 시작하려면

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

이제 psql -U postgres -h localhostGUI 용 PgAdmin을 사용 하여 설정, 로그인 또는 사용합니다.

기본적으로 사용자 postgres는 로그인 비밀번호가 없습니다.

https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7 와 같은 기사를 더 보려면이 사이트를 확인하십시오.


3
최신 brew 설치를 사용하면 brew services start postgresqlpostgres를 시작할 수 있습니다
Automatico

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

이 최고의 답변입니다
알레한드로 파블로 Tkachuk

39
createuser postgres --interactive

또는 다음과 같이 슈퍼 유저 postgresl을 만드십시오.

createuser postgres -s


이 답변은 pgadmin이 postgres 사용자를 계속 요청하고 postgres 역할을 시작할 때 유용합니다.이 명령을 사용하여 자동 생성 된 pw를 pgadmin에 추가하고 문제를 해결했습니다!
주제별

이것은 나를 위해 작동합니다 .. 그러나이 방법 : "사용자 postgres 만들기"
Roberto Rodriguez

31

이는 initdb사용자 이름을 또는로 postgres지정하지 않고 ID가 아닌 사용자로 실행할 때 발생합니다 .postgres--username=postgres-U postgres

그런 다음 initdb를 실행하는 데 사용한 시스템 사용자 계정으로 데이터베이스 클러스터가 생성되고 수퍼 유저 권한이 부여됩니다.

이 문제를 해결하려면 Postgres와 함께 제공 되는 유틸리티를 사용하여 postgres옵션으로 이름이 지정된 새 사용자를 작성하십시오 . 이 유틸리티는 Postgres 디렉토리에 있습니다. 예 :--superusercreateuserbin

createuser --superuser postgres

사용자 정의 호스트 이름 또는 포트가있는 경우 적절한 옵션설정하십시오 .

initdb에 의해 생성 된 다른 사용자 계정을 삭제하는 것을 잊지 마십시오.


2
이것이 가장 유익한 답변입니다.
MyWrathAcademia

17

나 에게이 코드는 다음과 같이 작동했습니다.

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

그것은 여기에서왔다 : http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4


저에게도 효과가 있습니다! 내 베이컨을 구했어
Dave Munger

1
내가 역할을 얻을 "나"존재하지 않는
SuperUberDuper

이 새로운 posgres 사용자가 암호를 가지고 있지 않다는 것을 의미합니까?
olaoluwa_98

16

나는 설정을 해제해야했습니다 $PGUSER.

$ unset PGUSER
$ createuser -s postgres

1
오, 마침내 문제가 생겼습니다. 사용자 postgres로 사용자 postgres를 만들려고합니다
Taras Matsyk

14

먼저 사용자를 작성해야합니다.

sudo -u postgres createuser --superuser $USER

데이터베이스를 생성 한 후 :

sudo -u postgres createdb $USER

$USER시스템 사용자 이름으로 변경하십시오 .

여기 에서 완전한 솔루션을 볼 수 있습니다 .


8

커맨드 라인에서 이것을 실행하면 문제가 해결됩니다.

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


1
이것이 나를 위해 일한 유일한 것입니다. 감사합니다!
Herb Meehan

4

postgres데이터베이스를 삭제하는 것은 중요하지 않습니다. 이 데이터베이스는 처음에는 비어 있고 그 목적은 postgres사용자가 필요할 때 연결하기 위해 일종의 "홈"을 갖기위한 것입니다.

여전히 SQL 명령을 사용하여 다시 만들 수 있습니다 CREATE DATABASE postgres;

질문에 언급 된 튜토리얼 postgres.app은 염두에 두지 않았습니다 . 일반적으로 PostgreSQL for Unix와는 달리 일반 사용자와 다른 권한을 가진 postgres.app전용 postgres사용자가 실행하는 서비스가 아니라 일반 응용 프로그램처럼 보이려고합니다 . postgres.app자신의 계정으로 실행 및 관리됩니다.

그래서 그 대신이 명령의 : sudo -u postgres psql -U postgres: 그것은 단지 문제에 postgres.app의 정신에 더 많은 것 psql때문에, 자동으로 사용자의 이름과 일치하는 데이터베이스에 연결하고, 수퍼 유저 될 일이 같은 이름의 DB 계정 권한에 따라 모든 것을 할 수 있습니다.


괜찮아. 그러나 ERROR: cannot drop the currently open database사용자 DB를 삭제하려고 할 때 왜 오류가 발생 합니까? 이 postgres.app를 사용하는 것이 좋지 않습니까?
user805981

연결되어있는 동안에는 DB를 삭제할 수 없습니다. 어쨌든 왜 삭제 하시겠습니까? 귀하의 편의를 위해 여기 있습니다.
Daniel Vérité

나는 단지 내가 할 수 있는지보고 싶었다. psql 및 postgres.app를 부팅 할 때 올바른 기본 데이터베이스와 같습니다. 이제 액세스 권한은 어떻습니까? 더 이상 설정할 수 없습니까? 그 template0을보고 template1를 액세스 권한이
user805981

@ user805981 Postgres.app은 테스트 및 개발 용입니다. Ruby on Rails로 개발하는 Mac 사용자가 기본 SQLite 대신 PostgreSQL로 쉽게 테스트 할 수 있도록 설계된 Heroku의 PostgreSQL 패키지입니다. Rails는 SQLite로 테스트하고 PostgreSQL에 배포하여 모든 종류의 문제를 유발하는 경향이 있으므로 Heroku는 PostgreSQL에서도 쉽게 테스트 할 수 있도록 노력했습니다. Postgres.app테스트에는 적합하지만 프로덕션 또는 실제 데이터에 사용하는 것은 고려하지 않을 것입니다. 그것이 목적이 아닙니다.
Craig Ringer

4

그것이 가치있는 것을 위해, 나는 우분투와 많은 패키지가 설치되어 있으며 그것과 충돌했습니다.

나에게 올바른 대답은 다음과 같습니다.

sudo -i -u postgres-xc
psql

2

이것은 나를 위해 고친 유일한 것입니다.

createuser -s -U $USER

2
이것은 현재 사용자를 postgres 수퍼 유저가 아닌 시스템 수퍼 유저로 만듭니다. 나는 이것이 일반적인 보안 정책을 우회하기 때문에 일반적으로 나쁜 생각이라고 말하고 싶습니다. sudo임시 수퍼 유저 권한을 얻으려면 사용자 가 있어야합니다 .
Sean Dawson

1

우분투 시스템에서 PostgreSQL을 제거하고 다시 설치했습니다. 모든 데이터베이스가 복원됩니다. 이것은 나를 위해 문제를 해결했습니다.

조언-안전한 백업을 위해 데이터베이스 백업을 수행하십시오.


0

psql -l이 데이터베이스 목록을 반환하기 때문에 sudo가 필요하다고 생각하지 않습니다. 이것은 initdb가 postgres 사용자가 아닌 사용자의 현재 사용자로 실행되었음을 나타냅니다.

당신은 단지 할 수 있습니다 :

psql

그리고 튜토리얼을 계속하십시오.

많은 응용 프로그램에서이를 기대할 수 있기 때문에 postgres 사용자 및 db를 만드는 AH의 일반적인 요점을 제안합니다.

간단한 설명 :

PostgreSQL은 운영 체제에 대한 관리 액세스 권한으로 실행되지 않습니다. 대신 일반 사용자와 함께 실행되며 피어 인증을 지원하기 위해 (연결하려는 OS에 요청) 초기화 프로세스를 실행하는 사용자와 함께 사용자와 db를 만듭니다. 이 경우 일반 사용자였습니다.


postgres에서 중요한 차이점이 거의 없습니다. 감사합니다.
imsrgadich

0

나는 brew services stop postgresql전날 실행 된이 문제에 갇혔습니다 .
다음날 : brew services start postgresql작동하지 않습니다. 이는 homebrew를 사용하여 설치할 때 표시된대로입니다. postgresql은 launchd ...를 사용하여 컴퓨터 전원을 켤 때로드됩니다.

해결 방법 :
brew services start postgresql
컴퓨터를 다시 시작하십시오.


0

\du명령 반환 :

역할 이름 = postgres@implicit_files

그리고 그 명령은 postgres=# \password postgres오류를 반환합니다 :

오류 : "postgres"역할이 없습니다.

그러나 postgres=# \password postgres@implicit_files잘 작동합니다.

또한 sudo -u postgres createuser -s postgres첫 번째 변형 후에도 작동합니다.

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