it-swarm.dev

psql: FATAL: قاعدة البيانات "<user>" غير موجودة

أنا أستخدم تطبيق PostgreSql لنظام التشغيل mac ( http://postgresapp.com/ ). لقد استخدمتها في الماضي على أجهزة أخرى ، لكن ذلك يعطيني بعض المشاكل عند التثبيت على جهاز macbook. لقد قمت بتثبيت التطبيق وركضت:

psql -h localhost

يعود:

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

يبدو أنه لا يمكنني تشغيل وحدة التحكم لإنشاء قاعدة البيانات التي تحاول العثور عليها. يحدث الشيء نفسه عندما أركض:

psql 

أو إذا قمت بتشغيل psql من القائمة المنسدلة للتطبيق:

احصائيات الجهاز:

  • OSX 10.8.4

  • psql (PostgreSQL) 9.2.4

أي مساعدة هي موضع تقدير.

لقد حاولت أيضًا تثبيت PostgreSql عبر homebrew وأواجه نفس المشكلة. لقد قرأت أيضًا صفحة وثائق التطبيقات التي تنص على:

عند بدء تشغيل Postgres.app لأول مرة ، يقوم بإنشاء قاعدة بيانات USER $ ، وهي قاعدة البيانات الافتراضية ل psql عند عدم تحديد أي منها. المستخدم الافتراضي هو $ USER ، بدون كلمة مرور.

لذلك يبدو أن التطبيق لا يقوم بإنشاء $ USER ومع ذلك قمت بتثبيته -> تمت إعادة تثبيته عدة مرات الآن ، لذا يجب أن يكون هناك شيء في الجهاز الخاص بي.

لقد وجدت الإجابة ولكني لست متأكدًا تمامًا من الطريقة التي يعمل بها المستخدم الذي أجاب على هذا الموضوع -> الحصول على Postgresql قيد التشغيل في Mac: قاعدة البيانات "postgres" غير موجودة لم تتابعها. استخدمت الأمر التالي للحصول على psql لفتح:

psql -d template1

سأترك هذا دون إجابة حتى يتمكن شخص ما من تقديم تفسير لماذا هذا يعمل.

580
Ryan Rich

يبدو أن مدير الحزم فشل في إنشاء قاعدة البيانات باسم المستخدم $ لك. السبب في أن

psql -d template1

يعمل من أجلك أن القالب 1 عبارة عن قاعدة بيانات تم إنشاؤها بواسطة بوستجرس نفسها ، وهي موجودة في جميع عمليات التثبيت. يبدو أنك قادر على تسجيل الدخول إلى template1 ، لذلك يجب أن يكون لديك بعض الحقوق المعينة لك بواسطة قاعدة البيانات. جرب هذا في موجه شل:

createdb

ومن ثم معرفة ما إذا كان يمكنك تسجيل الدخول مرة أخرى باستخدام

psql -h localhost

سيؤدي هذا ببساطة إلى إنشاء قاعدة بيانات لمستخدم تسجيل الدخول الخاص بك ، وهو ما أعتقد أنه ما تبحث عنه. إذا فشل createb ، فلن يكون لديك حقوق كافية لإنشاء قاعدة البيانات الخاصة بك ، وسيكون عليك معرفة كيفية إصلاح حزمة البيرة.

1003
Kirk Roybal

من المحطة ، فقط قم بتشغيل الأمر في نافذة موجه الأوامر. (ليس داخل psql).

createdb <user>

ثم حاول تشغيل postgres مرة أخرى.

126
Dhananjay

بشكل افتراضي ، يحاول postgres الاتصال بقاعدة بيانات بنفس اسم المستخدم الخاص بك. لمنع هذا السلوك الافتراضي ، فقط حدد المستخدم وقاعدة البيانات:

psql -U Username DatabaseName 
116
Aneer Anwar
  1. تسجيل الدخول كمستخدم افتراضي: Sudo -i -u postgres
  2. إنشاء مستخدم جديد: createuser --interactive
  3. عند مطالبتك بإدخال اسم الدور ، أدخل اسم مستخدم linux ، وحدد "نعم" لسؤال المستخدم الخارق.
  4. لا يزال تسجيل الدخول كمستخدم postgres ، إنشاء قاعدة بيانات: createdb <username_from_step_3>
  5. تأكيد الخطأ (الأخطاء) تختفي عن طريق إدخال: psql في موجه الأوامر.
  6. يجب أن يظهر الإخراج psql (x.x.x) Type "help" for help.
49
user286539

تسجيل الدخول باستخدام قاعدة بيانات template1 الافتراضية:

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

قم بإنشاء قاعدة بيانات باستخدام userId الخاص بك:

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

قم بإنهاء ثم قم بتسجيل الدخول مرة أخرى

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)
37
spicyramen

