التحديث النهائي:
لقد نسيت تشغيل الأمر initdb
.
</ تحديث النهائي>
عن طريق تشغيل هذا الأمر
ps auxwww | grep postgres
أرى أن postgres لا يعمل
> ps auxwww | grep postgres
remcat 1789 0.0 0.0 2434892 480 s000 R+ 11:28PM 0:00.00 grep postgres
هذا يثير السؤال: كيف يمكنني بدء خادم postgresql؟
تحديث:
>pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
server starting
sh: /usr/local/var/postgres/server.log: No such file or directory
التحديث 2:
لم تكن اللمسة ناجحة ، لذا قمت بذلك:
> mkdir /usr/local/var/postgres
> vi /usr/local/var/postgres/server.log
> ls /usr/local/var/postgres/
server.log
ولكن عندما أحاول بدء تشغيل خادم Rails ، ما زلت أرى هذا:
Is the server running on Host "localhost" and accepting
TCP/IP connections on port 5432?
التحديث 3:
> pg_ctl -D /usr/local/var/postgres status
pg_ctl: no server running
التحديث 4:
لقد وجدت أنه لم يكن هناك pg_hba.conf (فقط pg_hba.conf.sample) لذا قمت بتعديل العينة وأعدت تسميته (لمزيل .sample). فيما يلي المحتويات:
# IPv4 local connections:
Host all all 127.0.0.1/32 trust
# IPv6 local connections:
Host all all ::1/128 trust
لكنني لا أفهم هذا:
> pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
server starting
> pg_ctl -D /usr/local/var/postgres status
pg_ctl: no server running
أيضا:
Sudo find / -name postgresql.conf
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
التحديث 5:
Sudo pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Password:
pg_ctl: cannot be run as root
Please log in (using, e.g., "su") as the (unprivileged) user that will own the server process.
التحديث 6:
هذا يبدو غريبا:
> egrep 'listen|port' /usr/local/var/postgres/postgresql.conf
egrep: /usr/local/var/postgres/postgresql.conf: No such file or directory
رغم ذلك ، فعلت هذا:
>Sudo find / -name "*postgresql.conf*"
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
/usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample
/usr/share/postgresql/postgresql.conf.sample
لذلك فعلت هذا:
egrep 'listen|port' /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample
#listen_addresses = 'localhost' # what IP address(es) to listen on;
#port = 5432 # (change requires restart)
# supported by the operating system:
# %r = remote Host and port
لذلك جربت هذا:
> cp /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf
> cp /usr/share/postgresql/postgresql.conf.sample /usr/share/postgresql/postgresql.conf
لا يزال الحصول على نفسه "هل يعمل الخادم؟" رسالة.
يتضمن Homebrew package manager قوائم تشغيل لبدء التشغيل تلقائيًا. لمزيد من المعلومات ، قم بتشغيل brew info postgres
.
ابدأ يدويًا:
pg_ctl -D /usr/local/var/postgres start
توقف يدويًا:
pg_ctl -D /usr/local/var/postgres stop
ابدأ تلقائيًا:
"لبدء إطلاق postgresql الآن وإعادة التشغيل عند تسجيل الدخول:"
brew services start postgresql
ما هي نتيجة pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
؟
ما هي نتيجة pg_ctl -D /usr/local/var/postgres status
؟
هل هناك أي رسائل خطأ في server.log؟
تأكد من تمكين اتصالات المضيف المحلي tcp في pg_hba.conf:
# IPv4 local connections:
Host all all 127.0.0.1/32 trust
تحقق من listen_addresses والمنفذ في postgresql.conf:
egrep 'listen|port' /usr/local/var/postgres/postgresql.conf
#listen_addresses = 'localhost' # what IP address(es) to listen on;
#port = 5432 # (change requires restart)
التنظيف
تم تثبيت Postgres على الأرجح من خلال البيرة ، Fink ، MacPorts أو EnterpriseDB المثبت.
تحقق من إخراج الأوامر التالية لتحديد مدير الحزم الذي تم تثبيته به:
brew && brew list|grep postgres
fink && fink list|grep postgres
port && port installed|grep postgres
إذا كنت ترغب في بدء postgresql وإيقافه يدويًا (مثبت عبر البيرة) ، فإن أسهل طريقة هي:
brew services start postgresql
و
brew services stop postgresql
كان لدي نفس المشكلة تقريبًا ، وقد ذكرت أن الأمر initdb هو الإصلاح. كان هذا هو الحل أيضًا بالنسبة لي ، لكنني لم أر أن أي شخص نشره هنا ، لذلك بالنسبة لأولئك الذين يبحثون عنه:
initdb /usr/local/var/postgres -E utf8
هناك طريقة أخرى تتمثل في استخدام الأحجار الكريمة lunchy (غلاف لـ launchctl):
brew install postgresql
initdb /usr/local/var/postgres -E utf8
gem install lunchy
لبدء postgres:
lunchy start postgres
لإيقاف postgres:
lunchy stop postgres
للحصول على مزيد من المعلومات ، يرجى الرجوع إلى: " كيفية تثبيت PostgreSQL على جهاز Mac باستخدام Homebrew and Lunchy "
إذا تم إعادة تشغيل جهاز الكمبيوتر الخاص بك فجأة
أولاً ، يجب عليك حذف الملف /usr/local/var/postgres/postmaster.pid
، ثم يمكنك إعادة تشغيل الخدمة باستخدام إحدى الطرق الأخرى العديدة المذكورة بناءً على التثبيت.
يمكنك التحقق من ذلك من خلال الاطلاع على سجلات Postgres لمعرفة ما يمكن أن يحدث: tail -f /usr/local/var/postgres/server.log
هنا سنتي: لقد قمت بعمل اسم مستعار لـ postgres pg_ctl ووضعته في .bash_profile (إصدار postgresql الخاص بي هو 9.2.4 ، ومسار قاعدة البيانات هو /Library/PostgreSQL/9.2/data).
alias postgres.server="Sudo -u postgres pg_ctl -D /Library/PostgreSQL/9.2/data"
إطلاق محطة جديدة.
وثم؟ يمكنك بدء/إيقاف خادم postgresql باستخدام هذا:
postgres.server start
postgres.server stop
الطريقة الأنظف إلى حد بعيد لبدء/إيقاف/إعادة تشغيل postgres إذا كنت قد قمت بتثبيته من خلال brew
هو ببساطة إلغاء تحميل و/أو تحميل ملف تكوين launchd الذي يأتي مع التثبيت:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
سيتم إيقاف السطر الأول postgres والبدء في تشغيل السطر الثاني. لا حاجة لتحديد أي أدلة البيانات وما إلى ذلك لأن كل شيء موجود في هذا الملف.
لبدء خادم postgresql:
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
لإنهاء خادم postgresql:
pg_ctl -D /usr/local/var/postgres stop -s -m fast
يمكنك أيضًا إنشاء اسم مستعار عبر CLI لتسهيل الأمر:
alias pg-start='pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start'
alias pg-stop='pg_ctl -D /usr/local/var/postgres stop -s -m fast'
باستخدام هذه ، يمكنك فقط كتابة "pg-start" لبدء تشغيل Postgres و "pg-stop" لإغلاقها.
لأغراض الاختبار ، أعتقد أن تطبيق PostgreSQL هو الخيار الأفضل!
قم بتشغيل تطبيق ، والخادم قيد التشغيل. أغلق التطبيق ، وينخفض الخادم.
عند تثبيت postgresql باستخدام البيرة:
brew install postgres
في نهاية الإخراج ، سترى هذه الطرق لبدء تشغيل الخادم:
To have launchd start postgresql at login:
ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
Then to load postgresql now:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Or, if you don't want/need launchctl, you can just run:
postgres -D /usr/local/var/postgres
أعتقد أن هذه هي أفضل طريقة.
يمكنك إضافة اسم مستعار إلى ملفك الشخصي للراحة.
لدي نفس المشكلة وأجري جميع التحديثات من أول وظيفة. ولكن بعد التحقق من ملف السجل:
/usr/local/var/postgres/server.log
أرى السبب الحقيقي:
FATAL: data directory "/usr/local/var/postgres" has group or world access
DETAIL: Permissions should be u=rwx (0700).
بعد التغيير إذن في هذا الدليل
chmod 0700 /usr/local/var/postgres
خادم بوستجرس بدأ.
في كل مرة تحقق ملف السجل.
للحصول على قاعدة بيانات اختبار سريعة يمكن التخلص منها ، يمكنك تشغيل الخادم في المقدمة.
تهيئة قاعدة بيانات postgres جديدة في دليل جديد
mkdir db
initdb db -E utf8
createdb public
قم ببدء تشغيل الخادم في المقدمة (ctrl-C لإيقاف الخادم)
postgres -d db
في جلسة عمل Shell أخرى ، اتصل بالخادم
psql -d public
الاختلاف في هذه الإجابة: https://stackoverflow.com/a/13103603/2394728
initdb `brew --prefix`/var/postgres/data -E utf8`
لأغراض التطوير ، واحدة من أبسط الطرق هي تثبيت Postgres.app من الموقع الرسمي . يمكن تشغيله/إيقافه من مجلد التطبيقات أو استخدام الأوامر التالية في الجهاز:
# start
open -a Postgres
# stop
killall Postgres
killall postgres
تم دمج PostgreSQL في Server.app متاح من خلال App Store في Mountain Lion. هذا يعني أنه تم تكوينه بالفعل ، وستحتاج فقط إلى تشغيله ، ثم إنشاء مستخدمين وقواعد بيانات.
نصيحة : لا تبدأ بتعريف PGDATA $ وما إلى ذلك ، خذ مواقع الملفات كما هي.
سيكون لديك هذا الملف: /Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist
للبدأ:
Sudo serveradmin start postgres
بدأت العملية باستخدام الوسائط:
/Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D/Library/Server/PostgreSQL/Data -c listen_addresses = 127.0.0.1، :: 1 -c log_connections = on -c log_directory =/Library/Logs/PostgreSQL -c log_filename = PostgreSQL.log -c log_line_prefix =٪ t -c log_lock_waits = on -c log_statement = ddl -c logging_collector = on -c unix_socket_directory =/private/var/pgsql_socket_c-unc_project_copy
يمكنك سودو:
Sudo -u _postgres psql template1
أو الاتصال:
psql -h localhost -U _postgres postgres
يمكنك العثور على دليل البيانات والإصدار وحالة التشغيل وما إلى ذلك
Sudo serveradmin fullstatus postgres
# remove old database files (If there was any)
$rm -rf /usr/local/var/postgres # install the binary
$ brew install postgresql
# init it
$ initdb /usr/local/var/postgres
# start the postgres server
$ postgres -D /usr/local/var/postgres
# create your database
$ createdb mydb
# Access db.
$ psql mydb
psql (9.0.1)
Type "help" for help.
أيا من الإجابات المذكورة أعلاه إصلاح المشكلة بالنسبة لي على الرغم من الحصول على رسائل الخطأ نفسها. تمكنت من استعادة مثيلي وتشغيله عن طريق حذف ملف postmaster.pid الموجود والذي تم إغلاقه وعدم السماح بالاتصالات.
بالنسبة لنظام التشغيل macports ، ما عليك سوى استخدام أمر التحميل/إلغاء التحميل واسم منفذ خادم التشغيل:
Sudo port load postgresql96-server
- or -
Sudo port unload postgresql96-server
لذلك ليس عليك أن تتذكر مكان وجود ملف /Library/LaunchDaemons/org.macports.postgresql96.plist
$ brew upgrade postgres
إصلاحه بالنسبة لي.
هذا ، بالطبع ، سوف ترقية إصدار postgres الخاص بك وتحديث/تثبيت أي التبعيات. تحذير: هل هذا مع العلم أن إصدار postgresql الخاص بك من المرجح أن يتغير. بالنسبة لي ، لم يكن ذلك مشكلة كبيرة.
كان هذا الأمر مفيدًا لي في كل مرة ، مستوحى من كريج رينجر:
brew install proctools
Sudo pkill -u postgres
proctools يشمل pkill. إذا لم يكن لديك مشروب: https://brew.sh/
بالنسبة لنظام التشغيل Mac/OSX ، أحب تطبيق LaunchRocket لهذه الخدمات وغيرها من الخدمات الأساسية التي استخدمتها في التطوير.
https://github.com/jimbojsb/launchrocket
يحتوي هذا الموقع على تعليمات لطيفة بشأن التثبيت: http://macappstore.org/launchrocket/
يمنحك هذا شاشة جميلة في "تفضيلات النظام" الخاصة بك والتي تتيح لك التشغيل ، إعادة التشغيل ، الجذر ، التشغيل عند تسجيل الدخول.
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
للتأكد من اكتمالها: تحقق مما إذا كنت داخل مثيل Tmux
أو Screen
، فالبدء لن ينجح من هناك.
هذا حلها بالنسبة لي.