Rails ve PostgreSQL: Rol postgres mevcut değil


106

PostgreSQL'i Mac OS Lion'uma kurdum ve bir ray uygulaması üzerinde çalışıyorum. Her şeyi diğer Rails uygulamalarımdan ayrı tutmak için RVM kullanıyorum.

Bazı nedenlerden dolayı, db'yi ilk kez taşımaya çalıştığımda komisyon postgres kullanıcısını bulamıyor. Hatayı alıyorum

 FATAL:  role "postgres" does not exist

PgAdmin'e sahibim, böylece DB'de bir postgres kullanıcısı var - aslında yönetici hesabı - bu yüzden başka ne yapacağımı bilmiyorum.

PostgreSQL'in hangi yoldan kurulduğundan dolayı sorunları olan insanlar hakkında bir yerlerde okudum, ancak db'yi bulamasaydı o kadar ileri gidemezdim.


postgresAynı hata mesajına yol açabilecek , DB kullanıcısının (= rol) oluşturulmadığı yakından ilişkili sorun için şu ilgili soruya bakın: stackoverflow.com/questions/11919391/…
Erwin Brandstetter

Yanıtlar:


12

Veritabanı kullanıcısı mevcut olmadığında bu mesaj açılır. Kılavuzu burada karşılaştırın .
Birden çok yerel veritabanı açıklama olamaz . Roller, küme çapında geçerlidir. Manuel tekrar :

Rollerin veritabanı kümesi düzeyinde tanımlandığını ve bu nedenle kümedeki tüm veritabanlarında geçerli olduğunu unutmayın.

Başka bir veritabanı kümesinde bitiyor olmalısınız . Bu, aynı makinede çalışan ve farklı bir bağlantı noktasını dinleyen başka bir sunucu olabilir. Veya daha büyük olasılıkla farklı bir makinede.

Mesaj aslında uzak sunucudan geliyor olabilir mi?


İşte buydu - postgresql'i çalışma dönemine almakta zorluk çekiyordum, bu yüzden yeni bir kurulum yaptım, bu yüzden şimdi burada birkaç örneğim olmalı. Yine de database.yml dosyasındaki bağlantı noktasını değiştirdi ve her şey yolunda gitti. Yardımınız için teşekkürler!
Adam

tüm resimleri temizledikten sonra bile çalışmadı - docker rmi $(docker images -q) --force. ama volumessanırım sorun vardı
duagupd

267

Aslında, bilinmeyen bir nedenden ötürü, sorunun aslında postgresql rolünün yaratılmamış olmasından kaynaklandığını buldum.

Koşmayı deneyin:

createuser -s -r postgres

Rollerin, PostgreSQL'in veritabanı izinlerini koruma yöntemi olduğunu unutmayın . Postgres kullanıcısı için bir rol yoksa, hiçbir şeye erişemez. Createuser komutu, CREATE USER, CREATE ROLE, vb. Komutları etrafında ince bir sarmalayıcıdır .


8
sudo su - postgresBu komut benim için çalışmadan önce kullanmak zorunda kaldım . Teşekkürler!
Connor Leech

2
Kurulumumun nasıl ortaya çıktığını bilmiyorum ama postgresql postgres kullanıcısı ve rolü olmadan oluşturuldu, myUser tek kullanıcı olarak, ancak myUser adlı veritabanının var olmadığı bahanesiyle içeri girmeme izin vermeyi reddettim! kargaşanın bu çözülmemiş kısmı!
Jerome

@StuartNelson: Bu, ortak bir sorunun çözümü gibi görünüyor ( burada da aynı ). Ancak bu sorunun cevabı belli ki değil . OP, rolün DB'sinde var olduğunu açıkça belirtiyor.
Erwin Brandstetter

Rolleri kullanıcılarla karıştırmanız dışında. Kullanıcı vardı, rol yoktu - rolün değil kullanıcının var olduğunu açıkça söylüyor .
Chris Sherlock

Bu -rseçenekle seçenek gerekli değildir -s. Süper kullanıcı, "Rol oluştur" özelliğini içerir.
Dennis

26

Son zamanlarda postgres yükledikten hemen sonra bu sorunu yaşadım. Kurulumdan hemen sonra gelirse, varsayılan kullanıcı olan postgres eksik olabilir. Bu durumda, aşağıdaki komutu kullanarak varsayılan kullanıcı postaları oluşturabilirsiniz.

createuser -s -U $ USER

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

Gerekli veritabanı rol adını ve şifresini girmenizi isteyecektir. İşlemi tamamladıktan sonra, aşağıdaki komutu kullanarak postgres konsoluna giriş yapabilirsiniz.

psql -U 'your_database_name'

Ör: psql -U postgres
Buraya, kullanıcıyı oluştururken vermişseniz şifreyi girmeniz gerekmektedir.

Umarım yardımcı olur :)


22

OSX 10.8'deydim ve denediğim her şey bana FATAL: role "USER" does not exist. Burada birçok insanın söylediği gibi koş createuser -s USER, ama bu bana aynı hatayı verdi. Bu nihayet benim için çalıştı:

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

createuser -s --username=postgresPostgres'e olarak (--username = Postgres bayrağı) bağlanarak bir süper (-s bayrak) oluşturur.

Sorunuzun yanıtlandığını görüyorum, ancak bu yanıtı OSX kullanan ve PostgreSQL 9.2.4'ü kurmaya çalışan kişiler için eklemek istiyorum.


2
İlk iki satırı kısaltabilirsiniz sudo su postgres.
6ft Dan


10

