Mac OS X'te PostgreSQL sunucusu nasıl başlatılır?


989

NİHAİ GÜNCELLEME:

initdbKomutu çalıştırmayı unutmuştum .

</ NİHAİ GÜNCELLEME>

bu komutu çalıştırarak

ps auxwww | grep postgres

Postgres'in çalışmadığını görüyorum

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

bu şu soruyu gündeme getirir: postgresql sunucusunu nasıl başlatırım?

Güncelleme:

>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

güncelleme 2:

Dokunma başarılı olmadı, bunun yerine bunu yaptım:

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

Ama rails sunucusunu başlatmaya çalıştığımda hala görüyorum:

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

güncelleme 3:

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

güncelleme 4:

Ben PG_hba.conf (sadece pg_hba.conf.sample) WAS NO bulundu, bu yüzden örnek değiştirdi ve (.sample kaldırmak için) yeniden adlandırdı. İşte içeriği:

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

ama bunu anlamıyorum:

> 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

Ayrıca:

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

güncelleme 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.

güncelleme 6:

bu tuhaf görünüyor:

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

gerçi, bunu yaptım:

>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

bu yüzden bunu yaptım:

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

bu yüzden denedim:

> 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 

hala aynı "Sunucu çalışıyor mu?" İleti.


Postgres'i nasıl kurdunuz? Paket yöneticisi veya manuel kurulum kullandınız mı?
James Allman

1
tam olarak hatırlayamıyorum ama zaten yüklü ya da "demlemek yükleme postgres" koştu. İkincisine yaslanırdım ama yine de% 100 emin değilim.
Ramy

Kullanın sudo, yanisudo pg_ctl...
Bohemian

54
Bunu NİHAİ GÜNCELLEME çok güldürdüğüm için oy verdim! : D
pkoch

14
Olması gereken, beklenmedik bir fesih sonra psql yeniden başlatmak için ilk pg_ctl komutunu kopyalamak için haftada en az 3 kez buraya geldim .. heh Ben öğrenmeliyim: D Teşekkürler dostum!
lucygenik

Yanıtlar:


1848

Homebrew paket yöneticisi otomatik başlatmak için launchctl Mülk Listelerini içerir. Daha fazla bilgi için çalıştırın brew info postgres.

Manuel olarak başlat:

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

Manuel olarak durdur:

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

Otomatik olarak başlat:

"Launchd şimdi postgresql başlatmak ve girişte yeniden başlatmak için:"

brew services start postgresql


Sonuç ne pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start?

Sonucu nedir pg_ctl -D /usr/local/var/postgres status ?

Server.log dosyasında herhangi bir hata mesajı var mı?

Pg_hba.conf dosyasında tcp localhost bağlantılarının etkin olduğundan emin olun:

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

Postgresql.conf dosyasındaki listen_addresses ve bağlantı noktasını kontrol edin:

egrep 'listen|port' /usr/local/var/postgres/postgresql.conf

#listen_addresses = 'localhost'     # what IP address(es) to listen on;
#port = 5432                # (change requires restart)

Temizlemek

Postgres büyük olasılıkla Homebrew , Fink , MacPorts veya EnterpriseDB aracılığıyla kuruldu yükleyicisi kuruldu.

Hangi paket yöneticisine yüklendiğini belirlemek için aşağıdaki komutların çıktısını kontrol edin:

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

1
@Ramy Dokunma başarılı oldu mu? / Usr / local / var / postgres ve server.log dosyasının varlığını ve izinlerini kontrol edin . Kullanıcı kimliğiniz için rw olmalıdır.
James Allman

1
@Ramy: /usr/local/var/postgres/server.log dosyasına herhangi bir bilgi ekleyebilir misiniz? Yüklemeniz bozuk olabilir ve Homebrew gibi bilinen bir kaynak kullanılarak temizlenmesi ve yeniden yüklenmesi daha hızlı olabilir.
James Allman

10
Bütün bunlar neden gerekli? Niçin postgres'i node başladığınız gibi başlatamıyorsunuz?
Kinnard Hockenhull

32
sadece programı başlatmak ve durdurmak için ne kadar gülünç karmaşık bir komut
ahnbizcad

3
Bu hala işe yarıyor ama biraz güncel değil. Aşağıdaki cevap brew services start postgresqldaha güncel ve basit bir cevaptır.
mthorley

372

Postgresql'i (homebrew üzerinden kurulur) elle başlatmak ve durdurmak istiyorsanız, en kolay yol:

brew services start postgresql

ve

brew services stop postgresql

Belirli bir sürümünüz varsa, sürümün son ekini eklediğinizden emin olun, örneğin:

