psql: FATAL: database "<user>" tidak ada

723

Saya menggunakan aplikasi PostgreSql untuk mac ( http://postgresapp.com/ ). Saya pernah menggunakannya di komputer lain, tetapi ini membuat saya kesulitan ketika menginstal di macbook saya. Saya telah menginstal aplikasi dan saya berlari:

psql -h localhost

Ia mengembalikan:

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

Sepertinya saya bahkan tidak bisa menjalankan konsol untuk membuat database yang ingin dicari. Hal yang sama terjadi ketika saya menjalankan:

psql 

atau jika saya meluncurkan psql dari menu drop down aplikasi:

Statistik mesin:

  • OSX 10.8.4

  • psql (PostgreSQL) 9.2.4

Bantuan apa pun dihargai.

Saya juga berusaha menginstal PostgreSql via homebrew dan saya mendapatkan masalah yang sama. Saya juga membaca halaman dokumentasi aplikasi yang menyatakan:

Ketika Postgres.app pertama kali dijalankan, itu menciptakan database $ USER, yang merupakan database default untuk psql ketika tidak ada yang ditentukan. Pengguna default adalah $ USER, tanpa kata sandi.

Jadi sepertinya aplikasi ini tidak menghasilkan $ USER tetapi saya telah menginstal-> uninstall-instal ulang beberapa kali sekarang jadi pasti ada sesuatu dengan mesin saya.

Saya menemukan jawabannya tetapi saya tidak yakin bagaimana cara kerjanya sebagai pengguna yang menjawab di utas ini -> Menjalankan Postgresql Di Mac: Basis data "postgres" tidak ada tidak menindaklanjuti. Saya menggunakan perintah berikut untuk mendapatkan psql untuk membuka:

psql -d template1

Saya akan membiarkan yang ini tidak terjawab sampai seseorang dapat memberikan penjelasan mengapa ini berhasil.

Ryan Rich
sumber
3
Apa yang psql -d postgres -U postgres -h localhostditunjukkan? Tanpa flag, default untuk pengguna CLI, dan saya akan mengatakan itu default ke admin "postgres" db tapi saya tidak punya mac untuk diuji.
bma
@ Bma Itu memberi saya psql: FATAL: peran "postgres" tidak ada, yang awalnya membawa saya ke sini -> stackoverflow.com/questions/15301826/… . Saya sudah mencoba menggunakan jawaban itu tetapi saya mendapatkan hasil yang sama -> psql: FATAL: database "user" tidak ada
Ryan Rich
Sudahkah Anda melihat di db log? Saya bertanya-tanya apakah lebih detail akan dipancarkan di sana.
bma
12
Saya memiliki masalah yang sama. Hanya melakukan createdb <user>bekerja untukku.
poshaughnessy
jalankan perintah sebagai psql -U user -d postgres, ini memastikan bahwa, pengguna terhubung ke database postgres, yang sudah ada. Jadi kita harus melewati database juga saat login.
Anil

Jawaban:

1173

Tampaknya manajer paket Anda gagal membuat database bernama $ user untuk Anda. Alasannya itu

psql -d template1

bekerja untuk Anda adalah bahwa template1 adalah database yang dibuat oleh postgres itu sendiri, dan hadir pada semua instalasi. Anda tampaknya dapat masuk ke template1, jadi Anda harus memiliki beberapa hak yang diberikan kepada Anda oleh database. Coba ini di prompt shell:

createdb

dan kemudian lihat apakah Anda bisa masuk lagi dengan

psql -h localhost

Ini hanya akan membuat database untuk pengguna login Anda, yang saya pikir adalah apa yang Anda cari. Jika createb gagal, maka Anda tidak memiliki hak yang cukup untuk membuat database Anda sendiri, dan Anda harus mencari cara untuk memperbaiki paket homebrew.

Kirk Roybal
sumber
38
Dalam kasus saya, saya menulis $ createdb -h localhostuntuk memecahkan kesalahan could not connect to database postgres: could not connect to server. Setelah itu saya dapat terhubung ke konsol postgresql via psql -h localhost.
ExiRe
Saya masih mendapatkan prompt kata sandi dan tidak tahu yang mana, yang mana yang merupakan kata sandi default aplikasi postgres?
LasagnaAndroid
2
Terima kasih @Kirk. Apakah kami benar-benar membutuhkan -d template1perintah pertama Anda? Saya telah melihat "template1" dalam tutorial di seluruh Internet tetapi hanya berfungsi untuk membingungkan saya. Pendekatan yang lebih logis akan, menurut pendapat saya 1) Buat pengguna PostgreSQL misalnya "usera" 2) Buat database dengan nama yang sama dengan pengguna "usera" (Saya pikir ini gila tapi sepertinya PostgreSQL membutuhkannya) 3) Masuk ke PostgreSQL sebagai "postgres" pengguna super dan tetapkan hak istimewa basis data "usera" kepada pengguna "usera" (oh my god, apakah ini benar-benar kehidupan nyata?)
ericn
@ eric: -d template1 hanya ada untuk memeriksa apakah OP bisa masuk sama sekali. Karena dibuat pada waktu initdb, selalu ada, dan merupakan pemeriksaan yang mudah. Sejak saat itu, prosedur Anda umumnya "kehidupan nyata".
Kirk Roybal
@ ExiRe Anda baru saja menyembuhkan sakit kepala hebat yang saya alami dengan satu perintah sederhana. Terima kasih!
Dave Munger
193

