Rails dan PostgreSQL: Peran postgres tidak ada

106

Saya telah menginstal PostgreSQL di Mac OS Lion saya, dan saya sedang mengerjakan aplikasi rel. Saya menggunakan RVM untuk memisahkan semuanya dari aplikasi Rails saya yang lain.

Untuk beberapa alasan ketika saya mencoba untuk memigrasi db untuk pertama kalinya, rake tidak dapat menemukan pengguna postgres. Saya mendapatkan kesalahan

 FATAL:  role "postgres" does not exist

Saya memiliki pgAdmin sehingga saya dapat dengan jelas melihat ada pengguna postgres di DB - sebenarnya akun admin - jadi saya tidak yakin harus berbuat apa lagi.

Saya membaca di suatu tempat tentang orang-orang yang mengalami masalah dengan PostgreSQL karena di jalur mana ia diinstal, tetapi kemudian saya tidak berpikir saya akan sejauh itu jika tidak dapat menemukan db.

Adam
sumber
Untuk masalah terkait erat di mana pengguna DB (= peran) postgresbelum dibuat, yang dapat mengarah ke pesan kesalahan yang sama, lihat pertanyaan terkait ini: stackoverflow.com/questions/11919391/…
Erwin Brandstetter

Jawaban:

12

Pesan ini muncul, ketika pengguna database tidak ada. Bandingkan manualnya di sini .
Beberapa database lokal tidak bisa menjadi penjelasannya. Peran berlaku di seluruh kluster. The pengguna lagi :

Perhatikan bahwa peran ditentukan di tingkat cluster database, dan juga berlaku di semua database di cluster.

Anda harus berakhir di cluster database lain . Itu akan menjadi server lain yang berjalan pada mesin yang sama, mendengarkan port yang berbeda. Atau, lebih mungkin, di mesin lain.

Mungkinkah pesan itu sebenarnya berasal dari server jauh?

Erwin Brandstetter
sumber
Itu dia - Saya mengalami kesulitan untuk mendapatkan postgresql ke periode kerja jadi saya melakukan instalasi baru jadi saya harus memiliki beberapa contoh di sini sekarang. Mengubah port di file database.yml dan semuanya bekerja dengan baik. Terima kasih atas bantuan Anda!
Adam
tidak bekerja bahkan setelah membersihkan semua gambar - docker rmi $(docker images -q) --force. tetapi masalahnya ada pada volumessaya kira
prayagupd
267

Sebenarnya, untuk beberapa alasan yang tidak diketahui, saya menemukan masalah sebenarnya karena peran postgresql belum dibuat.

Coba jalankan:

createuser -s -r postgres

Perhatikan bahwa peran adalah cara PostgreSQL mempertahankan izin database . Jika tidak ada peran untuk pengguna postgres, maka tidak dapat mengakses apapun. Perintah createuser adalah pembungkus tipis di sekitar perintah CREATE USER, CREATE ROLE, dll.

Chris Sherlock
sumber
8
Saya harus menggunakan sudo su - postgressebelum perintah ini bekerja untuk saya. Terima kasih!
Connor Leech
2
Tidak tahu bagaimana set-up saya muncul tetapi saya telah membuat postgresql tanpa pengguna dan peran postgres, myUser sebagai satu-satunya pengguna, tetapi menolak untuk mengizinkan saya dengan dalih bahwa database bernama myUser tidak ada! bagian kekacauan yang terurai ini!
Jerome
@StuartNelson: Ini tampaknya menjadi solusi untuk masalah umum ( sama di sini ). Tapi itu jelas bukan jawaban untuk pertanyaan ini. OP dengan jelas menyatakan bahwa peran tersebut ada di DB-nya.
Erwin Brandstetter
Kecuali Anda mencampurkan peran dengan pengguna. Pengguna ada, peran tidak - dia mengatakan dengan jelas bahwa pengguna ada, bukan peran.
Chris Sherlock
The -rpilihan adalah tidak diperlukan dengan -spilihan. Pengguna super menyertakan atribut "Buat peran".
Dennis
26

Baru-baru ini saya mendapat masalah ini segera setelah menginstal postgres. Jika itu datang segera setelah instalasi, Anda mungkin kehilangan pengguna default, postgres. Dalam hal ini, Anda dapat membuat postgres pengguna default menggunakan perintah di bawah ini.

createuser -s -U $ USER

Ex: createuser -s -U $USER
enter your required role name: postgres
enter password for your the user: 

Ini akan meminta Anda untuk memasukkan nama peran dan kata sandi database yang diperlukan. Setelah Anda menyelesaikan proses, Anda dapat masuk ke konsol postgres menggunakan perintah di bawah ini.

psql -U 'your_database_name'

Contoh: psql -U postgres
Di sini, Anda harus memasukkan kata sandi jika Anda telah memberikannya, saat membuat pengguna.

Semoga membantu :)

Prem
sumber
22

Saya menggunakan OSX 10.8, dan semua yang saya coba akan memberi saya FATAL: role "USER" does not exist. Seperti yang dikatakan banyak orang di sini, lari createuser -s USER, tapi itu memberi saya kesalahan yang sama. Ini akhirnya berhasil untuk saya:

$ sudo su
# su postgres
# createuser -s --username=postgres MYUSERNAME

The createuser -s --username=postgresmenciptakan superuser (s flag) dengan menghubungkan sebagai postgres (--username = postgres flag).

Saya melihat bahwa pertanyaan Anda telah terjawab, tetapi saya ingin menambahkan jawaban ini untuk orang-orang yang menggunakan OSX yang mencoba menginstal PostgreSQL 9.2.4.