brew services start postgresql@10

7
Keşke daha brew servicesçabuk bilsem ... benim için çalışan tek çözüm budur. <3 teşekkürler!
seanlinsley

5
brew tap gapple/servicesdemlemek hizmetleri komutunu tekrar çalıştıracak
Fabian Leutgeb

4
brew tap homebrew/servicesHala çalışıyor gibi görünüyor github.com/Homebrew/homebrew-services
kangkyu

4
Bu başarıyla çalıştırıldıktan sonra initdb çalışır. Aksi takdirde sessizce başarısız (ancak olarak hizmet gösterimiyle, çalışmış görünüyor başladı içinde brew services list.
Dmitri

1
Ben çalıştırmak gerekiyordu brew services restart postgresql, çünkü pg_ctl ile db başlayarak veya brew services start"başka bir sunucu çalışıyor olabilir" ve pg_ctl asılı ile db durdurma dedi.
tomf

181

Neredeyse tamamen aynı sorunu yaşadım ve initdb komutunu düzeltme olarak gösterdiniz. Bu benim için de bir çözümdü, ama kimsenin buraya gönderdiğini görmedim, bu yüzden arayanlar için:

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

16
Bu benim için de çalıştı, initdb zaten yapılandırmayı yaptığımı söyledi, bu yüzden tüm dizini sildim: "rm -rf / usr / local / var / postgres" komutunuzu tekrar çalıştırdı ve sunucum şimdi çalışıyor ve çalışıyor, çok teşekkürler efendim!
Jorge Sampayo

5
Evet koşmak zorunda kaldım rm -rf /usr/local/var/postgresve sonra bu benim için çalıştı
Lee McAlilly

2
Benim için de işe yaradı. İnitdb'den önce, postgres dir ( chown _your username on your comp_ usr/local/var/postgres), sonra initdb'yi de seçmem gerekiyordu. Bundan sonra, yeniden başlattığınızda (Homebrew'un talimatlarını izlediyseniz) veya manuel olarak sunucu otomatik olarak başlar pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start.
septerr

2
Sonra initdb(gerekirse eski dizinin kaldırılması dahil), brew services start postgresqlçalışır
Dmitri

rm -rfŞu anda veritabanınızda bulunan her şeyi bir kenara koyma fikri, tamamen silmek yerine sizi biraz korkutuyorsa, mv /usr/local/var/postgres /usr/local/var/postgres.backupyeni bir yedekleme dizinine taşımak gibi bir şey kullanabilir , ardından veritabanını yeniden başlatmak için komutu çalıştırabilirsiniz.
Hartley Brody

102

Bilgisayarınız aniden yeniden başlatıldıysa

İlk olarak, dosyayı silmeniz gerekir /usr/local/var/postgres/postmaster.pidArdından, yüklemenize bağlı olarak bahsedilen diğer birçok yöntemden birini kullanarak hizmeti yeniden başlatabilirsiniz.

Neler olup bittiğini görmek için Postgres günlüklerine bakarak bunu doğrulayabilirsiniz: tail -f /usr/local/var/postgres/server.log


2
Bu tail -f /usr/local/var/postgres/server.logdosyayı silmeniz gerekip gerekmediğini kontrol edebilirsiniz . ref coderwall.com/p/zf-fww/…
user1448319

Benimki / Kullanıcılar / <kullanıcı> / Kütüphane / Uygulama \ Destek / Postgres / var-9.6 / postmaster.pid
BatteryAcid

homebrew kurulumları için yol~/homebrew/var/postgres/postmaster.pid
blnc

2
Vay be ... sadece bu benim için çalıştı! postmaster.pidBilgisayar aniden yeniden başlatıldıysa neden silmemiz gerektiğini daha ayrıntılı bir şekilde açıklayabilir misiniz?
adkl

1
Bu gerçekten işe
yaradı

81

Başka bir yaklaşım öğle yemeğini kullanmaktır (launchctl için bir sarıcı):

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

Postgres'i başlatmak için:

lunchy start postgres

Postgres'i durdurmak için:

lunchy stop postgres

Daha fazla bilgi için bakınız: " Homebrew ve Lunchy ile Mac'e PostgreSQL Nasıl Yüklenir "


postgres kurulumuna bağlı olarak postgres yerine postgresql kullanmanız gerekebilir
Devon Kiss

72

İşte benim 2 sent: pg_ctl postgres için bir takma ad yaptım ve .bash_profile (postgresql sürümüm 9.2.4 ve veritabanı yolu /Library/PostgreSQL/9.2/data) koydum.

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

Yeni terminali başlatın.

Ve sonra? Postgresql sunucunuzu şu şekilde başlatabilir / durdurabilirsiniz:

postgres.server start
postgres.server stop

Veri dizinini -D ile belirtmek burada anahtar
olore

3
Sunucu işlemine sahip olacak (ayrıcalıksız) kullanıcı olarak "Lütfen giriş yapın (örneğin," su "kullanarak). sadece sudo çalışırken. +1
pyb

Teşekkürler. Postgres araçlarının su kullanma önerileri fena halde başarısız oluyor. sudo -u harika çalışıyor. (El Capitan'da)
uchuugaka

33

En temiz yolu farkla bunu içinden yüklediyseniz durdurma / yeniden başlatma postgres / başlatmak için brewbasitçe boşaltmaya ve / veya yükleme ile gelir Launchd yapılandırma dosyasını yükleyin:

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

İlk satır postgres'i durduracak ve ikinci satır onu başlatacaktır. Her şey bu dosyada olduğu için herhangi bir veri dizini vb. Belirtmeye gerek yoktur.


Brew aracılığıyla OS X üzerinde yüklü PostgreSQL 9.5.3 için harika çalışıyor! Teşekkürler!
jpswain

postgres sunucusu düzgün kapatılmadığında ve gelen bağlantıları kabul etmediğinde bu bir cazibe gibi çalışır
Augusto Samamé Barrientos

5
Homebrew'un kendisi bu komutlar için basit paketleyicilere sahiptir, örneğin: brew services start postgres(ve durdur). -vSonuna a atın ve ne yaptığını görebilirsiniz.
Mark Edington

28

Postgresql sunucusunu başlatmak için:

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

postgresql sunucusunu sonlandırmak için:

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

Daha kolay hale getirmek için CLI aracılığıyla bir takma ad da oluşturabilirsiniz:

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'

Bunlarla Postgres'i başlatmak için "pg-start" ve kapatmak için "pg-stop" yazabilirsiniz.


3
Bunu pg_ctl: directory "/usr/local/var/postgres" is not a database cluster directorynasıl düzeltebilirim?
Rohman Masyhar


9

homgrew kullanarak postgresql yüklediğinizde:

brew install postgres

çıktının sonunda sunucuyu başlatmak için şu yöntemleri göreceksiniz:

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

Bence bu en iyi yol.

Kolaylık sağlamak için .profile'ınıza takma ad ekleyebilirsiniz.


7

Hızlı tek kullanımlık test veritabanı için sunucuyu ön planda çalıştırabilirsiniz.

Yeni bir dizinde yeni bir postgres veritabanı başlat

mkdir db
initdb db -E utf8
createdb public

Sunucuyu ön planda başlatın (sunucuyu durdurmak için ctrl-C)

postgres -d db

Başka bir kabuk oturumunda, sunucuya bağlanın

psql -d public

Bu harika görünüyor ama benim için çalışmıyor - Createb adımını yapmak için zaten çalışan sunucu değildi. Sunumu başlatmaya çalıştığımda, henüz mevcut olmayan PGDATA veya config dosyasına ihtiyacı olduğunu söylüyor. Neyi kaçırıyorum?
szeitlin

7

Aynı sorunum var ve ilk gönderiden tüm güncellemeleri yapıyorum. Ancak günlük dosyasını kontrol ettikten sonra:

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

Gerçek nedeni görüyorum:

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

Bu dizinde değişiklik izninden sonra

chmod 0700 /usr/local/var/postgres

postgres sunucusu başladı.

Her zaman kontrol günlük dosyası.


5

PostgreSQL, Mountain Lion'daki App Store aracılığıyla kullanılabilen Server.app'a entegre edilmiştir . Bu, zaten yapılandırılmış olduğu anlamına gelir ve yalnızca başlatmanız ve ardından kullanıcılar ve veritabanları oluşturmanız gerekir.

İpucu : $ PGDATA tanımlamakla başlamayın vb. Dosya konumlarını olduğu gibi alın.

Bu dosyaya sahip olursunuz : /Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist

Başlamak:

sudo serveradmin start postgres

İşlem bağımsız değişkenlerle başladı:

/Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D / Kütüphane / Sunucu / PostgreSQL / Veri -c listen_addresses = 127.0.0.1, :: 1 -c log_connections = on -c log_directory = / Kütüphane / Günlükler / 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 üzerinde unix_socket_directory = / private / var / pgsql_socket -c unix_socket_group = 70_post_group =

Sudo yapabilirsiniz:

sudo -u _postgres psql template1

Veya bağlanın:

psql -h localhost -U _postgres postgres

Veri dizinini, sürümünü, çalışma durumunu vb.

sudo serveradmin fullstatus postgres  

Yerleşik Postgres nasıl kullanılacağını gösteren başka bir şey bulunamadı. Serveradmin komutunu da bulmama yardımcı oldu. Teşekkürler
Jason S

Bir hizmeti root kullanıcısı (sudo) olarak çalıştırmak kesinlikle iyi bir fikir değildir, bir güvenlik sorunu olduğunda, tüm bilgisayar tehlikeye girer.
Carlos Barcelona

Postgresql kök olarak değil _postgres olarak çalışır.
bbaassssiiee

5

Bu yanıtta değişiklik: 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

Başvurduğunuz cevaba bir link eklemelisiniz.
Jeffrey Bosboom

Bu benim pg iyi çalışıyordu ve aniden çalışmayı durdurdu ve / var / postgres klasörü bulunamadı gibi yararlı oldu.
shinesecret

Birisi bunun neden bağlantılı cevaptan daha üstün olduğuna dair yorum yapabilir mi? Gördüğüm gibi, son kez benzer bir sorun yaşadığımdan vazgeçtim, burada bir sebep olmadığından kullanacağım.
MCB

4

Geliştirme amaçları için, en basit yollardan biri resmi siteden Postgres.app yüklemektir . Uygulamalar klasöründen veya terminalde aşağıdaki komutlar kullanılarak başlatılabilir / durdurulabilir:

# start
open -a Postgres

# stop
killall Postgres
killall postgres

18
killallmuhtemelen bir veritabanını durdurmanın en iyi yolu değildir.
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

Demlemek kullanarak kurduysanız, aşağıdaki komut yeterli olacaktır.

brew services restart postgresql

Ve bu bazen işe yaramayabilir, bu durumda iki komutun altında kesinlikle çalışmalıdır

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

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

1

yukarıdaki cevapların hiçbiri aynı hata mesajlarını almasına rağmen sorunu benim için çözmedi. Kilitli olan ve bağlantılara izin vermeyen mevcut postmaster.pid dosyasını silerek örneğimi yeniden açıp çalıştırabildim.


1

Macport için, load / unload komutunu ve çalışan sunucunun port adını kullanmanız yeterlidir:

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

böylece /Library/LaunchDaemons/org.macports.postgresql96.plistdosyanın nerede olduğunu hatırlamanız gerekmez



1

Postgres'i EnterpriseDB yükleyicisini kullanarak kurduysanız, @Kenial'ın önerdiği şey gitmenin yoludur.

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

1

benim için işe yaradı (macOS 10.13) sudo -u postgres /Library/PostgreSQL/9.6/bin/pg_ctl start -D /Library/PostgreSQL/9.6/data

veya önce cd /Library/PostgreSQL/9.6/bin/


1

$ brew upgrade postgres

benim için düzeltti.

Elbette postgres sürümünüzü yükseltir ve herhangi bir bağımlılığı günceller / yükler.

UYARI: Postgresql sürümünüzün büyük olasılıkla değişeceğini bilerek bunu yapın. Benim için bu çok önemli değildi.



0

Craig Ringer'den ilham alarak bu benim için her zaman işe yaradı:

brew install proctools
sudo pkill -u postgres

proctools pkill içerir. Brew'iniz yoksa: https://brew.sh/



0

Belki biri için yararlı olacak bazı kenar vaka var:

Bazı PID'lerle doldurulmuş postgres.pid seçeneğiniz vardır. Ancak makinenizi yeniden başlatırsanız ve postgress tekrar dönmeden önce, başka bir işlem bu PID'yi alacaktır. Bu olursa, hem pg_ctl durumu hem de demleme servisi postgres durumu hakkında sorular sordu, bunun UP olduğunu söyleyecektir. Sadece ps aux | grep ve gerçekten postgress olup olmadığını kontrol edin


0

Homebrew yolu !!

Hizmeti başlatmak için:

brew services start postgresql   

Listelemek için:

brew services list |grep postgres

hizmeti durdurmak için .:

brew services stop postgresql 

0

Demlemek ve doğrudan mac paketinden yüklemediyseniz, tüm varsayılan konumları, değişkenleri vb.Kullanırken bu benim için PostgreSQL 12 için çalıştı.

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

0

Aynı sorunla karşı karşıyaydım. Tüm bu çözümleri denedim ama hiçbiri işe yaramadı.

Nihayet ondan Django ayarlarında postgres HOST değiştirerek çalışmaya edilmeyi başarmıştı localhostiçin 127.0.0.1.

Yardımcı olursa şerefe.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.