psql : 치명적 : "<user>"데이터베이스가 없습니다.


721

Mac 용 PostgreSql 앱 ( http://postgresapp.com/ )을 사용하고 있습니다. 과거에 다른 컴퓨터에서 사용했지만 맥북에 설치할 때 문제가 발생합니다. 응용 프로그램을 설치했으며 다음을 실행했습니다.

psql -h localhost

다음을 반환합니다.

psql: FATAL:  database "<user>" does not exist

찾으려는 데이터베이스를 만들기 위해 콘솔을 실행할 수도없는 것 같습니다. 내가 방금 실행할 때도 마찬가지입니다.

psql 

또는 응용 프로그램 드롭 다운 메뉴에서 psql을 시작하면 :

기계 통계 :

  • OSX 10.8.4

  • psql (PostgreSQL) 9.2.4

도움을 주시면 감사하겠습니다.

또한 homebrew를 통해 PostgreSql을 설치하려고 시도했는데 동일한 문제가 발생합니다. 또한 다음과 같은 응용 프로그램 설명서 페이지를 읽었습니다.

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

따라서 응용 프로그램이 $ USER를 생성하지 않는 것 같지만 지금은 여러 번 설치-> 제거-다시 설치했지만 내 컴퓨터에 문제가 있어야합니다.

나는 대답을 찾았지만이 스레드에서 응답 한 사용자가 어떻게 작동하는지 확실하지 않습니다-> Mac에서 Postgresql 실행하기 : 데이터베이스 "postgres"가 존재 하지 않습니다. 다음 명령을 사용하여 psql을 열었습니다.

psql -d template1

누군가 이것이 왜 작동하는지에 대한 설명을 제공 할 때 까지이 답변을 남겨 두지 않을 것입니다.


3
무엇을 psql -d postgres -U postgres -h localhost보여줍니까? 플래그가 없으면 CLI 사용자가 기본값이며, "postgres"admin db가 기본값이라고 말했지만 테스트 할 Mac이 없습니다.
bma

즉, 제공 @bma 나 PSQL : FATAL : 역할 "포스트 그레스"원래 여기에 나를 데리고있는 존재하지 않는 -> stackoverflow.com/questions/15301826/...을 . 나는 그 대답을 사용하려고 시도했지만 같은 결과를 얻었습니다-> psql : FATAL : 데이터베이스 "user"가 존재하지 않습니다
Ryan Rich

DB 로그를 살펴 보셨습니까? 더 자세한 내용이 있는지 궁금합니다.
bma

12
나는 같은 문제가 있었다. 그냥 createdb <user>나를 위해 일했다.
poshaughnessy

로 명령을 실행하면 psql -U user -d postgres사용자가 이미 존재하는 postgres 데이터베이스에 연결됩니다. 따라서 로그인하는 동안에도 데이터베이스를 전달해야합니다.
Anil

답변:


1172

패키지 관리자가 $ user라는 데이터베이스를 작성하지 못한 것으로 보입니다. 그 이유는

psql -d template1

template1은 postgres 자체에 의해 생성 된 데이터베이스이며 모든 설치에 존재합니다. template1에 로그인 할 수 있으므로 데이터베이스에 의해 일부 권한이 할당되어 있어야합니다. 쉘 프롬프트에서 이것을 시도하십시오 :

createdb

다음으로 로그인 할 수 있는지 확인하십시오

psql -h localhost

이것은 단순히 로그인 사용자를위한 데이터베이스를 만들 것입니다. createdb가 실패하면 자신의 데이터베이스를 만들 수있는 권한이 충분하지 않으며 homebrew 패키지를 수정하는 방법을 알아야합니다.


38
내 경우 $ createdb -h localhost에는 오류를 해결하기 위해 썼습니다 could not connect to database postgres: could not connect to server. 그 후 나는를 통해 postgresql 콘솔에 연결할 수 있습니다 psql -h localhost.
ExiRe

여전히 비밀번호 프롬프트가 표시되며 어떤 비밀번호인지, 어떤 비밀번호가 기본 postgres 앱 비밀번호인지 알 수 없습니다.
LasagnaAndroid

2
감사합니다 @Kirk. -d template1첫 번째 명령에 정말로 필요한 가요? 인터넷을 통틀어 튜토리얼에서 "template1"을 보았지만 혼란 스러울뿐입니다. 더 논리적 인 접근 방식은 제 의견으로는 1) PostgreSQL 사용자 생성 (예 : "usera") 2) 사용자 "usera"와 같은 이름의 데이터베이스를 생성하십시오 (이것이 미친 것 같지만 PostgreSQL에 필요한 것 같습니다) 3) 수퍼 유저 "postgres"로 PostgreSQL에 로그인하고 "usera"데이터베이스의 권한을 "usera"사용자에게 할당하십시오 (오 마이 갓, 이것이 실제입니까?)
ericn

