psql: FATAL: भूमिका "पोस्टग्रेज" मौजूद नहीं है


404

मैं नौसिखिया हूं।

मैंने मैक के लिए postgres.app स्थापित किया। मैं psql कमांड के साथ खेल रहा था और मैंने गलती से पोस्टग्रेज डेटाबेस को गिरा दिया। मुझे नहीं पता कि इसमें क्या था।

मैं वर्तमान में एक ट्यूटोरियल पर काम कर रहा हूं: http://www.rosslaird.com/blog/building-a-project-with-mezzanine/

और मैं फंस गया हूं sudo -u postgres psql postgres

त्रुटि संदेश: psql: FATAL: role "postgres" does not exist

$ जो psql

/Applications/Postgres.app/Contents/MacOS/bin/psql

इसी से प्रिंट निकलता है psql -l

                                List of databases
    Name    |   Owner    | Encoding | Collate | Ctype |     Access privileges     
------------+------------+----------+---------+-------+---------------------------
 user       | user       | UTF8     | en_US   | en_US | 
 template0  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
 template1  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
(3 rows)

तो मुझे क्या कदम उठाने चाहिए? Psql से संबंधित सभी चीज़ों को हटा दें और सब कुछ पुनर्स्थापित करें?

मदद के लिए बहुत शुक्रिया दोस्तों!


1
कंप्यूटर को पुनरारंभ करना। लॉन्च से सुनिश्चित करता है brew services start postresqlकि निष्पादित किया गया है।
माइकल डिमिट

जवाबों:


409

नोट: यदि आपने होमब्रे का उपयोग करके पोस्टग्रेज स्थापित किए हैं, तो नीचे दिए गए @ user3402754 से टिप्पणी देखें।

ध्यान दें कि त्रुटि संदेश लापता डेटाबेस के बारे में बात नहीं करता है , यह एक लापता भूमिका के बारे में बात करता है। बाद में लॉगिन प्रक्रिया में यह लापता डेटाबेस पर भी ठोकर खा सकता है।

लेकिन पहला कदम गायब भूमिका की जांच करना है: psqlकमांड के भीतर आउटपुट क्या है \du? मेरे उबंटू सिस्टम पर संबंधित लाइन इस तरह दिखती है:

                              List of roles
 Role name |            Attributes             | Member of 
-----------+-----------------------------------+-----------
 postgres  | Superuser, Create role, Create DB | {}        

यदि कम से कम एक भूमिका नहीं है superuser, तो आपको एक समस्या है :-)

यदि एक है, तो आप लॉगिन करने के लिए इसका उपयोग कर सकते हैं। और आपके \lकमांड के आउटपुट को देखते हुए : सुपरयूजर के लिए मेरे उबंटू सिस्टम पर और डेटाबेस userपर अनुमतियाँ समान हैं । तो मुझे लगता है कि सुपरस्टार के रूप में आपका सेटअप सरल उपयोग करता है । तो आप इस कमांड को लॉगिन करने की कोशिश कर सकते हैं:template0template1postgresuser

sudo -u user psql user

यदि userवास्तव में DB सुपरयुसर है तो आप उसके लिए एक और DB सुपरयुसर और एक निजी, खाली डेटाबेस बना सकते हैं:

CREATE USER postgres SUPERUSER;
CREATE DATABASE postgres WITH OWNER postgres;

लेकिन जब से आपके postgres.app सेटअप ऐसा नहीं लगता है, तो आपको भी नहीं करना चाहिए। ट्यूटोरियल को सरल बनाएं।


10
मेरे लिए, उपयोगकर्ता नहीं बनाया जा रहा था - यह पोस्ट CREATE USER postgres WITH SUPERUSER PASSWORD 'password'; v10 का उपयोग करने के बजाय काम कर रहा है।
1

228
यदि आपने Postgres स्थापित किया है homebrewतो आपको /usr/local/opt/postgres/bin/createuser -s postgresअपने टर्मिनल
user3402754

7
मुझे चलाना था/usr/local/opt/postgresql/bin/createuser -s postgres
user1807782

1
@ user1807782 आपने मेरा दिन बचाया; मुझे लगता है कि आपको इसका जवाब के रूप में विज्ञापन देना चाहिए।
Tolga

1
यदि आप पोस्टग्रेज के एक विशिष्ट संस्करण का उपयोग कर रहे हैं, तो आपको मार्ग को संस्करण में शामिल करने की आवश्यकता है -/usr/local/opt/postgresql@11/bin/createuser -s postgres
डिजिट्रांस

264

कुंजी "मैंने मैक के लिए postgres.app स्थापित किया है।" यह एप्लिकेशन डेटाबेस सुपरसुसर के साथ स्थानीय पोस्टग्रेएसक्यूएल इंस्टॉलेशन सेट करता है जिसकी भूमिका का नाम आपके लॉगिन (संक्षिप्त) नाम के समान है।

