रेल्स और पोस्टग्रेक्यूएल: भूमिका पोस्टग्रेज मौजूद नहीं है


106

मैंने अपने मैक ओएस लॉयन पर PostgreSQL स्थापित किया है, और एक रेल ऐप पर काम कर रहा हूं। मैं अपने अन्य रेल ऐप्स से सब कुछ अलग रखने के लिए आरवीएम का उपयोग करता हूं।

किसी कारण से जब मैं पहली बार db को माइग्रेट करने की कोशिश करता हूं तो रेक पोस्टग्रेज उपयोगकर्ता को नहीं मिल पाता है। मुझे त्रुटि मिलती है

 FATAL:  role "postgres" does not exist

मेरे पास pgAdmin है इसलिए मैं स्पष्ट रूप से देख सकता हूं कि DB में एक पोस्टग्रेज उपयोगकर्ता है - वास्तव में व्यवस्थापक खाता - तो मुझे यकीन नहीं है कि क्या करना है।

मैंने कहीं न कहीं लोगों के बारे में पढ़ा है जिनके पास PostgreSQL के साथ समस्या थी क्योंकि यह किस रास्ते में स्थापित किया गया था, लेकिन फिर मुझे नहीं लगता कि मुझे वह मिल जाता, अगर वह db नहीं खोज पाता।


बारीकी से संबंधित समस्या के लिए जहां DB उपयोगकर्ता (= भूमिका) postgresनहीं बनाई गई है, जिससे एक ही त्रुटि संदेश हो सकता है, इस संबंधित प्रश्न को देखें: stackoverflow.com/questions/11919391/…
Erwin Brandstetter

जवाबों:


12

यह संदेश तब आता है, जब डेटाबेस उपयोगकर्ता मौजूद नहीं होता है। यहां मैनुअल की तुलना करें
एकाधिक स्थानीय डेटाबेस स्पष्टीकरण नहीं हो सकते । रोल्स वैध क्लस्टर-वाइड हैं। मैनुअल फिर से :

ध्यान दें कि भूमिकाएँ डेटाबेस क्लस्टर स्तर पर परिभाषित की जाती हैं, और इसलिए क्लस्टर में सभी डेटाबेस में मान्य हैं।

आपको किसी अन्य डेटाबेस-क्लस्टर में समाप्त होना चाहिए । यह उसी मशीन पर चलने वाला एक अन्य सर्वर होगा, जो एक अलग पोर्ट को सुनता है। या, अधिक संभावना है, एक अलग मशीन पर।

क्या ऐसा हो सकता है कि संदेश, वास्तव में, रिमोट सर्वर से आता है?


वह यह था - मुझे कार्य अवधि के लिए पोस्टग्रैक्स्ल प्राप्त करने में कठिनाई हो रही है, इसलिए मैंने एक नई स्थापना की, इसलिए मुझे अब यहां कुछ उदाहरण देना होगा। हालांकि डेटाबेस में पोर्ट बदल दिया है। फ़ाइल में फ़ाइल है और यह सब ठीक काम किया है। आपकी सहायताके लिए धन्यवाद!
एडम

सभी छवियों को साफ करने के बाद भी काम नहीं किया - docker rmi $(docker images -q) --force। लेकिन मुद्दा volumesमैं अनुमान पर था
प्रयागपाद

267

दरअसल, किसी अज्ञात कारण से, मैंने पाया कि मुद्दा वास्तव में था क्योंकि पोस्टग्रैस्कल भूमिका नहीं बनाई गई थी।

चलाने की कोशिश करें:

createuser -s -r postgres

ध्यान दें कि भूमिकाएँ वह तरीका है जो PostgreSQL डेटाबेस अनुमतियों को बनाए रखता है । यदि पोस्टग्रेज उपयोगकर्ता के लिए कोई भूमिका नहीं है, तो वह कुछ भी एक्सेस नहीं कर सकता है। Createuser कमांड कमांड क्रिएट USER, CREATE ROLE इत्यादि के आसपास एक पतला आवरण है