@eric : -d template1은 OP가 전혀 로그인 할 수 있는지 확인하기위한 것입니다. initdb 시간에 생성되므로 항상 존재하며 쉽게 확인할 수 있습니다. 그 시점부터 귀하의 절차는 일반적으로 "실제"입니다.
Kirk Roybal

@ExiRe 방금 하나의 간단한 명령으로 방대한 두통을 치료했습니다. 감사!
Dave Munger

193

터미널에서 명령 프롬프트 창에서 명령을 실행하십시오. (psql 내부가 아님) .

createdb <user>

그런 다음 postgres를 다시 실행하십시오.


3
아름다운! 이렇게 했어요! 이것을 실행하면 모든 psql 명령이 매력처럼 작동합니다! 정말 감사합니다!
thenaturalist

1
그리고 psql 템플릿에서 시도하고있었습니다. 젠장
user1735921

2
또한 당신은 그냥 실행할 수 있습니다createdb
Mantisimo

나 같은 사용자를위한 팁;) (psql 내부가 아님). 터미널 창을 열 때이 createdb를 첫 번째 명령으로 입력 한 다음 psql에 로그인하십시오.
Rohan Dodeja

큰! OSX에서 나를 위해 일했습니다.
darkhipo

150

기본적으로 postgres는 사용자와 이름이 같은 데이터베이스에 연결을 시도합니다. 이 기본 동작을 방지하려면 사용자와 데이터베이스를 지정하십시오.

psql -U Username DatabaseName 

14
고마워, 당신은 그러한 디자인의 이유를 알고 있습니다-왜 세계에서 기본적으로 내 이름 데이터베이스를 가고 싶습니까?
ericn

3
@eric 데이터베이스는 종종 전용 사용자로 실행되는 서비스에서 사용됩니다. 따라서 기본 데이터베이스 이름으로 사용자 이름을 사용하는 전략이 일부 고정 기본 데이터베이스 이름 (예 : "postgres")을 사용하는 것보다 더 유용 할 것입니다.
user686249

5
실제로 데이터베이스를 작성하는 SQL 스크립트를 어떻게 실행합니까? 내 경우에는 다른 DB를 만드는 것이 목표 인 경우 항상 <user> 데이터베이스에 연결하려고 시도합니다. psql -U Username -f create_db.sql오류가 반환됩니다.database Username doesn't exists
Kostanos

환상적인 답변은 감사하지만 커맨드 라인 도움말에없는 이유는 무엇입니까? psql의 --help
숀 베이더

1
psql -U Username postgres아직 데이터베이스가 없을 때
Anatolii Stepaniuk

59
  1. 기본 사용자로 로그인 : sudo -i -u postgres
  2. 새로운 사용자 생성 : createuser --interactive
  3. 역할 이름을 묻는 메시지가 표시되면 Linux 사용자 이름을 입력하고 예를 선택하여 수퍼 유저 질문하십시오.
  4. 여전히 postgres 사용자로 로그인하여 데이터베이스를 작성하십시오. createdb <username_from_step_3>
  5. psql명령 프롬프트 에 다음 을 입력하여 오류가 사라 졌는지 확인 하십시오.
  6. 출력이 표시되어야합니다 psql (x.x.x) Type "help" for help.

이봐, 당신은 나에게 많은 시간을 절약했다.
Jp Reddy

Windows 에서이 작업을 수행해야했습니다. 새로운 pg username을 Linux un으로 설정하십시오. 결정된.
RichieRich

이것은 매력처럼 나를 위해 일했다
Promise Preston

41

기본 template1 데이터베이스를 사용하여 로그인하십시오.

#psql -d template1
#template1=# \l

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

userId로 데이터베이스를 작성하십시오.

template1=# CREATE DATABASE gogasca WITH OWNER gogasca ENCODING 'UTF8';
CREATE DATABASE

종료 후 다시 로그인

template1=# \q
gonzo:~ gogasca$ psql -h localhost
psql (9.4.0)
Type "help" for help.

gogasca=# \l
                                List of databases
   Name    |  Owner  | Encoding |   Collate   |    Ctype    |  Access privileges  
-----------+---------+----------+-------------+-------------+---------------------
 gogasca   | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres  | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca         +
           |         |          |             |             | gogasca=CTc/gogasca
 template1 | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca         +
           |         |          |             |             | gogasca=CTc/gogasca