जब Postgres.app पहले शुरू होता है, तो यह $ USER डेटाबेस बनाता है, जो कि कोई भी निर्दिष्ट नहीं होने पर psql के लिए डिफ़ॉल्ट डेटाबेस है। डिफ़ॉल्ट उपयोगकर्ता $ USER है, जिसमें कोई पासवर्ड नहीं है।

कुछ स्क्रिप्ट्स (जैसे, pgdumpलिनक्स सिस्टेम पर बना डेटाबेस बैकअप ) और ट्यूटोरियल मान लेंगे कि सुपरयुसर के पास पारंपरिक भूमिका नाम है postgres

आप अपने स्थानीय इंस्टॉलेशन को थोड़ा अधिक पारंपरिक बना सकते हैं और एक बार करके इन समस्याओं से बच सकते हैं:

/Applications/Postgres.app/Contents/Versions/9.*/bin/createuser -s postgres

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


119
यदि आप होमब्रे से पोस्टग्रेज का उपयोग कर रहे हैं, तो आप चाहते हैं /usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres(संस्करण 9.2.4 के लिए, जाहिर है)।
रोजर लिप्सकॉम्ब

1
Postgres.app 9.3 के लिए, वे निर्देशिकाओं को फिर से व्यवस्थित करते हैं। मैंने कोशिश की: /Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres, लेकिन इसने एक ही एरर संदेश उत्पन्न किया: "Createuser: डेटाबेस से कनेक्ट नहीं हो सका पोस्टग्रैट्स: FATAL: role" postgres "मौजूद नहीं है" "
माइकल कॉक्सन

7
/Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgresमेरे लिए सही ढंग से चला।
cjspurgeon

9
@RogerLipscombe यदि आप brew link postgresqlस्थापना के बाद चलाते हैं , तो पूरे रास्ते को जोड़ने की कोई आवश्यकता नहीं है createuser, एक सरल createuser -s postgresकाम करेगा
AlessioX

2
createuser -s postgresमेरे लिए काम किया। मैंने
होमब्रेव के

227

मैक के लिए:

  1. Homebrew स्थापित करें
  2. brew install postgres
  3. initdb /usr/local/var/postgres
  4. /usr/local/Cellar/postgresql/<version>/bin/createuser -s postgresया /usr/local/opt/postgres/bin/createuser -s postgresजो केवल नवीनतम संस्करण का उपयोग करेगा।
  5. सर्वर को मैन्युअल रूप से पोस्ट करना शुरू करें: pg_ctl -D /usr/local/var/postgres start

स्टार्टअप पर सर्वर शुरू करने के लिए

  • mkdir -p ~/Library/LaunchAgents
  • ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
  • launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

अब, इसे स्थापित किया गया है, psql -U postgres -h localhostGUI के लिए PgAdmin का उपयोग करके या लॉगिन करें।

डिफ़ॉल्ट रूप से उपयोगकर्ता के postgresपास कोई लॉगिन पासवर्ड नहीं होगा।

इस तरह के और अधिक लेखों के लिए इस साइट की जाँच करें: https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7


3
नवीनतम स्थापित काढ़ा के साथ आप कर सकते हैं brew services start postgresqlpostgres शुरू करने के लिए
Automatico

<3 <3 <3 <3 <3 <3
आदिल अहमद

यह सबसे अच्छा जवाब है
अलेजांद्रो पाब्लो तकाचुक

39
createuser postgres --interactive

या बस के साथ एक सुपरयुसर पोस्टग्रेजल बनाएं

createuser postgres -s


मुझे यह उत्तर तब उपयोगी लगा जब मेरा pgadmin उपयोगकर्ता को पोस्टग्रेज करने के लिए कहता रहा और मैंने शुरू करने के लिए पोस्टग्रेज की भूमिका निभाई, इस कमांड ने इसे बनाया, मैंने अपने pgadmin में autogenerated pw को जोड़ा और समस्या हल हो गई!
theusual

यह मेरे लिए काम करता है .. लेकिन इस तरह से: "उपयोगकर्ता को बनाए पोस्टग्रैज"
रॉबर्टो रॉड्रिग्ज़

31

यह तब होता है जब आप initdbउस उपयोगकर्ता के साथ चलते हैं postgres, जिसकी आईडी postgresउपयोगकर्ता नाम के साथ --username=postgresया उसके बिना निर्दिष्ट नहीं है -U postgres

डेटाबेस क्लस्टर तब सिस्टम के उपयोगकर्ता खाते के साथ बनाया जाता है जिसे आप initdb चलाते थे, और इसे सुपरयूज़र अनुमतियाँ दी जाती हैं।