8
sudo su - postgresइस कमांड को मेरे लिए काम करने से पहले मुझे इस्तेमाल करना था । धन्यवाद!
कोनर लीच

2
पता नहीं कैसे मेरे सेट-अप के बारे में आया था, लेकिन मैंने पोस्टग्रेजेक को उपयोगकर्ता और भूमिका के बिना पोस्ट किया था, केवल उपयोगकर्ता के रूप में myUser, लेकिन मुझे इस बहाने से इनकार कर दिया कि myUser नाम का डेटाबेस अपरिहार्य था! तबाही का यह नायाब हिस्सा!
जेरोम

@StuartNelson: यह एक सामान्य समस्या का समाधान लगता है ( यहाँ भी )। लेकिन यह स्पष्ट रूप से इस सवाल का जवाब नहीं है। ओपी स्पष्ट रूप से कहता है कि भूमिका उसकी DB में मौजूद थी।
एरविन ब्रांडस्टेट्टर

सिवाय इसके कि आप उपयोगकर्ताओं के साथ भूमिकाएँ कबूल कर रहे हैं। उपयोगकर्ता मौजूद था, भूमिका नहीं थी - वह स्पष्ट रूप से कहता है कि उपयोगकर्ता मौजूद है, भूमिका नहीं।
क्रिस शरलॉक

-rविकल्प के साथ आवश्यक नहीं है -sविकल्प। Superuser में "Create role" विशेषता शामिल है।
डेनिस

26

हाल ही में मुझे पोस्टग्रेज स्थापित करने के तुरंत बाद यह समस्या हुई। यदि यह स्थापना के तुरंत बाद आता है, तो आप डिफ़ॉल्ट उपयोगकर्ता को याद कर सकते हैं, पोस्टग्रेज कर सकते हैं। उस स्थिति में, आप नीचे कमांड का उपयोग करके डिफ़ॉल्ट उपयोगकर्ता पोस्टग्रेज बना सकते हैं।

createuser -s -U $ USER

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

यह आपको आवश्यक डेटाबेस रोल नाम और पासवर्ड दर्ज करने के लिए संकेत देगा। एक बार जब आप प्रक्रिया पूरी कर लेते हैं, तो आप कमांड का उपयोग करके पोस्टग्रेज कंसोल पर लॉगिन कर सकते हैं

psql -U 'your_database_name'

Ex: psql -U postgres
Here, उपयोगकर्ता बनाते समय, यदि आपने कोई दिया है, तो आपको पासवर्ड दर्ज करने की आवश्यकता है।

आशा करता हूँ की ये काम करेगा :)


22

मैं OSX 10.8 पर था, और मैंने जो कुछ भी कोशिश की वह मुझे दे दिया FATAL: role "USER" does not exist। जैसे कई लोगों ने यहां कहा, भागो createuser -s USER, लेकिन इससे मुझे वही त्रुटि मिली। यह अंत में मेरे लिए काम किया:

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

createuser -s --username=postgresएक सुपर उपयोगकर्ता (-s झंडा) postgres के रूप में (--username = postgres झंडा) को जोड़ने के द्वारा पैदा करता है।

मैं देखता हूं कि आपके प्रश्न का उत्तर दे दिया गया है, लेकिन मैं इस जवाब को उन लोगों के लिए जोड़ना चाहता हूं जो OSX का उपयोग करके PostgreSQL 9.2.4 स्थापित करने की कोशिश कर रहे हैं।


2
आप पहली दो पंक्तियों को छोटा कर सकते हैं sudo su postgres
6 फीट डैन

यह भी ubuntu पर मेरे लिए समाधान था, ऊपर के रूप में एक ही उपयोगकर्ता नाम का उपयोग करने के लिए अपने database.yml अद्यतन करने के लिए मत भूलना
crobicha

10