(4 rows)

20

Mac에서 postgresql을 열려고 할 때 같은 오류가 발생했습니다.

psql: FATAL:  database "user" does not exist

이 간단한 명령을 사용하여 해결했습니다.

방법 1

$ createdb --owner=postgres --encoding=utf8 user

그리고 유형

 psql

방법 2 :

psql -d postgres

5
방법 2는 내 생명을 구했습니다
tom10271

9

같은 문제 psql -d postgres가 있었지만 간단 했습니다 (터미널에 명령을 입력하십시오)


6

환경 변수 PGDATABASE가 존재하지 않는 데이터베이스 이름으로 설정된 경우에도이 오류가 발생할 수 있습니다.

OSX에서 Postgress.app 메뉴에서 psql을 시작하는 동안 다음 오류가 발생했습니다.

psql: FATAL: database "otherdb" does not exist

오류에 대한 해결책 export PGDATABASE=otherdb~/.bash_profile .

또한 PGUSER가 사용자 이름 이외의 것으로 설정된 경우 다음 오류가 발생합니다.

psql: FATAL: role "note" does not exist

해결책은에서 제거 export PGUSER=notme하는 것 ~/.bash_profile입니다.


5

postgres의 설치 후, 필자의 경우 버전은 12.2이며 아래 명령을 실행했습니다 createdb.

$ createdb `whoami`

$ psql

psql (12.2)
Type "help" for help.

macuser=# 

이 날 위해 일한 건배
FaISalBLiNK

4

이 질문은 검색 결과에서 처음이므로 제목이 중복되지 않도록 다른 문제에 대해 다른 해결책을 제시하겠습니다.

psql데이터베이스를 지정하지 않고 쿼리 파일을 실행할 때 동일한 오류 메시지가 나타날 수 있습니다 . usepostgresql 에는 명령문 이 없으므로 명령 행에서 데이터베이스를 지정해야합니다. 예를 들면 다음과 같습니다.

psql -d db_name -f query_file.sql

1
및 DB를 template1를 항상 존재
1월

4

createdb 문서 는 다음과 같이 말합니다.

첫 번째 데이터베이스는 데이터 저장 영역이 초기화 될 때 항상 initdb 명령으로 작성됩니다.이 데이터베이스를 postgres라고합니다.

따라서 특정 OS / postgresql 배포가 다르게 수행하는 경우 기본 / 표준이 아닙니다 ( initdbopenSUSE 13.1에서 DB "postgres"를 생성하지만 "<user>"는 생성하지 않음). 짧은 이야기 psql -d postgres는 "postgres"이외의 사용자를 사용할 때 사용될 것으로 예상됩니다.

분명히 createdb사용자와 같은 이름의 DB를 생성하기 위해 실행되는 승인 된 답변도 효과적이지만 불필요한 DB를 만듭니다.


1

JDBC 드라이버 사용에 문제가 있었으므로 URL에서 호스트 이름 뒤에 데이터베이스를 추가해야합니다 (예 : 사용하는 도구에 따라 중복 될 수 있음). jdbc:postgres://<host(:port)>/<db-name>

자세한 내용은 여기에 설명되어 있습니다 : http://www.postgresql.org/docs/7.4/static/jdbc-use.html#JDBC-CONNECT


나는 그것을 고려 주제 오프 약간은 psql를 요구 한 것을 알고 있지만, 구글은 내가 그 가치는 여기에 언급 생각, 그래서 내 문제로 날 여기를 가져왔다
안드레아스 디트리히

1

기존 수퍼 유저를 통해 postgres에 연결하십시오.

postgres에 연결하는 사용자 이름으로 데이터베이스를 만듭니다.

create database username;

이제 사용자 이름을 통해 연결을 시도하십시오


1

사용해보십시오-

psql -d postgres

나는 또한 달릴 때 같은 문제에 직면했다 psql


0

우선, 기본 데이터베이스를 사용하려는 경우 오류를 방지하고 db의 이름을 명시 적으로 선언하지 않고 새 테이블을 작성하기 위해 현재 사용과 동일한 이름의 데이터베이스를 작성하는 것이 좋습니다.

"skynotify"를 사용자 이름으로 바꾸십시오 :

psql -d postgres -c "CREATE DATABASE skynotify ENCODING 'UTF-8';"

-d는이 대화식 세션 동안 명시 적으로 db 이름을 포함하지 않는 SQL 문의 기본값으로 사용할 데이터베이스를 명시 적으로 선언합니다.