Dari terminal, Jalankan perintah pada jendela command prompt Anda. (Tidak di dalam psql) .

createdb <user>

Dan kemudian coba jalankan postgres lagi.

Dhananjay
sumber
3
Cantik! Ini berhasil! Setelah menjalankan ini, semua perintah psql bekerja seperti pesona! Terima kasih banyak!
thenaturalist
1
Dan saya coba di template psql. damn
user1735921
2
Anda juga bisa menjalankancreatedb
Mantisimo
tip untuk pengguna seperti saya;) (Tidak di dalam psql). artinya ketika Anda baru saja membuka jendela terminal cukup masukkan ini dibuat sebagai perintah pertama dan kemudian mencoba untuk masuk dalam psql.
Rohan Dodeja
Bagus! Bekerja untuk saya di OSX.
darkhipo
150

Secara default, postgres mencoba untuk terhubung ke database dengan nama yang sama dengan pengguna Anda. Untuk mencegah perilaku default ini, cukup tentukan pengguna dan basis data:

psql -U Username DatabaseName 
Aneer Dev
sumber
14
Terima kasih, apakah Anda tahu alasan desain seperti itu - mengapa di dunia ini saya ingin menggunakan database nama saya secara default?
ericn
3
@eric Database sering digunakan oleh layanan yang berjalan sebagai pengguna khusus. Jadi saya kira strategi menggunakan nama pengguna sebagai nama database default mungkin lebih bermanfaat daripada menggunakan beberapa nama database default tetap (misalnya "postgres").
user686249
5
bagaimana Anda menjalankan skrip SQL yang benar-benar membuat basis data? dalam kasus saya selalu mencoba untuk terhubung ke database <user> ketika tujuan saya adalah untuk membuat DB lain: psql -U Username -f create_db.sqlini akan mengembalikan kesalahan:database Username doesn't exists
Kostanos
Jawaban yang fantastis terima kasih, tetapi memunculkan pertanyaan mengapa tidak ada dalam baris perintah membantu? psql --help
Shawn Vader
1
psql -U Username postgresketika Anda belum memiliki basis data
Anatolii Stepaniuk
59
  1. Login sebagai pengguna default: sudo -i -u postgres
  2. Buat Pengguna baru: createuser --interactive
  3. Saat diminta untuk nama peran, masukkan nama pengguna linux, dan pilih Ya untuk pertanyaan pengguna super.
  4. Masih masuk sebagai pengguna postgres, buat database: createdb <username_from_step_3>
  5. Konfirmasi kesalahan hilang dengan memasukkan: psqlpada prompt perintah.
  6. Output harus ditampilkan psql (x.x.x) Type "help" for help.
pengguna286539
sumber
Man, kamu menghemat banyak waktu.
Jp Reddy
Saya perlu melakukan ini di Windows. Atur nama pengguna pg baru ke Linux un. Tetap.
RichieRich
Bagi saya ini seperti pesona
Promise Preston
42

Login menggunakan database template1 default:

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

Buat database dengan ID pengguna Anda:

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

