psql: FATAL: “<user>” veritabanı mevcut değil


723

Mac için PostgreSql uygulamasını kullanıyorum ( http://postgresapp.com/ ). Geçmişte diğer makinelerde kullandım ama macbook'umda kurulum yaparken bana biraz sorun veriyor. Uygulamayı yükledim ve koştum:

psql -h localhost

Döndürür:

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

Hatta bulmaya çalıştığı veritabanını oluşturmak için konsolu bile çalıştıramıyorum. Aynı şey sadece koştuğumda da olur:

psql 

veya uygulama açılır menüsünden psql'yi başlatırsam:

Makine istatistikleri:

  • OSX 10.8.4

  • psql (PostgreSQL) 9.2.4

Herhangi bir yardım takdir.

Ayrıca PostgreSql'i homebrew üzerinden kurmaya çalıştım ve aynı sorunu alıyorum. Ayrıca, aşağıdakileri belirten uygulama belgeleri sayfasını da okudum:

Postgres.app ilk başladığında, hiçbiri belirtilmediğinde psql için varsayılan veritabanı olan $ USER veritabanını oluşturur. Varsayılan kullanıcı şifresiz $ USER.

Bu yüzden uygulama $ USER oluşturmuyor gibi görünüyor, ancak şimdi birkaç kez yükledim-> yeniden yükledim, bu yüzden makinemle bir şey olmalı.

Cevabı buldum ama tam olarak nasıl bu konuya cevap kullanıcı olarak çalışır emin değilim -> Postgresql Mac Başlarken Başlarken: Veritabanı "postgres" yok takip etmedi. Ben psql açmak için aşağıdaki komutu kullandım:

psql -d template1

Birisi bunun neden çalıştığına dair bir açıklama yapana kadar bunu cevapsız bırakacağım.


3
Ne psql -d postgres -U postgres -h localhostgösterir? Bayraklar olmadan CLI kullanıcı için varsayılan ve ben "postgres" admin db için varsayılanlar söyleyebilirdi ama üzerinde test için bir mac yok.
bma

@bma Bu bana psql veriyor: FATAL: "postgres" rolü mevcut değil, bu da beni buraya getirdi -> stackoverflow.com/questions/15301826/… . Bu cevabı kullanmaya çalıştım ama aynı sonucu alıyorum -> psql: FATAL: veritabanı "kullanıcı" mevcut değil
Ryan Rich

Db günlüğüne baktın mı? Orada daha fazla ayrıntı verilip verilmeyeceğini merak ediyorum.
bma

12
Ben de aynı problemi yaşadım. Sadece yapmak createdb <user>benim için çalıştı.
poshaughnessy

psql -U user -d postgresBu komut , kullanıcının zaten mevcut olan postgres veritabanına bağlı olmasını sağlar. Bu yüzden giriş yaparken de veritabanını geçmemiz gerekiyor.
Anıl

Yanıtlar:


1175

Paket yöneticiniz sizin için $ user adlı veritabanını oluşturamadı. Bu yüzden

psql -d template1

sizin için çalışır, template1 postgres tarafından oluşturulan bir veritabanıdır ve tüm kurulumlarda mevcuttur. Görünüşe göre template1'e giriş yapabilirsiniz, bu nedenle veritabanı tarafından size atanmış bazı haklara sahip olmanız gerekir. Bunu bir kabuk komut isteminde deneyin:

createdb

ve sonra tekrar giriş yapıp yapamayacağınızı görün

psql -h localhost

Bu sadece giriş kullanıcısı için bir veritabanı oluşturacaktır, ki bu aradığınız şeydir. Createb başarısız olursa, kendi veritabanınızı yapmak için yeterli haklara sahip değilsiniz ve homebrew paketini nasıl düzelteceğinizi bulmanız gerekecek.


38
Benim durumumda $ createdb -h localhosthatayı çözmek için yazdım could not connect to database postgres: could not connect to server. Bundan sonra postgresql konsoluna bağlanabilirim psql -h localhost.
ExiRe

Hala bir şifre istemi alıyorum ve hangisi olduğu hakkında hiçbir fikrim yok, hangisi varsayılan postgres uygulama şifresi?
LasagnaAndroid

2
Teşekkürler @Kirk. -d template1İlk emrinizde gerçekten ihtiyacımız var mı? Ben internette tüm öğreticiler "template1" gördüm ama sadece beni karıştırmak için hizmet vermektedir. Bence daha mantıklı bir yaklaşım olurdu 1) PostgreSQL kullanıcı oluşturmak örneğin "usera" 2) Kullanıcı "usera" ile aynı ada sahip bir veritabanı oluşturmak (Bence bu çılgın ama PostgreSQL gerektirir) 3) Süper kullanıcı "postgres" olarak PostgreSQL'e giriş yapın ve "usera" kullanıcısına "usera" veri tabanının ayrıcalıklarını atayın (aman tanrım, bu gerçek hayat mı?)
ericn