मैं इस मुद्दे पर सही तब उपस्थित हुआ जब मैंने पहली बार हरोकू के POSTGRES.app चीज को स्थापित किया। एक सुबह परीक्षण और त्रुटि के बाद मुझे लगता है कि कोड की एक समस्या हल हो गई है। जैसा कि पहले बताया गया है, इसका कारण यह है कि पोस्टग्रैस्कल की पहली बार तयशुदा भूमिका नहीं होती है। और हमें इसे निर्धारित करने की आवश्यकता है।

sovanlandy=# CREATE ROLE postgres LOGIN;

इस psql कमांड का उपयोग करने के लिए आपको अपने संबंधित psql कंसोल में लॉग इन करना होगा।

यह भी कहा कि, यदि आपने पहले ही 'पोस्टग्रे' भूमिका बना ली है, लेकिन अभी भी अनुमति त्रुटियां हैं, तो आपको कमांड के साथ परिवर्तन करने की आवश्यकता है:

sovanlandy=# ALTER ROLE postgres LOGIN;

आशा करता हूँ की ये काम करेगा!


4

हेरोकू प्रलेखन में; शुरू हो रही है सफ़ेद रेल 4, वे कहते हैं:

आपको अपने डेटाबेस में उपयोगकर्ता नाम फ़ील्ड को हटाने की भी आवश्यकता होगी। यदि कोई ऐसा है तो: फ़ाइल कॉन्फिगर / डेटाबेस में रखें। निकालें: उपयोगकर्ता नाम: myapp

तब आप बस उस लाइन को "विकास:" में हटा देते हैं, यदि आप उस डेटाबेस को नहीं बताते हैं जो "myapp" के तहत काम करता है

यह पंक्ति रेल को बताती है कि डेटाबेस myapp_development को myapp की भूमिका के तहत चलाया जाना चाहिए। चूँकि आपके डेटाबेस में यह भूमिका नहीं है, इसलिए हम इसे हटा देंगे। लाइन हटाए जाने के साथ रेल डेटाबेस को उपयोगकर्ता के रूप में एक्सेस करने का प्रयास करेगा, जो वर्तमान में कंप्यूटर में लॉग इन है।

विकास के लिए डेटाबेस बनाना भी याद रखें:

$createdb myapp_development

अपने ऐप के नाम के लिए "myapp" की प्रतिकृति बनाएं


2

क्या आपके पास कई स्थानीय डेटाबेस हो सकते हैं? अपनी जाँच करें database.ymlऔर सुनिश्चित करें कि आप चाहते हैं कि पीजी डीबी मार रहे हैं। rails consoleपुष्टि करने के लिए उपयोग करें।


2

इंस्टॉलेशन प्रक्रिया उपयोगकर्ता खाता बनाती है जिसे postgresडिफ़ॉल्ट पोस्टग्रेज भूमिका के साथ जोड़ा जाता है। Postgres का उपयोग करने के लिए, आप उस खाते में लॉग इन कर सकते हैं। लेकिन यदि स्पष्ट रूप से निर्दिष्ट नहीं किया गया है तो रेल ऐप एक अलग भूमिका के लिए दिखता है, विशेष रूप से भूमिका आपके यूनिक्स उपयोगकर्ता नाम की है जो पोस्टग्रेज भूमिकाओं में नहीं बनाई जा सकती है।

इसे दूर करने के लिए, आप एक नई भूमिका बना सकते हैं, सबसे पहले डिफ़ॉल्ट भूमिका पर स्विच करके जो स्थापना के दौरान बनाई गई थी

sudo -i -u postgres

पोस्टग्रेज खाते में लॉग इन करने के बाद, आप कमांड द्वारा एक नया उपयोगकर्ता बना सकते हैं:

createuser --interactive

यह आपको कुछ विकल्पों के साथ संकेत देगा और आपकी प्रतिक्रियाओं के आधार पर, उपयोगकर्ता बनाने के लिए सही पोस्टग्रैज कमांड को निष्पादित करेगा।