Keluar lalu masuk lagi

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)
gogasca
sumber
20

Saya menghadapi kesalahan yang sama ketika saya mencoba membuka postgresql di mac

psql: FATAL:  database "user" does not exist

Saya menemukan perintah sederhana ini untuk menyelesaikannya:

metode1

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

dan ketik

 psql

Metode 2:

psql -d postgres
Dinesh Pallapa
sumber
5
Metode 2 menyelamatkan hidup saya
tom10271
9

Punya masalah yang sama, sederhana psql -d postgresmelakukannya (Ketikkan perintah di terminal)

karat
sumber
6

Kesalahan ini juga dapat terjadi jika variabel lingkungan PGDATABASE diatur ke nama database yang tidak ada.

Di OSX, saya melihat kesalahan berikut ketika mencoba meluncurkan psql dari menu Postgress.app:

psql: FATAL: database "otherdb" does not exist

Solusi untuk kesalahan adalah dengan menghapus export PGDATABASE=otherdbdari ~/.bash_profile:

Lebih lanjut, jika PGUSER diatur ke sesuatu selain nama pengguna Anda, kesalahan berikut akan terjadi:

psql: FATAL: role "note" does not exist

Solusinya adalah dengan menghapus export PGUSER=notmedari ~/.bash_profile.

sdhca
sumber
5

Pasca instalasi postgres, dalam versi kasus saya adalah 12.2, saya memang menjalankan perintah di bawah ini createdb.

$ createdb `whoami`

$ psql

psql (12.2)
Type "help" for help.

macuser=# 
SuperNova
sumber
tepuk tangan ini bekerja untuk saya
FaISalBLiNK
4

Karena pertanyaan ini adalah yang pertama dalam hasil pencarian, saya akan memberikan solusi yang berbeda untuk masalah yang berbeda di sini, agar tidak memiliki judul duplikat.

Pesan kesalahan yang sama bisa muncul ketika menjalankan file kueri psqltanpa menentukan database. Karena tidak ada usepernyataan di postgresql, kita harus menentukan database pada baris perintah, misalnya:

psql -d db_name -f query_file.sql
Babken Vardanyan
sumber
1
dan db template1 selalu ada
jan
4

Seperti yang dinyatakan oleh dokumentasi yang dibuat :

Basis data pertama selalu dibuat oleh perintah initdb ketika area penyimpanan data diinisialisasi ... Basis data ini disebut postgres.

Jadi jika distribusi OS / postgresql tertentu melakukan hal yang berbeda, itu tentu bukan default / standar (hanya diverifikasi bahwa initdbpada openSUSE 13.1 menciptakan DB "postgres", tetapi bukan "<user>"). Singkatnya, psql -d postgresdiharapkan dapat digunakan saat menggunakan pengguna selain "postgres".

Jelas jawaban yang diterima, berjalan createdbuntuk membuat DB bernama seperti pengguna, berfungsi juga, tetapi membuat DB berlebihan.

pengguna686249
sumber
1

memiliki masalah dengan menggunakan driver JDBC, jadi kita hanya perlu menambahkan database (mungkin berlebihan tergantung pada alat yang dapat Anda gunakan) setelah nama host di URL, misalnya jdbc:postgres://<host(:port)>/<db-name>

perincian lebih lanjut didokumentasikan di sini: http://www.postgresql.org/docs/7.4/static/jdbc-use.html#JDBC-CONNECT

Andreas Dietrich
sumber
Saya tahu ini sedikit di luar topik mengingat itu hanya diminta untuk psql, tapi Google membawa saya ke sini dengan masalah saya, jadi saya pikir nilainya disebutkan di sini
Andreas Dietrich
1

Terhubung ke postgres melalui superuser yang ada.

Buat Database dengan nama pengguna yang Anda hubungkan ke postgres.

create database username;

Sekarang cobalah terhubung melalui nama pengguna

Sameer Kumar Choudhary
sumber
1

Coba gunakan-

psql -d postgres

Saya juga menghadapi masalah yang sama ketika saya berlari psql

hardik chugh
sumber
0

Pertama, akan sangat membantu untuk membuat database dengan nama yang sama dengan penggunaan Anda saat ini, untuk mencegah kesalahan ketika Anda hanya ingin menggunakan database default dan membuat tabel baru tanpa mendeklarasikan nama db secara eksplisit.