واجهت نفس الخطأ عندما أحاول فتح postgresql على ماك

psql: FATAL:  database "user" does not exist

لقد وجدت هذا الأمر البسيط لحلها:

طريقة 1

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

و اكتب

 psql

الطريقة 2:

psql -d postgres
16
Dinesh Pallapa

يمكن أن يحدث هذا الخطأ أيضًا إذا تم تعيين متغير البيئة PGDATABASE إلى اسم قاعدة بيانات غير موجودة.

على OSX ، رأيت الخطأ التالي أثناء محاولة تشغيل psql من قائمة Postgress.app:

psql: FATAL: database "otherdb" does not exist

كان حل الخطأ هو إزالة export PGDATABASE=otherdb من ~/.bash_profile:

علاوة على ذلك ، إذا تم تعيين PGUSER على شيء آخر غير اسم المستخدم الخاص بك ، فسيحدث الخطأ التالي:

psql: FATAL: role "note" does not exist

الحل هو إزالة export PGUSER=notme من ~/.bash_profile.

5
sdhca

واجه نفس المشكلة ، psql -d postgres بسيط قام بذلك (اكتب الأمر في الجهاز)

4
rust

نظرًا لأن هذا السؤال هو الأول في نتائج البحث ، فسأضع حلاً مختلفًا لمشكلة مختلفة هنا على أي حال ، حتى لا يكون هناك عنوان مكرر.

يمكن أن تظهر رسالة الخطأ نفسها عند تشغيل ملف استعلام في psql دون تحديد قاعدة بيانات. نظرًا لعدم وجود عبارة use في postgresql ، يتعين علينا تحديد قاعدة البيانات في سطر الأوامر ، على سبيل المثال:

psql -d db_name -f query_file.sql
4
Babken Vardanyan

كما createb الوثائق الدول:

يتم إنشاء قاعدة البيانات الأولى دائمًا بواسطة الأمر initdb عند تهيئة منطقة تخزين البيانات ... تسمى قاعدة البيانات هذه postgres.

لذلك إذا كانت بعض توزيعات OS/postgresql تفعل ذلك بطريقة مختلفة ، فمن المؤكد أنها ليست القيمة الافتراضية/القياسية (تم التحقق فقط من أن initdb on openSUSE 13.1 تنشئ DB "postgres" ، ولكن ليس "<user>"). قصة قصيرة طويلة ، من المتوقع استخدام psql -d postgres عند استخدام مستخدم آخر غير "postgres".

من الواضح أن الإجابة المقبولة ، تشغيل createdb لإنشاء قاعدة بيانات تحمل اسم المستخدم ، تعمل أيضًا ، ولكنها تنشئ قاعدة بيانات زائدة عن الحاجة.

4
user686249

واجه مشكلة في استخدام برنامج تشغيل JDBC ، لذلك يتعين على المرء فقط إضافة قاعدة البيانات (ربما وفقًا لتكرار الأداة التي قد تستخدمها) بعد اسم المضيف في عنوان URL ، على سبيل المثالjdbc:postgres://<Host(:port)>/<db-name>