@eric: -d şablonu1 yalnızca OP'nin oturum açabileceğini kontrol etmek için oradadır. İnitdb zamanında oluşturulduğundan, her zaman mevcuttur ve kolay bir kontroldü. Bu noktadan itibaren, prosedürünüz genellikle "gerçek hayat" tır.
Kirk Roybal

@ExiRe Basit bir komutla yaşadığım büyük baş ağrısını iyileştirdin. Teşekkürler!
Dave Munger

194

Terminalden, komut istemi pencerenizde komutu çalıştırın. (Psql içinde değil) .

createdb <user>

Ve sonra tekrar postgres çalıştırmayı deneyin.


3
Güzel! Bunu başardın! Bunu çalıştırdıktan sonra, tüm psql komutları cazibe gibi çalışır! bir ton teşekkürler!
thenaturalist

1
Ve psql şablonunda deniyordum. lanet olsun
user1735921

2
Ayrıca sadece koşabilirsinizcreatedb
Mantisimo

benim gibi kullanıcılar için ipucu;) (psql içinde değil). sadece terminal penceresini açtığınızda, bu komutun ilk komut olarak girilmesi ve ardından psql'de oturum açmaya çalışılması anlamına gelir.
Rohan Dodeja

Harika! OSX'de benim için çalıştı.
darkhipo

151

Varsayılan olarak postgres, kullanıcıyla aynı ada sahip bir veritabanına bağlanmaya çalışır. Bu varsayılan davranışı önlemek için kullanıcı ve veritabanını belirtmeniz yeterlidir:

psql -U Username DatabaseName 

14
Teşekkürler, böyle bir tasarımın nedenini biliyor musunuz - neden dünyada varsayılan olarak isim veritabanımı gitmek isteyeyim?
ericn

3
@eric Veritabanları genellikle özel kullanıcı olarak çalışan hizmetler tarafından kullanılır. Bu yüzden varsayılan veritabanı adı olarak kullanıcı adını kullanma stratejisi muhtemelen bazı sabit varsayılan veritabanı adı (örn. "Postgres") kullanmaktan daha yararlı olduğunu tahmin ediyorum.
user686249

5
veritabanı oluşturan SQL komut dosyasını nasıl çalıştırıyorsunuz? benim durumumda başka bir DB oluşturmak olduğunda her zaman <kullanıcı> veritabanına bağlanmaya çalışır: psql -U Username -f create_db.sqlbu hata döndürür:database Username doesn't exists
Kostanos

Harika cevap teşekkürler, ama neden komut satırı yardımında değil sorusunu yalvarır? psql --help
Shawn Vader

1
psql -U Username postgreshenüz veritabanınız
yokken

60
  1. Varsayılan kullanıcı olarak giriş yap: sudo -i -u postgres
  2. Yeni kullanıcı oluştur: createuser --interactive
  3. Rol adı istendiğinde, linux kullanıcı adını girin ve süper kullanıcı sorusuna Evet'i seçin.
  4. Hala postgres kullanıcısı olarak oturum açmış durumdaysanız, bir veritabanı oluşturun: createdb <username_from_step_3>
  5. psqlKomut istemine : girerek hataların gittiğini onaylayın .
  6. Çıktı göstermelidir psql (x.x.x) Type "help" for help.

1
Adamım, beni çok zaman kazandın.
Jp Reddy

Bunu Windows'da yapmam gerekiyordu. Yeni pg kullanıcı adını Linux un olarak ayarlayın. Sabit.
RichieRich

