Bagaimana cara memulai server PostgreSQL di Mac OS X?


989

PEMBARUAN AKHIR:

Saya lupa menjalankan initdbperintah.

</ FINAL UPDATE>

dengan menjalankan perintah ini

ps auxwww | grep postgres

Saya melihat postgres tidak berjalan

> ps auxwww | grep postgres
remcat          1789   0.0  0.0  2434892    480 s000  R+   11:28PM   0:00.00 grep postgres

ini menimbulkan pertanyaan: Bagaimana cara saya memulai server postgresql?

memperbarui:

>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

pembaruan 2:

Sentuhan tidak berhasil jadi saya melakukan ini sebagai gantinya:

> mkdir /usr/local/var/postgres
> vi /usr/local/var/postgres/server.log
> ls /usr/local/var/postgres/          
server.log

Tetapi ketika saya mencoba memulai rails server, saya masih melihat ini:

Is the server running on host "localhost" and accepting
TCP/IP connections on port 5432?

pembaruan 3:

> pg_ctl -D /usr/local/var/postgres status
pg_ctl: no server running

pembaruan 4:

Saya menemukan bahwa TIDAK ADA pg_hba.conf (hanya pg_hba.conf.sample) jadi saya memodifikasi sampel dan menamainya kembali (untuk menghapus .sample). Berikut isinya:

 # IPv4 local connections:
 host    all             all             127.0.0.1/32           trust
 # IPv6 local connections:
 host    all             all             ::1/128                trust

tapi saya tidak mengerti ini:

> 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

juga:

sudo find / -name postgresql.conf
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory

pembaruan 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.

pembaruan 6:

ini sepertinya aneh:

> egrep 'listen|port' /usr/local/var/postgres/postgresql.conf
egrep: /usr/local/var/postgres/postgresql.conf: No such file or directory

Namun, saya melakukan ini:

>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

jadi saya melakukan ini:

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

jadi saya mencoba ini:

> 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 

masih mendapatkan yang sama "Apakah server berjalan?" pesan.


Bagaimana Anda menginstal Postgres? Apakah Anda menggunakan manajer paket atau instalasi manual?
James Allman

1
tidak ingat persis tapi itu sudah diinstal atau saya menjalankan "buatan install postgres". Saya akan condong ke yang terakhir tetapi sekali lagi, saya tidak 100% yakin.
Ramy

Gunakan sudo, yaitusudo pg_ctl...
Bohemian

54
Saya memilih ini hanya karena FINAL UPDATE membuat saya tertawa sangat keras! : D
pkoch

14
Harus memperbaiki, saya datang ke sini setidaknya 3 kali seminggu untuk menyalin perintah pg_ctl pertama untuk me-restart psql setelah penghentian yang tidak terduga .. heh aku harus mempelajarinya: D Terima kasih Bung!
lucygenik

Jawaban:


1848

The Homebrew manajer paket termasuk plists launchctl untuk memulai secara otomatis. Untuk informasi lebih lanjut, jalankan brew info postgres.

Mulai secara manual:

pg_ctl -D /usr/local/var/postgres start

Berhenti secara manual:

pg_ctl -D /usr/local/var/postgres stop

Mulai secara otomatis:

"Untuk memiliki launchd mulai postgresql sekarang dan restart saat login:"

brew services start postgresql


Apa hasil dari pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start?

Apa hasil dari pg_ctl -D /usr/local/var/postgres status?

Apakah ada pesan kesalahan di server.log?

Pastikan koneksi localhost tcp diaktifkan di pg_hba.conf:

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust

Periksa listen_addresses dan port di 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)

Membersihkan

Postgres kemungkinan besar diinstal melalui Homebrew , Fink , MacPorts atau installer EnterpriseDB .

Periksa output dari perintah berikut untuk menentukan manajer paket yang diinstal dengan:

brew && brew list|grep postgres
fink && fink list|grep postgres
port && port installed|grep postgres