Bu sorunla Heroku'nun POSTGRES.app şeyini ilk yüklediğimde karşılaştım. Bir sabah deneme yanılma işleminden sonra sanırım bu tek satırlık kod problemi çözdü. Daha önce açıklandığı gibi, bunun nedeni postgresql'in ilk kurulduğunda varsayılan role sahip olmamasıdır. Ve bunu ayarlamamız gerekiyor.

sovanlandy=# CREATE ROLE postgres LOGIN;

Bu psql komutunu kullanmak için ilgili psql konsolunuzda oturum açmalısınız.

Ayrıca, 'postgre' rolünü zaten oluşturduysanız ancak yine de izin hataları alıyorsanız, komutla değişiklik yapmanız gerektiğini unutmayın:

sovanlandy=# ALTER ROLE postgres LOGIN;

Umarım yardımcı olur!


4

Heroku belgelerinde; Başlarken beyaz raylar 4 diyorlar:

Ayrıca, eğer varsa, database.yml'deki kullanıcı adı alanını kaldırmanız gerekecektir: config / database.yml dosyasında kaldır: username: myapp

Ardından, "geliştirme:" bölümünde bu satırı silersiniz, eğer pg, "uygulamam" rolü altında çalışan veritabanına söyler.

Bu satır raylara myapp_development veritabanının uygulamamın bir rolü altında çalıştırılması gerektiğini söyler. Veritabanınızda büyük olasılıkla bu role sahip olmadığınız için onu kaldıracağız. Remove Rails satırı ile veritabanına o anda bilgisayarda oturum açmış kullanıcı olarak erişmeye çalışacaktır.

Ayrıca geliştirme için veri tabanı oluşturmayı da unutmayın:

$createdb myapp_development

Uygulama adınız için "uygulamam" ı yeniden yazın


2

Birden fazla yerel veritabanınız olabilir mi? Kontrol edin database.ymlve istediğiniz pg db'ye ulaştığınızdan emin olun. rails consoleOnaylamak için kullanın .


2

Yükleme prosedürü postgres, varsayılan Postgres rolü ile ilişkilendirilmiş adında bir kullanıcı hesabı oluşturur . Postgres'i kullanmak için o hesapta oturum açabilirsiniz. Ancak, açıkça belirtilmediyse, rails uygulaması farklı bir rol arar, özellikle de unix kullanıcı adınıza sahip olan rol, postgres rollerinde oluşturulmamış olabilir.

Bunun üstesinden gelmek için, önce kurulum sırasında oluşturulan varsayılan rol postgres'e geçerek yeni bir rol oluşturabilirsiniz.

sudo -i -u postgres

Postgres hesabına giriş yaptıktan sonra, şu komutla yeni bir kullanıcı oluşturabilirsiniz:

createuser --interactive

Bu, bir kullanıcı oluşturmak için size bazı seçenekler soracak ve yanıtlarınıza göre doğru Postgres komutlarını uygulayacaktır.

Bir rol adı ve bazı izinleri aktarın ve rol oluşturulur, ardından veritabanınızı taşıyabilirsiniz


1

Cevabım çok daha basitti. Sadece db klasörüne gittim ve zorla oluşturmaya çalıştığım ama aslında otomatik olarak oluşturulan id sütununu sildim. Ayrıca database.yml dosyasındaki (config klasörü altında) USERNAME'i de sildim.


1

Ubuntu yerel kullanıcı komut isteminde, ancak kök kullanıcı değil, yazın

sudo -u postgres createuser kullanıcı adı

yukarıdaki kullanıcı adı, "FATAL: rol 'kullanıcı adı' mevcut değil" mesajında ​​belirtilen adla eşleşmelidir.

Kullanıcı adı için şifre girin.

Ardından, oluşturulan rolün mesajının olmadığı komutu tekrar girin.


0

Ryan Bate'in kauçukla AWS EC2'ye dağıtma konusundaki eğitimini takip etmeye çalıştıktan sonra buraya geldim. Benim başıma gelenler: "" kullanarak yeni bir uygulama oluşturduk

rails new blog -d postgresql

Açıktır ki bu, veritabanı olarak pg ile yeni bir uygulama oluşturur, ancak veritabanı henüz oluşturulmamıştır. Sqlite ile sadece rake db: migrate komutunu çalıştırırsınız, ancak pg ile önce pg veritabanını oluşturmanız gerekir. Ryan bu adımı yapmadı. Komutrake db:create:all , o zaman koşabilirizrake db:migrate

İkinci kısım, database.yml dosyasını değiştirmektir. Dosya oluşturulduğunda varsayılan kullanıcı adı 'appname'dir. Ancak, postgresql admin için rolünüz farklı bir şey olabilir (en azından benim içindi). Bunu kendi adıma değiştirdim (bir rol adı oluşturmayla ilgili yukarıdaki tavsiyelere bakın) ve gitmeye hazırım.

Bu yardımcı olur umarım.


0

Postgres'i kurduktan ve kaldırdıktan sonra, işte şimdi Os X Mavericks, Rails 4 ve Ruby 2 ile benim için tutarlı bir şekilde çalışıyor gibi görünüyor.

  1. Database.yml dosyasında, varsayılan kullanıcı adlarını bilgisayarımın kullanıcı adıyla değiştiriyorum ki benim için sadece "admin".

  2. Komut satırında rake db: create: all komutunu çalıştırıyorum

  3. Sonra rake db: migrate çalıştırıyorum

  4. Rails sunucusunu çalıştırdığımda ve yerel ana bilgisayarı kontrol ettiğimde, "Gemiye hoş geldiniz" diyor.


0

initdb -U postgres -D /path/to/dataVarsayılan olarak geçerli kullanıcı olduğu için, bunu kullanıcı postgres olarak çalıştırarak veya çalıştırarak bu sorunu çözebilirsiniz . GL!

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.