Bu benim için cazibe gibi çalıştı
Promise Preston

42

Varsayılan template1 veritabanını kullanarak giriş yapın:

#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)

Kullanıcı kimliğinizle bir veritabanı oluşturun:

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

Çıkın ve tekrar giriş yapın

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'te postgresql açmaya çalışırken aynı hatayla karşılaştım

psql: FATAL:  database "user" does not exist

Bunu çözmek için bu basit komutu buldum:

Yöntem 1

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

ve yazın

 psql

Yöntem 2:

psql -d postgres

5
Yöntem 2 Hayatımı
Kurtardı

9

Aynı sorun vardı, basit bir psql -d postgresyaptı (Terminalde komutu yazın)


6

Bu hata, PGDATABASE ortam değişkeni var olmayan bir veritabanının adına ayarlanmışsa da oluşabilir.

OSX'te, Postgress.app menüsünden psql'yi başlatmaya çalışırken aşağıdaki hatayı gördüm:

psql: FATAL: database "otherdb" does not exist

Hatanın çözümü export PGDATABASE=otherdbşuradan kaldırmaktı ~/.bash_profile:

Ayrıca, PGUSER kullanıcı adınızdan başka bir şeye ayarlanmışsa, aşağıdaki hata ortaya çıkar:

psql: FATAL: role "note" does not exist

Çözeltinin ayrılması için, bir export PGUSER=notmegelen ~/.bash_profile.


5

Postgres kurulumundan sonra, benim durumumda 12.2, aşağıdaki komutu çalıştırdım createdb.

$ createdb `whoami`

$ psql

psql (12.2)
Type "help" for help.

macuser=# 

Şerefe bu benim için çalıştı
FaISalBLiNK

4

Bu soru arama sonuçlarında ilk olduğu için, burada yinelenen bir başlığa sahip olmamak için farklı bir soruna farklı bir çözüm getireceğim.

psqlVeritabanını belirtmeden bir sorgu dosyası çalıştırılırken aynı hata mesajı gelebilir . usePostgresql'de ifade olmadığından, veritabanını komut satırında belirtmeliyiz, örneğin:

psql -d db_name -f query_file.sql

1
ve db template1 daima var
jan

4

As createdb belgeleri devletler:

Veri depolama alanı başlatıldığında ilk veritabanı her zaman initdb komutu tarafından oluşturulur ... Bu veritabanına postgres denir.

Bu nedenle, belirli OS / postgresql dağıtımları bunu farklı yaparsa, kesinlikle varsayılan / standart değildir (sadece initdbopenSUSE 13.1'de DB "postgres" oluşturduğunu doğrular, ancak "<kullanıcı>" oluşturmaz). Uzun hikaye kısa, psql -d postgres"postgres" dışında bir kullanıcı kullanılırken kullanılması bekleniyor.

Açıkçası, createdbkullanıcı gibi bir DB oluşturmak için çalışan kabul edilen cevap da çalışır, ancak gereksiz bir DB oluşturur.


1

JDBC sürücüsünün kullanımıyla ilgili bir sorun vardı, bu yüzden URL'de ana bilgisayar adından sonra veritabanını (belki de gereksiz yere bağlı olarak) eklemeniz gerekir, ör. jdbc:postgres://<host(:port)>/<db-name>

daha fazla ayrıntı burada belgelenmiştir: http://www.postgresql.org/docs/7.4/static/jdbc-use.html#JDBC-CONNECT


Sadece psql istendiğinde konu biraz kapalı olduğunu biliyorum, ama Google beni sorunumla buraya getirdi, bu yüzden burada bahsetmeye değer olduğunu düşünüyorum
Andreas Dietrich

1

Mevcut süper kullanıcı aracılığıyla postgres'e bağlanın.

Postgres'e bağlandığınız kullanıcı adına göre bir Veritabanı oluşturun.

create database username;

Şimdi kullanıcı adı ile bağlanmayı deneyin


1

Kullanmayı deneyin-

psql -d postgres

Ben koştuğumda da aynı sorunla karşı karşıyaydım psql


0

Öncelikle, sadece varsayılan veritabanını kullanmak istediğinizde hatayı önlemek ve bir db'nin adını açıkça bildirmeden yeni tablolar oluşturmak istediğinizde, geçerli kullanımınızla aynı adlı bir veritabanı oluşturmak yararlıdır.

"Skynotify" yerine kullanıcı adınızı yazın:

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

-d, bu etkileşimli oturum sırasında açıkça bir db adı içermeyen SQL deyimleri için varsayılan olarak hangi veritabanının kullanılacağını belirtir.

PostgresQL SUNUCUSUNUZUN NE OLDUĞUNDAN TEMİZ BİR RESİM ALMAK İÇİN TEMEL BİLGİLER.

Psql'yi etkileşimli olarak kullanmak için varolan bir veritabanına bağlanmanız gerekir. Neyse ki, psql'den veritabanlarının bir listesini isteyebilirsiniz:

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)