تم توثيق المزيد من التفاصيل هنا: http://www.postgresql.org/docs/7.4/static/jdbc-use.html#JDBC-CONNECT

1
Andreas Dietrich

أولاً ، من المفيد إنشاء قاعدة بيانات تحمل اسم الاستخدام الحالي الخاص بك ، لمنع الخطأ عندما تريد فقط استخدام قاعدة البيانات الافتراضية وإنشاء جداول جديدة دون الإعلان عن اسم قاعدة بيانات بشكل صريح.

يستعاض عن كلمة "skynotify" باسم المستخدم الخاص بك:

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

-d تعلن بشكل صريح قاعدة البيانات التي يجب استخدامها كقاعدة بيانات جمل SQL التي لا تتضمن اسم db بشكل صريح أثناء هذه الجلسة التفاعلية.

أساسيات الحصول على صورة واضحة لما لدى خادم PostgresQL فيه.

يجب عليك الاتصال بقاعدة بيانات موجودة لاستخدام psql بشكل تفاعلي. لحسن الحظ ، يمكنك أن تطلب من 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)

هذا لا يبدأ تشغيل وحدة التحكم التفاعلية ، بل يقوم فقط بإخراج جدول يستند إلى نص إلى الجهاز.

كما تقول إجابات أخرى ، يتم إنشاء postgres دائمًا ، لذا يجب عليك استخدامها كقاعدة بيانات آمنة من الفشل عندما تريد فقط بدء تشغيل وحدة التحكم في قواعد البيانات الأخرى. إذا لم يكن هناك ، فقم بإدراج قواعد البيانات ثم استخدم أيًا منها.

بطريقة مماثلة ، حدد الجداول من قاعدة بيانات:

psql -d postgres -c "\dt;"

لا تحتوي قاعدة بيانات "postgres" على جداول ، لكن أي قاعدة بيانات ستقوم بإخراج جدول يستند إلى نص إلى الجهاز (قياسي).

وللاكتمال ، يمكننا تحديد جميع الصفوف من جدول أيضًا:

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

.

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

حتى إذا تم إرجاع صفوف صفرية ، فستحصل على أسماء الحقول.

إذا كانت الجداول تحتوي على أكثر من عشرة صفوف ، أو إذا لم تكن متأكدًا ، فسيكون من المفيد البدء بعدد من الصفوف لفهم مقدار البيانات الموجودة في قاعدة البيانات الخاصة بك:

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

.

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

وألا يربكك ذلك "صف واحد" ، فهو يمثل فقط عدد الصفوف التي يتم إرجاعها بواسطة الاستعلام ، ولكن يحتوي الصف الأول على العدد الذي تريده ، وهو 0 في هذا المثال.

ملاحظة: سيتم إنشاء ديسيبل تم إنشاؤه دون تعريف المالك من قبل المستخدم الحالي.

0
Sky Notify

جربت بعض هذه الحلول ، لكنها لم تنجح تمامًا (على الرغم من أنها كانت تعمل كثيرًا على الطريق الصحيح!)

في النهاية كان خطأي:

FATAL: فشل مصادقة كلمة المرور للمستخدم

عندما قمت بتشغيل الأمر التالي: psql

إذن ، قمت بتشغيل هذين الأمرين:

dropdb()
createdb()

ملاحظة: هذا سوف إزالة ديسيبل ، لكنني لم أكن في حاجة إليها ولسبب ما لم يعد بإمكاني الوصول إلى pqsl ، لذلك قمت بإزالته وإعادة إنشائه. ثم psql عملت مرة أخرى.

0
Ben Cartwright

الاتصال postgres عبر الخارق الحالي.

قم بإنشاء قاعدة بيانات باسم المستخدم الذي تتصل به إلى postgres.

create database username;

الآن حاول الاتصال عبر اسم المستخدم

0
Sameer Choudhary