एक भूमिका नाम और कुछ अनुमतियों के ऊपर से गुजरें और भूमिका बनाई जाए, तो आप अपने db को माइग्रेट कर सकते हैं


1

मेरा जवाब बहुत आसान था। बस डीबी फ़ोल्डर में गया और आईडी कॉलम को हटा दिया, जिसे मैंने जबरदस्ती बनाने की कोशिश की थी, लेकिन जो वास्तव में स्वचालित रूप से बनाया गया है। मैंने database.yml फ़ाइल (कॉन्फ़िग फ़ोल्डर के तहत) में USERNAME को भी हटा दिया है।


1

Ubuntu स्थानीय उपयोगकर्ता कमांड प्रॉम्प्ट में, लेकिन रूट उपयोगकर्ता नहीं, टाइप करें

sudo -u postuser उपयोगकर्ता नाम को प्रेषित करता है

उपर्युक्त उपयोगकर्ता नाम "FATAL: भूमिका 'उपयोगकर्ता नाम मौजूद नहीं है" संदेश में दिए गए नाम से मेल खाना चाहिए।

उपयोगकर्ता नाम का पासवर्ड दर्ज करें।

फिर कमांड को फिर से दर्ज करें जो उत्पन्न हुई भूमिका में संदेश मौजूद नहीं है।


0

रबर के साथ AWS EC2 पर तैनात करने पर रयान बेट के ट्यूटोरियल का पालन करने का प्रयास करने के बाद मैं यहां समाप्त हुआ। यहाँ मेरे लिए क्या हुआ: हमने एक नया ऐप बनाया जिसका उपयोग करके "

rails new blog -d postgresql

Obviosuly यह डेटाबेस के रूप में pg के साथ एक नया ऐप बनाता है, लेकिन डेटाबेस अभी तक नहीं बनाया गया था। Sqlite के साथ, आप बस रेक db चलाते हैं: माइग्रेट करें, हालाँकि pg के साथ आपको पहले pg डेटाबेस बनाने की आवश्यकता है। रयान ने यह कदम नहीं उठाया। आज्ञा है rake db:create:all, तो हम चला सकते हैंrake db:migrate

दूसरा भाग database.yml फ़ाइल को बदल रहा है। फ़ाइल उत्पन्न होने पर उपयोगकर्ता नाम के लिए डिफ़ॉल्ट 'appname' है। हालाँकि, संभावना है कि पोस्टग्रैक्स्ल एडमिन के लिए आपकी भूमिका कुछ अलग है (कम से कम यह मेरे लिए था)। मैंने इसे अपने नाम में बदल दिया (भूमिका नाम बनाने के बारे में उपरोक्त सलाह देखें) और मैं जाने के लिए अच्छा था।

उम्मीद है की यह मदद करेगा।


0

Postgres की स्थापना और स्थापना रद्द करने के बाद, यहाँ अब मेरे लिए Os X Mavericks, Rails 4 और Ruby 2 के साथ लगातार काम करने की संभावना है।

  1. Database.yml फ़ाइल में, मैं अपने कंप्यूटर के उपयोगकर्ता नाम के लिए डिफ़ॉल्ट उपयोगकर्ता नाम बदलता हूं जो मेरे लिए सिर्फ "व्यवस्थापक" है।

  2. कमांड लाइन में मैं रेक db चलाता हूं: create: all

  3. फिर मैं रेक डीबी चलाता हूं: माइग्रेट करता हूं

  4. जब मैं रेल सर्वर चलाता हूं और स्थानीय होस्ट की जांच करता हूं तो यह कहता है कि "वेलकम सवार"।


0

आप initdb -U postgres -D /path/to/dataइसे चालू करके या उपयोगकर्ता के रूप में पोस्ट करके इसे चलाने में सक्षम हो सकते हैं , क्योंकि यह वर्तमान उपयोगकर्ता के लिए चूक है। जीएल!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.