Bu etkileşimli konsolu BAŞLATMAZ, sadece terminale metin tabanlı bir tablo çıkarır.

Başka bir yanıtın dediği gibi postgres her zaman oluşturulur, bu nedenle konsolu diğer veritabanlarında çalışmaya başlamak istediğinizde başarısız güvenli veritabanınız olarak kullanmalısınız. Orada yoksa, veritabanlarını listeleyin ve sonra bunlardan herhangi birini kullanın.

Benzer şekilde, veritabanından tabloları seçin:

psql -d postgres -c "\dt;"

"Postgres" veritabanımın tablo yok, ancak bunu yapan herhangi bir veritabanı terminale metin tabanlı bir tablo çıktı (standart çıkış).

Ve bütünlük için, bir tablodan tüm satırları da seçebiliriz:

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

.

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

Döndürülen sıfır satır olsa bile, alan adlarını alırsınız.

Tablolarınızda bir düzineden fazla satır varsa veya emin değilseniz, veritabanınızda ne kadar veri olduğunu anlamak için bir dizi satırla başlamak daha yararlı olacaktır:

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

.

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

Ve "1 satır" ın sizi karıştırmamasını sağlayın, yalnızca sorgu tarafından kaç satır döndürüldüğünü temsil eder, ancak 1 satır istediğiniz sayıyı içerir, bu örnekte 0'dır.

NOT: tanımlı bir sahibi olmadan oluşturulan bir db geçerli kullanıcıya aittir.


0

Bu çözümlerden bazılarını denedim, ancak pek işe yaramadılar (doğru yolda olmalarına rağmen!)

Sonunda benim hatam:

FATAL: kullanıcı için şifre kimlik doğrulaması başarısız oldu

Aşağıdaki komutu çalıştırdığımda: psql

Sonra bu iki komutu çalıştırdım:

dropdb()
createdb()

NOT: Bu olacak db kaldırmak ama ihtiyacım ve artık erişim pqsl olabilir nedense ben kaldırıldı ve onu yeniden yüzden vermedi. Sonra psqltekrar çalıştı.


0

Cevaplara zaten eklenmiş olup olmadığından emin değilim, Anatolii Stepaniuk yanıtı çok yardımcı oldu.

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

-1

Homgrew üzerinden postgresql yüklerken bu sorun vardı.

İle varsayılan "postgres" süper kullanıcı oluşturmak zorunda kaldı:

süper kullanıcı için createuser - etkileşimli postgres y

createuser - süper kullanıcı için etkileşimli kullanıcı yanıtı


-3

Homebrew kullanarak postgresql yükledikten sonra hala sorun vardı - / usr / bin önce yoluma / usr / local / bin koyarak çözdüm


-12

En basit açıklamada; bu noob sorunu. Sadece yazıyorum

pgres

bu yanıta neden olacaktır.

pgres <db_name> 

kullanıcı db'ye erişim izinlerine sahipse hatasız olarak başarılı olacaktır.

Dışa aktarılan ortam değişkenlerinin ayrıntılarına girilebilir, ancak bu gereksizdir.


5
"Noob sayı dil türü" gerçekten sevmiyorum
Kimmo Hintikka

Ayrıca sorunun nasıl çözüleceğini önermedi, bu yüzden soruya cevap vermedi.
Deborah

1
hiç duymadımpgres
Glenn Plas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.