PostgresQL 서버에 포함 된 명확한 그림을 얻기위한 기본 사항.

psql을 대화식으로 사용하려면 기존 데이터베이스에 연결해야합니다. 다행히 psql에 데이터베이스 목록을 요청할 수 있습니다.

psql -l

.

                                          List of databases
               Name               | Owner  | Encoding |   Collate   |    Ctype    | Access privileges 
----------------------------------+-----------+----------+-------------+-------------+-------------------
 skynotify                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 myapp_dev                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres                         | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 ruby-getting-started_development | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/skynotify          +
                                  |           |          |             |             | skynotify=CTc/skynotify
 template1                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/skynotify          +
                                  |           |          |             |             | skynotify=CTc/skynotify
(6 rows)

이것은 대화식 콘솔을 시작하지 않고 단지 텍스트 기반 테이블을 터미널에 출력합니다.

다른 답변에서 알 수 있듯이 postgres는 항상 생성되므로 콘솔을 다른 데이터베이스에서 작동시키기 시작하려는 경우 비상 안전 데이터베이스로 사용해야합니다. 없는 경우 데이터베이스를 나열한 후 그 중 하나를 사용하십시오.

비슷한 방식으로 데이터베이스에서 테이블을 선택하십시오.

psql -d postgres -c "\dt;"

내 "postgres"데이터베이스에는 테이블이 없지만 텍스트 기반 테이블을 터미널에 출력하는 모든 데이터베이스 (표준 출력)가 있습니다.

그리고 완전성을 위해 테이블에서 모든 행을 선택할 수도 있습니다.

psql -d ruby-getting-started_development -c "SELECT * FROM widgets;"

.

 id | name | description | stock | created_at | updated_at 
----+------+-------------+-------+------------+------------
(0 rows)

행이 0으로 반환되지 않아도 필드 이름을 얻을 수 있습니다.

테이블에 12 개 이상의 행이 있거나 확실하지 않은 경우 데이터베이스에 얼마나 많은 데이터가 있는지 이해하기 위해 행 수로 시작하는 것이 더 유용합니다.

 psql -d ruby-getting-started_development -c "SELECT count(*) FROM widgets;"

.

 count 
-------
     0
(1 row)

그리고 "1 행"은 혼동하지 말고, 쿼리에 의해 리턴되는 행 수를 나타내지 만 1 행에는 원하는 수 (이 예에서는 0)가 포함됩니다.

참고 : 소유자없이 정의 된 DB는 현재 사용자가 소유합니다.


0

나는이 솔루션 중 일부를 시도했지만 제대로 작동하지 않았습니다 (그러나 그들은 올바른 길을 가고 있었지만!)

결국 내 오류는 다음과 같습니다.

치명적 : 사용자의 비밀번호 인증에 실패했습니다

다음 명령을 실행할 때 : psql

그런 다음이 두 명령을 실행했습니다.

dropdb()
createdb()

참고 : 이것은 db 제거하지만 필요하지 않으며 어떤 이유로 pqsl에 더 이상 액세스 할 수 없으므로 제거하고 다시 작성했습니다. 그런 다음 psql다시 일했습니다.


0

답변에 이미 추가되었는지 확실하지 않으면 Anatolii Stepaniuk 답변이 다음과 같이 매우 도움이되었습니다.

psql -U Username postgres # when you have no databases yet

-1

homebrew를 통해 postgresql을 설치할 때이 문제가 발생했습니다.

다음을 사용하여 기본 "postgres"수퍼 유저를 작성해야합니다.

createuser-대화 형 postgres는 y에 대해 y를 응답합니다.

createuser-대화 형 사용자는 수퍼 유저에게 응답합니다.


-3

homebrew를 사용하여 postgresql을 설치 한 후에도 여전히 위의 문제가 발생했습니다 ./usr/bin 이전의 경로에 / usr / local / bin을 넣어 문제를 해결했습니다.


-12

가장 간단한 설명입니다. 멍청한 문제입니다. 그냥 입력

pgres

이 응답이 발생합니다.

pgres <db_name> 

사용자에게 db에 액세스 할 수있는 권한이 있으면 오류없이 성공합니다.

내 보낸 환경 변수의 세부 사항으로 들어갈 수는 있지만 불필요합니다. 다른 이유로 실패하기에는 너무 기본적입니다.


5
정말 "멍청한 문제 유형의 언어"를 좋아하지 않는다
Kimmo Hintikka

또한 문제를 해결하는 방법을 권장하지 않았으므로 질문에 대답하지 않았습니다.
Deborah

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