1
@Ramy Apakah sentuhannya berhasil? Periksa keberadaan dan izin dari / usr / local / var / postgres dan server.log . Seharusnya rw untuk userid Anda.
James Allman

1
@Ramy: Dapatkah Anda memasukkan informasi di /usr/local/var/postgres/server.log? Instalasi Anda mungkin rusak dan mungkin lebih cepat untuk membersihkan dan menginstal ulang menggunakan sumber yang dikenal seperti Homebrew.
James Allman

10
Mengapa semua ini perlu? Mengapa Anda tidak bisa memulai postgres dengan cara memulai simpul?
Kinnard Hockenhull

32
apa perintah yang sangat rumit hanya untuk memulai dan menghentikan program
ahnbizcad

3
Ini masih berfungsi tetapi sedikit ketinggalan zaman. Jawaban di bawah brew services start postgresqlini adalah jawaban yang lebih terkini, dan langsung.
mthorley

373

Jika Anda ingin memulai dan menghentikan postgresql secara manual (diinstal melalui homebrew), cara termudah adalah:

brew services start postgresql

dan

brew services stop postgresql

Jika Anda memiliki versi tertentu, pastikan untuk menambahkan sufiks versi, misalnya:

brew services start postgresql@10

7
Saya berharap saya tahu tentang brew serviceslebih cepat ... ini adalah satu-satunya solusi yang bekerja untuk saya. <3 terima kasih!
seanlinsley

5
brew tap gapple/servicesakan membuat perintah layanan minuman berfungsi lagi
Fabian Leutgeb

4
Sepertinya brew tap homebrew/servicesmasih berfungsi github.com/Homebrew/homebrew-services
kangkyu