इसे ठीक करने के लिए, पोस्टग्रेज के साथ आने वाली उपयोगिता का उपयोग करके postgresविकल्प के साथ एक नया उपयोगकर्ता बनाएं । उपयोगिता Postgres ' निर्देशिका में पाया जा सकता है । जैसे--superusercreateuserbin

createuser --superuser postgres

यदि आपके पास एक कस्टम होस्टनाम या पोर्ट है तो उचित विकल्प सेट करना सुनिश्चित करें

Initdb द्वारा आपके लिए बनाए गए दूसरे उपयोगकर्ता खाते को हटाना न भूलें।


2
यह सबसे अधिक जानकारीपूर्ण उत्तर है।
MyWrathAcademia

17

मेरे लिए, इस कोड ने काम किया:

/Applications/Postgres.app/Contents/Versions/9.4/bin/createuser -s postgres

यह यहाँ से आया: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4


मेरे लिए भी काम करता है! तुमने मेरी बेकन बचा ली।
डेव मुंगेर

1
मुझे भूमिका मिलती है "मुझे" मौजूद नहीं है
SuperUberDuper

क्या इसका मतलब यह है कि यह नया पॉजिशन यूजर के पास पासवर्ड नहीं होगा?
olaoluwa_98

16

मुझे परेशान करने की जरूरत है $PGUSER:

$ unset PGUSER
$ createuser -s postgres

1
ओह यार, आखिरकार क्या मुद्दा था। यह मुड़ता है कि आप उपयोगकर्ता पोस्टग्रेज के रूप में उपयोगकर्ता पोस्टग्रैज बनाने की कोशिश कर रहे हैं
तारास मत्स्यक

14

पहले आपको एक उपयोगकर्ता बनाने की आवश्यकता है:

sudo -u postgres createuser --superuser $USER

डेटाबेस बनाने के बाद :

sudo -u postgres createdb $USER

$USERअपना सिस्टम उपयोगकर्ता नाम बदलें

आप पूरा समाधान यहाँ देख सकते हैं ।


8

कमांड लाइन पर इसे चलाने से इसे ठीक करना चाहिए

/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>


1
यह केवल एक चीज है जो मेरे लिए काम करती है। धन्यवाद!
हर्ब मीहान

4

postgresडेटाबेस को गिराना वास्तव में कोई मायने नहीं रखता है। यह डेटाबेस शुरू में खाली है और इसका उद्देश्य केवल postgresउपयोगकर्ता को कनेक्ट करने के लिए "होम" का एक प्रकार होना चाहिए, क्या इसकी आवश्यकता होनी चाहिए।

फिर भी आप इसे SQL कमांड के साथ फिर से बना सकते हैं CREATE DATABASE postgres;

ध्यान दें कि प्रश्न में उल्लिखित ट्यूटोरियल postgres.appको ध्यान में रखकर नहीं लिखा गया है। सामान्य रूप से यूनिक्स के लिए PostgreSQL के विपरीत, postgres.appएक सामान्य एप्लिकेशन की तरह एक सेवा के विपरीत दिखने की कोशिश करता है जो कि एक समर्पित postgresउपयोगकर्ता द्वारा आपके सामान्य उपयोगकर्ता की तुलना में अलग विशेषाधिकार होने पर चलाया जाएगा । postgres.appचलाया जाता है और अपने खाते द्वारा प्रबंधित किया जाता है।

इसलिए इस आदेश के बजाय: sudo -u postgres psql -U postgresयह केवल पोस्ट करने के लिए postgres.app की भावना में अधिक होगा: psqlजो स्वचालित रूप से आपके उपयोगकर्ताओं के नाम से मेल खाने वाले डेटाबेस से जुड़ता है, और उसी नाम के db खाते के साथ जो सुपरसुसर होता है, इसलिए यह कुछ भी अनुमति-वार कर सकता है।


ठीक है। लेकिन ERROR: cannot drop the currently open databaseजब मैं उपयोगकर्ता डीबी को हटाने की कोशिश करता हूं तो मुझे एक त्रुटि क्यों मिलती है ? तो क्या इस postgres.app का उपयोग करना एक अच्छा अभ्यास नहीं है?
user805981

इससे कनेक्ट होने के दौरान आप एक db ड्रॉप नहीं कर सकते। आप इसे वैसे भी हटाना क्यों चाहेंगे? यह आपकी सुविधा के लिए यहां है।
डैनियल वैराइटी

मैं बस यह देखना चाहता था कि क्या मैं कर सकता था। जब मैं अपने psql को बूट करता हूं और post.esapp करता हूं तो यह एक डिफ़ॉल्ट डेटाबेस की तरह सही होता है? अब एक्सेस विशेषाधिकार के बारे में क्या? मैं अब उन्हें सेट करने में सक्षम नहीं हूं? मैं देख रहा हूं कि टेम्प्लेट 0 और टेम्प्लेट की एक्सेस विशेषाधिकार हैं
user805981