Ganti "skynotify" dengan nama pengguna Anda:

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

-d secara eksplisit mendeklarasikan database mana yang akan digunakan sebagai default untuk pernyataan SQL yang tidak secara eksplisit memasukkan nama db selama sesi interaktif ini.

DASAR-DASAR UNTUK MENDAPATKAN GAMBAR JELAS DARI APA PostverQL SERVER Anda di dalamnya.

Anda harus terhubung ke database yang ada untuk menggunakan psql secara interaktif. Untungnya, Anda dapat meminta daftar database 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)

Ini TIDAK memulai konsol interaktif, itu hanya menampilkan tabel berbasis teks ke terminal.

Seperti jawaban lain mengatakan, postgres selalu dibuat, jadi Anda harus menggunakannya sebagai basis data failafe Anda ketika Anda hanya ingin konsol mulai bekerja di database lain. Jika tidak ada di sana, maka daftarkan database dan kemudian gunakan salah satu dari mereka.

Dengan cara yang sama, pilih tabel dari database:

psql -d postgres -c "\dt;"

Basis data "postgres" saya tidak memiliki tabel, tetapi basis data apa pun yang akan menampilkan tabel berbasis teks ke terminal (standar keluar).

Dan untuk kelengkapan, kita juga dapat memilih semua baris dari tabel:

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

.

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

Bahkan jika ada nol baris dikembalikan, Anda akan mendapatkan nama bidang.

Jika tabel Anda memiliki lebih dari selusin baris, atau Anda tidak yakin, akan lebih berguna untuk memulai dengan jumlah baris untuk memahami berapa banyak data dalam database Anda:

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

.

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

Dan jangan sampai "1 baris" membingungkan Anda, itu hanya mewakili berapa banyak baris yang dikembalikan oleh permintaan, tetapi 1 baris berisi jumlah yang Anda inginkan, yaitu 0 dalam contoh ini.

CATATAN: db yang dibuat tanpa pemilik yang ditentukan akan dimiliki oleh pengguna saat ini.

Beritahu Sky
sumber
0

Saya mencoba beberapa solusi ini, tetapi mereka tidak cukup berhasil (meskipun mereka sangat di jalur yang benar!)

Pada akhirnya kesalahan saya adalah:

FATAL: otentikasi kata sandi gagal untuk pengguna

ketika saya menjalankan perintah berikut: psql

Jadi saya menjalankan dua perintah ini:

dropdb()
createdb()

CATATAN: ini akan menghapus db, tetapi saya tidak membutuhkannya dan untuk beberapa alasan saya tidak dapat lagi mengakses pqsl, jadi saya menghapus dan menciptakannya kembali. Kemudian psqlbekerja lagi.

Ben Cartwright
sumber
0

Tidak yakin apakah sudah ditambahkan dalam jawaban, Anatolii Stepaniuk menjawab sangat membantu yaitu sebagai berikut.

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

Mengalami masalah ini ketika menginstal postgresql via homebrew.

Harus membuat pengguna super "postgres" default dengan:

createuser - postgres interaktif menjawab y untuk untuk pengguna super

createuser - jawaban pengguna aktif untuk y untuk pengguna super

unom
sumber
-3

Saya masih memiliki masalah di atas setelah menginstal postgresql menggunakan homebrew - Saya mengatasinya dengan meletakkan / usr / local / bin di jalur saya sebelum / usr / bin

matw50
sumber
-12

Di dalamnya penjelasan yang paling sederhana; itu masalah noob. Hanya mengetik

tiang pancang

akan menghasilkan respons ini.

pgres <db_name> 

akan berhasil tanpa kesalahan jika pengguna memiliki izin untuk mengakses db.

Seseorang dapat masuk ke rincian variabel lingkungan yang diekspor tetapi itu tidak perlu .. ini terlalu mendasar untuk gagal karena alasan lain.

John Doe
sumber
5
Benar-benar tidak suka "jenis masalah noob"
Kimmo Hintikka
Juga tidak merekomendasikan cara mengatasi masalah, jadi tidak menjawab pertanyaan.
Deborah
1
tidak pernah mendengarpgres
Glenn Plas