4
Ini berfungsi setelah initdb berhasil dijalankan. Kalau tidak diam-diam gagal (tetapi tampaknya telah bekerja, dengan layanan ditampilkan sebagai dimulai pada brew services list.
Dmitri

1
Saya perlu menjalankan brew services restart postgresql, karena memulai db dengan pg_ctl atau brew services startmengatakan "server lain mungkin berjalan" dan dan menghentikan db dengan pg_ctl digantung.
Tomf

181

Saya memiliki masalah yang hampir sama, dan Anda mengutip perintah initdb sebagai perbaikan. Ini juga solusi bagi saya, tetapi saya tidak melihat ada orang yang mempostingnya di sini, jadi bagi mereka yang mencarinya:

initdb /usr/local/var/postgres -E utf8

16
ini juga bekerja untuk saya, initdb mengatakan kepada saya bahwa saya sudah melakukan konfigurasi, jadi saya menghapus seluruh direktori: "rm -rf / usr / local / var / postgres" jalankan lagi perintah Anda dan server saya sekarang bangkit dan berjalan, terima kasih banyak pak!
Jorge Sampayo

5
ya saya harus lari rm -rf /usr/local/var/postgresdan kemudian ini berhasil untuk saya
Lee McAlilly

2
Inilah yang bekerja untuk saya juga. Sebelum initdb, saya juga harus melihat dir postgres ( chown _your username on your comp_ usr/local/var/postgres), lalu initdb. Setelah itu server mulai secara otomatis ketika Anda me-restart (jika Anda mengikuti instruksi Homebrew untuk itu) atau secara manual pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start.
septerr

2
Setelah initdb(termasuk menghapus direktori lama jika perlu), brew services start postgresqlberfungsi
Dmitri

Jika gagasan memasukkan rm -rfsegala sesuatu yang saat ini ada dalam basis data Anda membuat Anda sedikit takut, alih-alih menghapusnya sepenuhnya, Anda bisa menggunakan sesuatu seperti mv /usr/local/var/postgres /usr/local/var/postgres.backupmemindahkannya ke direktori cadangan baru, kemudian jalankan perintah untuk memulai kembali basis data.
Hartley Brody

102

Jika komputer Anda tiba-tiba dinyalakan kembali

Pertama, Anda harus menghapus file /usr/local/var/postgres/postmaster.pidKemudian Anda dapat me-restart layanan menggunakan salah satu dari banyak metode lain yang disebutkan tergantung pada instalasi Anda.

Anda dapat memverifikasi ini dengan melihat log Postgres untuk melihat apa yang mungkin terjadi: tail -f /usr/local/var/postgres/server.log


2
Anda dapat memeriksa tail -f /usr/local/var/postgres/server.loguntuk melihat apakah Anda harus menghapus file itu. ref coderwall.com/p/zf-fww/…
user1448319

Milik saya berada di bawah / Users / <user> / Library / Application \ Support / Postgres / var-9.6 / postmaster.pid
BatteryAcid

untuk homebrew menginstal jalurnya adalah~/homebrew/var/postgres/postmaster.pid
blnc

2
Wow ... hanya ini yang bekerja untuk saya! Bisakah Anda memberikan penjelasan lebih rinci mengapa kami harus menghapus postmaster.pidjika komputer tiba-tiba restart?
adkl

1
Ini sangat berguna
NinComPoop

81

Pendekatan lain menggunakan permata makan siang (pembungkus untuk launchctl):

brew install postgresql
initdb /usr/local/var/postgres -E utf8
gem install lunchy

Untuk memulai postgres:

lunchy start postgres

Untuk menghentikan postgres:

lunchy stop postgres

Untuk info lebih lanjut, lihat: " Cara Memasang PostgreSQL di Mac dengan Homebrew dan Lunchy "


tergantung pada bagaimana Anda mengatur postgres, Anda mungkin perlu menggunakan postgresql alih-alih postgres
Devon Kiss

72

Di sini 2 sen saya: Saya membuat alias untuk pg_ctl postgres dan memasukkannya ke .bash_profile (versi postgresql saya adalah 9.2.4, dan jalur basis data adalah /Library/PostgreSQL/9.2/data).

alias postgres.server="sudo -u postgres pg_ctl -D /Library/PostgreSQL/9.2/data"

Luncurkan terminal baru.

Lalu? Anda dapat memulai / menghentikan server postgresql Anda dengan ini:

postgres.server start
postgres.server stop

Menentukan direktori data dengan -D adalah kuncinya di sini
sebelumnya

3
Saya terus mendapatkan "Silakan masuk (menggunakan, misalnya," su ") sebagai pengguna (tidak memiliki hak) yang akan memiliki proses server." saat menjalankan sudo saja. +1
pyb

Terima kasih. Saran alat postgres untuk menggunakan su gagal total. sudo -u bekerja dengan sangat baik. (pada El Capitan)
uchuugaka

33

Cara terbersih sejauh ini untuk memulai / menghentikan / me-restart postgres jika Anda telah menginstalnya brewadalah dengan hanya membongkar dan / atau memuat file konfigurasi launchd yang datang dengan instalasi:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

Baris pertama akan menghentikan postgres dan baris kedua akan memulainya. Tidak perlu menentukan direktori data apa pun dll karena semuanya ada di file itu.


berfungsi dengan baik untuk PostgreSQL 9.5.3 diinstal pada OS X via Brew !! Terima kasih!
jpswain

ini berfungsi seperti pesona ketika server postgres tidak dimatikan dengan benar dan tidak menerima koneksi masuk
Augusto Samamé Barrientos

5
Homebrew sendiri memiliki pembungkus sederhana untuk perintah-perintah ini, misalnya: brew services start postgres(dan berhenti). Lempar a -vpada akhirnya dan Anda dapat melihat apa yang dilakukannya.
Mark Edington

28

Untuk memulai server postgresql:

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

untuk mengakhiri server postgresql:

pg_ctl -D /usr/local/var/postgres stop -s -m fast

Anda juga dapat membuat alias melalui CLI untuk membuatnya lebih mudah:

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'

Dengan ini, Anda cukup mengetik "pg-start" untuk memulai Postgres dan "pg-stop" untuk mematikannya.


3
Saya mendapat kesalahan pg_ctl: directory "/usr/local/var/postgres" is not a database cluster directorybagaimana cara memperbaikinya?
Rohman Masyhar


9

ketika Anda menginstal postgresql menggunakan homebrew:

brew install postgres

di akhir output Anda akan melihat metode ini untuk memulai server:

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

Saya pikir ini adalah cara terbaik.

Anda dapat menambahkan alias ke profil. Anda untuk kenyamanan.


7

Untuk database uji sekali pakai yang cepat, Anda dapat menjalankan server di latar depan.

Inisialisasi database postgres baru di direktori baru

mkdir db
initdb db -E utf8
createdb public

Mulai server di latar depan (ctrl-C untuk menghentikan server)

postgres -d db

Di sesi shell lain, sambungkan ke server

psql -d public

Ini tampak hebat tetapi tidak berhasil bagi saya - itu bukan server yang sudah berjalan untuk melakukan langkah yang dibuat. Ketika saya mencoba memulai servis, katanya perlu PGDATA atau file konfigurasi, yang belum ada. Apa yang saya lewatkan?
szeitlin

7

Saya memiliki masalah yang sama dan melakukan semua pembaruan dari posting pertama. Tetapi setelah memeriksa file log:

/usr/local/var/postgres/server.log

Saya melihat penyebab sebenarnya:

FATAL:  data directory "/usr/local/var/postgres" has group or world access
DETAIL:  Permissions should be u=rwx (0700).

Setelah mengubah izin pada direktori ini

chmod 0700 /usr/local/var/postgres

server postgres telah dimulai.

Setiap kali memeriksa file log.


5

PostgreSQL terintegrasi dalam Server.app tersedia melalui App Store di Mountain Lion. Itu artinya sudah dikonfigurasi, dan Anda hanya perlu meluncurkannya, lalu buat pengguna dan basis data.

Kiat : Jangan mulai dengan mendefinisikan $ PGDATA dan seterusnya, ambil lokasi file apa adanya.

Anda akan memiliki file ini: /Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist

Untuk memulai:

sudo serveradmin start postgres

Proses dimulai dengan argumen:

/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 = pada -c log_statement = ddl -c logging_collector = pada -c unix_socket_directory = / private / var / pgsql_socket_socket_socket_socket_socket_socket_socket_socket_socket_create_socket_socket_create_socket_create_socket_create_ 07

Anda bisa sudo:

sudo -u _postgres psql template1

Atau hubungkan:

psql -h localhost -U _postgres postgres

Anda dapat menemukan direktori data, versi, status berjalan dan sebagainya dengan

sudo serveradmin fullstatus postgres  

Tidak dapat menemukan banyak hal lain yang menunjukkan cara menggunakan built in Postgres. Membantu saya menemukan perintah serveradmin juga. Terima kasih
Jason S

Menjalankan layanan sebagai pengguna root (sudo) jelas bukan ide yang baik, begitu ada masalah keamanan, seluruh komputer dikompromikan.
Carlos Barcelona

Postgresql tidak berjalan sebagai root, tetapi sebagai _postgres.
bbaassssiiee

5

Variasi pada jawaban ini: https://stackoverflow.com/a/13103603/2394728

initdb `brew --prefix`/var/postgres/data -E utf8`` &&  pg_ctl -D /usr/local/var/postgres/data -l logfile start

Anda harus menambahkan tautan ke jawaban yang Anda maksud.
Jeffrey Bosboom

Ini sangat membantu karena pg saya berfungsi dengan baik dan tiba-tiba berhenti bekerja dan tidak dapat menemukan folder / var / postgres.
shinesecret

Bisakah seseorang berkomentar mengapa ini lebih unggul dari jawaban yang ditautkan? Ketika saya melihat saya sudah tervvotasikan sejak terakhir kali saya memiliki masalah yang sama saya akan menggunakannya karena tidak ada alasan yang diberikan di sini.
MCB

4

Untuk tujuan pengembangan, salah satu cara paling sederhana adalah menginstal Postgres.app dari situs resmi . Itu dapat dimulai / dihentikan dari folder Aplikasi atau menggunakan perintah berikut di terminal:

# start
open -a Postgres

# stop
killall Postgres
killall postgres

18
killallmungkin bukan cara terbaik untuk menghentikan basis data.
Risadinha

4
   # 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.

4

Jika Anda telah menginstal menggunakan brew, perintah di bawah ini sudah cukup.

brew services restart postgresql

Dan ini kadang-kadang mungkin tidak berhasil, dalam hal ini di bawah dua perintah pasti bekerja

rm /usr/local/var/postgres/postmaster.pid

pg_ctl -D /usr/local/var/postgres start

1

tidak ada jawaban di atas yang memperbaiki masalah saya meskipun mendapatkan pesan kesalahan yang sama. Saya bisa membuat instance saya kembali dan berjalan dengan menghapus file postmaster.pid yang ada yang terkunci dan tidak mengizinkan koneksi.


1

Untuk macports, cukup gunakan perintah load / unload dan nama port dari server yang sedang berjalan:

sudo port load postgresql96-server
- or -
sudo port unload postgresql96-server

jadi Anda tidak perlu mengingat di mana /Library/LaunchDaemons/org.macports.postgresql96.plistfile tersebut berada



1

Jika Anda menginstal Postgres menggunakan installer EnterpriseDB, maka apa yang disarankan @ Kenial adalah cara yang harus dilakukan.

sudo -u postgres pg_ctl -D /Library/PostgreSQL/{version}/data start
sudo -u postgres pg_ctl -D /Library/PostgreSQL/{version}/data stop

1

yang bekerja untuk saya (macOS 10.13) sudo -u postgres /Library/PostgreSQL/9.6/bin/pg_ctl start -D /Library/PostgreSQL/9.6/data

atau pertama cd /Library/PostgreSQL/9.6/bin/


1

$ brew upgrade postgres

memperbaikinya untukku.

Itu, tentu saja, akan meningkatkan versi postgres Anda dan memperbarui / menginstal semua dependensi.

PERINGATAN: Lakukan ini dengan mengetahui bahwa versi postgresql Anda kemungkinan akan berubah. Bagi saya, itu bukan masalah besar.



0

Ini bekerja untuk saya setiap saat, terinspirasi oleh Craig Ringer:

brew install proctools
sudo pkill -u postgres

proctools termasuk pkill. Jika Anda tidak memiliki Brew: https://brew.sh/



0

Ada beberapa kasus tepi yang mungkin akan bermanfaat bagi seseorang:

Ada pilihan, bahwa Anda akan memiliki postgres.pid diisi dengan beberapa PID. Tetapi jika Anda me-restart mesin Anda, dan sebelum postgress akan kembali lagi, beberapa proses lain akan mengambil PID itu. Jika itu akan terjadi, status pg_ctl dan layanan buatan yang ditanya tentang status postgres, akan memberi tahu Anda bahwa itu UP. Hanya ps aux | grep dan periksa apakah benar-benar postgress


0

Homebrew adalah jalannya !!

Untuk memulai layanan:

brew services start postgresql   

Untuk daftar:

brew services list |grep postgres

untuk menghentikan layanan .:

brew services stop postgresql 

0

Jika Anda tidak menginstalnya dengan minuman dan langsung dari paket mac, ini berfungsi untuk saya untuk PostgreSQL 12 saat menggunakan semua lokasi default, variabel, dll.

$ sudo su postgres
bash-3.2$ /Library/PostgreSQL/12/bin/pg_ctl -D /Library/PostgreSQL/12/data/ stop

0

Saya menghadapi masalah yang sama. Sudah mencoba semua solusi ini tetapi tidak ada yang berhasil.

Akhirnya berhasil membuatnya bekerja dengan mengubah postgres HOST di pengaturan Django dari localhostke 127.0.0.1.

Ceria jika itu membantu.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.