@ user805981 Postgres.appपरीक्षण और विकास उद्देश्यों के लिए है; यह Heroku का एक PostgreSQL पैकेज है जिसे मैक उपयोगकर्ताओं के लिए रूबी के साथ रूबी के साथ विकसित करने के लिए डिज़ाइन किया गया है ताकि डिफ़ॉल्ट SQLite के बजाय PostgreSQL के साथ परीक्षण कर सकें। रेल्स ने SQLite के साथ परीक्षण करने और PostgreSQL को तैनात करने के लिए उपयोग किया, जो सभी प्रकार की समस्याओं का कारण बना, इसलिए Heroku ने PostgreSQL पर परीक्षण करना आसान बनाने का प्रयास किया। Postgres.appपरीक्षण के लिए ठीक है, लेकिन मैं इसे उत्पादन या वास्तविक डेटा के लिए उपयोग करने पर विचार नहीं करूंगा, बस यही नहीं है।
क्रेग रिंगर

4

इसके लायक होने के लिए, मेरे पास ubuntu और कई पैकेज स्थापित हैं और यह इसके साथ संघर्ष में चला गया।

मेरे लिए सही उत्तर था:

sudo -i -u postgres-xc
psql

2

यह केवल एक ही है जिसने इसे मेरे लिए निर्धारित किया है:

createuser -s -U $USER

2
यह वर्तमान उपयोगकर्ता को केवल एक पोस्टग्रुप सुपरयुसर के बजाय एक सिस्टम सुपरयुसर बनाता है। मैं कहूंगा कि यह आम तौर पर एक बुरा विचार होगा क्योंकि यह सामान्य सुरक्षा नीतियों को दरकिनार करता है। आपको sudoअस्थायी सुपरयुसर विशेषाधिकार प्राप्त करने के लिए उपयोगकर्ता होना चाहिए ।
शॉन डॉसन

1

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

सलाह - सुरक्षित होने के लिए डेटाबेस का बैकअप लें।


0

मुझे नहीं लगता कि sudo की यहाँ ज़रूरत है क्योंकि psll -l डेटाबेस की एक सूची देता है। यह मुझे बताता है कि initdb उपयोगकर्ता के वर्तमान उपयोगकर्ता के तहत चलाया गया था, पोस्टग्रेज उपयोगकर्ता के तहत नहीं।

आप बस कर सकते हैं:

psql

और ट्यूटोरियल जारी रखें।

मैं सुझाव देता हूं कि एएच के सामान्य बिंदु पोस्टग्रेज उपयोगकर्ता और डीबी बनाने के लिए होगा क्योंकि कई एप्लिकेशन यह मौजूद होने की उम्मीद कर सकते हैं।

एक संक्षिप्त विवरण:

PostgreSQL ऑपरेटिंग सिस्टम के लिए प्रशासनिक पहुँच के साथ नहीं चलेगा। इसके बजाय यह एक साधारण उपयोगकर्ता के साथ चलता है, और सहकर्मी प्रमाणीकरण का समर्थन करने के लिए (ओएस जो कनेक्ट करने का प्रयास कर रहा है) से पूछकर यह एक उपयोगकर्ता बनाता है और आरम्भिक प्रक्रिया को चलाने वाले उपयोगकर्ता के साथ db करता है। इस मामले में यह आपका सामान्य उपयोगकर्ता था।


पोस्टग्रेज में कुछ महत्वपूर्ण अंतर को साफ करता है। धन्यवाद।
imsrgadich

0

मैं इस मुद्दे पर brew services stop postgresqlपहले दिन निष्पादित होने पर अटक गया ।
अगले दिन: brew services start postgresqlकाम नहीं करेगा। ऐसा इसलिए है क्योंकि जब आप होमब्रे का उपयोग करके इंस्टॉल करते हैं तो दिखाया जाता है। postgresql एक लॉन्च का उपयोग करता है ... जो आपके कंप्यूटर पर संचालित होने पर लोड करता है।

रिज़ॉल्यूशन:
brew services start postgresql
अपने कंप्यूटर को पुनरारंभ करें।


0

\duआदेश वापसी:

भूमिका नाम = postgres@implicit_files

और वह आदेश postgres=# \password postgresवापसी त्रुटि:

त्रुटि: भूमिका "पोस्टग्रेज" मौजूद नहीं है।

लेकिन वह postgres=# \password postgres@implicit_filesठीक है।

साथ sudo -u postgres createuser -s postgresही पहले वेरिएंट के बाद भी काम करते हैं।

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