Mendongkrak
sumber
2
Anda dapat mempersingkat dua baris pertama menjadi sudo su postgres.
6 kaki Dan
Ini juga merupakan solusi bagi saya di ubuntu, jangan lupa untuk memperbarui database.yml Anda untuk menggunakan nama pengguna yang sama seperti di atas
crobicha
10

Saya menemukan masalah ini tepat ketika saya pertama kali menginstal hal POSTGRES.app Heroku. Setelah suatu pagi coba-coba, saya pikir satu baris kode ini memecahkan masalah. Seperti yang dijelaskan sebelumnya, ini karena postgresql tidak memiliki peran default saat pertama kali disiapkan. Dan kita perlu mengaturnya.

sovanlandy=# CREATE ROLE postgres LOGIN;

Anda harus masuk ke konsol psql masing-masing untuk menggunakan perintah psql ini.

Perhatikan juga bahwa, jika Anda sudah membuat peran 'postgre' tetapi masih mendapatkan kesalahan izin, Anda perlu mengubahnya dengan perintah:

sovanlandy=# ALTER ROLE postgres LOGIN;

Semoga membantu!

sovanlandy.dll
sumber
4

Dalam dokumentasi Heroku; Memulai dengan rel 4, mereka berkata:

Anda juga perlu menghapus kolom nama pengguna di database.yml Anda jika ada: Di file config / database.yml hapus: nama pengguna: myapp

Kemudian Anda hanya menghapus baris itu dalam "pengembangan:", jika Anda tidak memberitahu database yang bekerja di bawah peran "myapp"

Baris ini memberi tahu rel bahwa database myapp_development harus dijalankan di bawah peran myapp. Karena Anda mungkin tidak memiliki peran ini di database Anda, kami akan menghapusnya. Dengan menghapus baris Rails akan mencoba mengakses database sebagai pengguna yang sedang login ke komputer.

Ingat juga untuk membuat database untuk pengembangan:

$createdb myapp_development

Ganti "myapp" untuk nama aplikasi Anda

Yunrock
sumber
2

Bisakah Anda memiliki beberapa database lokal? Periksa Anda database.ymldan pastikan Anda mencapai pg db yang Anda inginkan. Gunakan rails consoleuntuk mengonfirmasi.

Jonathan Julian
sumber
2

Prosedur instalasi membuat akun pengguna yang disebut postgresyang terkait dengan peran Postgres default. Untuk menggunakan Postgres, Anda dapat masuk ke akun itu. Tetapi jika tidak ditentukan secara eksplisit, aplikasi rails mencari peran yang berbeda, terutama peran yang memiliki nama pengguna unix Anda yang mungkin tidak dibuat dalam peran postgres.

Untuk mengatasinya, Anda dapat membuat peran baru, pertama dengan beralih ke peran default postgres yang dibuat saat instalasi

sudo -i -u postgres

Setelah Anda masuk ke akun postgres, Anda dapat membuat pengguna baru dengan perintah:

createuser --interactive

Ini akan meminta Anda dengan beberapa pilihan dan, berdasarkan tanggapan Anda, jalankan perintah Postgres yang benar untuk membuat pengguna.

Lewati nama peran dan beberapa izin dan peran dibuat, Anda kemudian dapat memigrasi db Anda

Mayur
sumber
1

Jawaban saya jauh lebih sederhana. Pergi saja ke folder db dan hapus kolom id, yang telah saya coba buat dengan paksa, tetapi sebenarnya dibuat secara otomatis. Saya juga menghapus USERNAME di file database.yml (di bawah folder config).

maudulus
sumber
1

Di prompt perintah pengguna lokal Ubuntu, tetapi bukan pengguna root, ketik

sudo -u postgres buat nama pengguna

nama pengguna di atas harus sama dengan nama yang ditunjukkan dalam pesan "FATAL: peran 'nama pengguna' tidak ada."

Masukkan kata sandi untuk nama pengguna.

Kemudian masukkan kembali perintah yang dihasilkan peran pesan tidak ada.

Robert Cambil
sumber
0

Saya berakhir di sini setelah mencoba mengikuti tutorial Ryan Bate tentang penerapan ke AWS EC2 dengan karet. Inilah yang terjadi pada saya: Kami membuat aplikasi baru menggunakan "

rails new blog -d postgresql

Jelas ini membuat aplikasi baru dengan pg sebagai database, tetapi database belum dibuat. Dengan sqlite, Anda cukup menjalankan rake db: migrate, namun dengan pg Anda perlu membuat database pg terlebih dahulu. Ryan tidak melakukan langkah ini. Perintahnya adalah rake db:create:all, lalu kita bisa larirake db:migrate

Bagian kedua adalah mengubah file database.yml. Default untuk nama pengguna saat file dibuat adalah 'appname'. Namun, kemungkinan peran Anda untuk admin postgresql adalah sesuatu yang berbeda (setidaknya untuk saya). Saya mengubahnya menjadi nama saya (lihat saran di atas tentang membuat nama peran) dan saya siap melakukannya.

Semoga ini membantu.

Andrew Shenstone
sumber
0

Setelah banyak menginstal dan menghapus Postgres, inilah yang sekarang tampaknya berfungsi secara konsisten untuk saya dengan Os X Mavericks, Rails 4 dan Ruby 2.

  1. Di file database.yml, saya mengubah nama pengguna default menjadi nama pengguna komputer saya yang bagi saya hanya "admin".

  2. Pada baris perintah saya menjalankan rake db: create: all

  3. Lalu saya menjalankan rake db: migrate

  4. Ketika saya menjalankan server rails dan memeriksa host lokal dikatakan "Selamat datang di kapal".

Michael van Holst
sumber
0

Anda mungkin dapat mengatasinya dengan menjalankan initdb -U postgres -D /path/to/dataatau menjalankannya sebagai user postgres, karena defaultnya adalah pengguna saat ini. GL!

rogerdpack
sumber