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.