Comment démarrer le serveur PostgreSQL sur Mac OS X?

989

MISE À JOUR FINALE:

J'avais oublié d'exécuter la initdbcommande.

</ MISE À JOUR FINALE>

en exécutant cette commande

ps auxwww | grep postgres

Je vois que postgres ne fonctionne pas

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

cela soulève la question: comment démarrer le serveur postgresql?

mise à jour:

>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

mise à jour 2:

Le toucher n'a pas réussi, j'ai donc fait ceci à la place:

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

Mais quand j'essaie de démarrer le serveur rails, je vois toujours ceci:

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

mise à jour 3:

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

mise à jour 4:

J'ai trouvé qu'il n'y avait PAS de pg_hba.conf (seulement pg_hba.conf.sample), j'ai donc modifié l'échantillon et l'ai renommé (pour supprimer le .sample). Voici le contenu:

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

mais je ne comprends pas ceci:

> 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

aussi:

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

mise à jour 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.

mise à jour 6:

cela semble étrange:

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

cependant, je l'ai fait:

>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

alors j'ai fait ça:

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

j'ai donc essayé ceci:

> 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 

toujours le même "Le serveur fonctionne-t-il?" message.

Ramy
la source
Comment avez-vous installé Postgres? Avez-vous utilisé un gestionnaire de packages ou une installation manuelle?
James Allman
1
Je ne me souviens pas exactement mais il était déjà installé ou j'ai lancé "brew install postgres". Je pencherais pour ce dernier mais encore une fois, je ne suis pas sûr à 100%.
Ramy
Utilisation sudo, c'estsudo pg_ctl...
-
54
J'ai voté pour cela juste parce que la MISE À JOUR FINALE m'a fait rire très fort! : D
pkoch
14
J'ai dû voter, je viens ici au moins 3 fois par semaine pour copier la toute première commande pg_ctl pour redémarrer psql après une interruption inattendue .. heh je dois l'apprendre: D Merci mec!
lucygenik

Réponses:

1848

Le gestionnaire de paquets Homebrew inclut des listes de lancement pour démarrer automatiquement. Pour plus d'informations, exécutezbrew info postgres .

Démarrer manuellement:

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

Arrêtez manuellement:

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

Démarrer automatiquement:

"Pour que launchd lance maintenant postgresql et redémarre à la connexion:"

brew services start postgresql


Quel est le résultat de pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start ?

Quel est le résultat de pg_ctl -D /usr/local/var/postgres status ?

Y a-t-il des messages d'erreur dans le fichier server.log?

Assurez-vous que les connexions localhost TCP sont activées dans pg_hba.conf:

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

Vérifiez les adresses_écoute et le port dans 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)

Nettoyer

Postgres a probablement été installé via Homebrew , Fink , MacPorts ou EnterpriseDB installation .

Vérifiez la sortie des commandes suivantes pour déterminer avec quel gestionnaire de packages il a été installé:

brew && brew list|grep postgres
fink && fink list|grep postgres
port && port installed|grep postgres
James Allman
la source
1
@Ramy La touche a-t-elle réussi? Vérifiez l'existence et les autorisations de / usr / local / var / postgres et server.log . Il doit être rw pour votre ID utilisateur.
James Allman
1
@Ramy: pouvez-vous inclure des informations dans /usr/local/var/postgres/server.log? Votre installation peut être corrompue et il peut être plus rapide de nettoyer et de réinstaller à l'aide d'une source connue telle que Homebrew.
James Allman
10
Pourquoi tout cela est-il nécessaire? Pourquoi ne pouvez-vous pas simplement démarrer PostgreSQL comme vous démarrez un nœud?
Kinnard Hockenhull
32
quelle commande ridiculement compliquée juste pour démarrer et arrêter le programme
ahnbizcad
3
Cela fonctionne toujours mais est un peu dépassé. La réponse ci brew services start postgresql- dessous est une réponse plus à jour et plus simple.
mthorley
373

Si vous souhaitez démarrer et arrêter manuellement postgresql (installé via homebrew), la manière la plus simple est:

brew services start postgresql

et

brew services stop postgresql

Si vous avez une version spécifique, assurez-vous de suffixer la version, par exemple:

brew services start postgresql@10
malopezcruz
la source
7
J'aurais aimé en savoir brew servicesplus tôt ... c'est la seule solution qui fonctionne pour moi. <3 merci!
seanlinsley
5
brew tap gapple/servicesfera fonctionner à nouveau la commande des services de brassage
Fabian Leutgeb
4
On dirait que ça brew tap homebrew/servicesmarche encore github.com/Homebrew/homebrew-services
kangkyu
4
Cela fonctionne après initdb avoir été exécuté avec succès. Sinon, il échoue silencieusement (mais semble avoir fonctionné, avec le service affiché comme démarré en brew services list.
Dmitri
1
J'avais besoin de courir brew services restart postgresql, depuis le démarrage de la base de données avec pg_ctl ou brew services startdit "un autre serveur pourrait être en cours d'exécution" et l'arrêt de la base de données avec pg_ctl bloqué.
tomf
181

J'avais presque exactement le même problème, et vous avez cité la commande initdb comme étant le correctif. C'était aussi la solution pour moi, mais je n'ai vu personne l'afficher ici, donc pour ceux qui le recherchent:

initdb /usr/local/var/postgres -E utf8
Yan
la source
16
cela a également fonctionné pour moi, initdb m'a dit que j'avais déjà fait la configuration, j'ai donc supprimé le répertoire entier: "rm -rf / usr / local / var / postgres" a de nouveau exécuté votre commande et mon serveur est maintenant opérationnel, merci beaucoup monsieur!
Jorge Sampayo
5
yep j'ai dû courir rm -rf /usr/local/var/postgreset ensuite cela a fonctionné pour moi
Lee McAlilly
2
C'est aussi ce qui a fonctionné pour moi. Avant initdb, je devais aussi chown le postgres dir ( chown _your username on your comp_ usr/local/var/postgres), puis initdb. Après cela, le serveur démarre automatiquement lorsque vous redémarrez (si vous avez suivi les instructions de Homebrew pour cela) ou manuellement pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start.
septerr
2
Après initdb(y compris la suppression de l'ancien répertoire si nécessaire), brew services start postgresqlfonctionne
Dmitri
Si l'idée de rm -rftout ce qui se trouve actuellement dans votre base de données vous fait un peu peur, au lieu de le supprimer entièrement, vous pouvez utiliser quelque chose comme mv /usr/local/var/postgres /usr/local/var/postgres.backuppour le déplacer vers un nouveau répertoire de sauvegarde, puis exécutez la commande pour redémarrer la base de données.
Hartley Brody
102

Si votre ordinateur a été redémarré brusquement

Tout d'abord, vous devez supprimer le fichier /usr/local/var/postgres/postmaster.pidEnsuite, vous pouvez redémarrer le service en utilisant l'une des nombreuses autres méthodes mentionnées en fonction de votre installation.

Vous pouvez le vérifier en consultant les journaux de Postgres pour voir ce qui pourrait se passer: tail -f /usr/local/var/postgres/server.log

rafaelportela
la source
2
Vous pouvez vérifier tail -f /usr/local/var/postgres/server.logsi vous devez supprimer ce fichier. ref coderwall.com/p/zf-fww/…
user1448319
Le mien était sous / Users / <user> / Library / Application \ Support / Postgres / var-9.6 / postmaster.pid
BatteryAcid
pour homebrew installe le chemin est~/homebrew/var/postgres/postmaster.pid
blnc
2
Wow ... seulement cela a fonctionné pour moi! Pouvez-vous donner une explication plus détaillée des raisons pour lesquelles nous devrions supprimer postmaster.pidsi l'ordinateur a été redémarré brutalement?
adkl
1
C'était vraiment utile
NinComPoop
81

Une autre approche utilise lunchy gem (un wrapper pour launchctl):

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

Pour démarrer les postgres:

lunchy start postgres

Pour arrêter les postgres:

lunchy stop postgres

Pour plus d'informations, reportez-vous à: " Comment installer PostgreSQL sur un Mac avec Homebrew et Lunchy "

pisaruk
la source
selon la façon dont vous configurez postgres, vous devrez peut-être utiliser postgresql au lieu de postgres
Devon Kiss
72

Voici mes 2 cents: j'ai fait un alias pour postgres pg_ctl et l'ai mis dans .bash_profile (ma version postgresql est 9.2.4, et le chemin de la base de données est /Library/PostgreSQL/9.2/data).

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

Lancez un nouveau terminal.

Et alors? Vous pouvez démarrer / arrêter votre serveur postgresql avec ceci:

postgres.server start
postgres.server stop
Kenial
la source
Spécifier le répertoire de données avec -D est la clé ici
olore
3
Je n'arrêtais pas d'obtenir "Veuillez vous connecter (en utilisant, par exemple," su ") en tant qu'utilisateur (non privilégié) qui sera propriétaire du processus serveur." lors de l'exécution juste sudo. +1
pyb
Merci. Les suggestions des outils postgres d'utiliser su échouent lamentablement. sudo -u fonctionne avec brio. (sur El Capitan)
uchuugaka
33

Le moyen le plus propre de loin pour démarrer / arrêter / redémarrer postgres si vous l'avez installé brewest de simplement décharger et / ou charger le fichier de configuration launchd fourni avec l'installation:

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

La première ligne arrêtera les postgres et la deuxième ligne le démarrera. Pas besoin de spécifier de répertoires de données, etc. car tout est dans ce fichier.

Markus Amalthea Magnuson
la source
fonctionne très bien pour PostgreSQL 9.5.3 installé sur OS X via Brew !! Merci!
jpswain
cela fonctionne comme un charme lorsque le serveur postgres n'est pas arrêté correctement et n'accepte pas les connexions entrantes
Augusto Samamé Barrientos
5
Homebrew lui-même a des wrappers simples pour ces commandes, par exemple: brew services start postgres(et stop). Jetez un -và la fin et vous pouvez voir ce qu'il fait.
Mark Edington
28

Pour démarrer le serveur postgresql:

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

pour mettre fin au serveur postgresql:

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

Vous pouvez également créer un alias via CLI pour vous faciliter la tâche:

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'

Avec ceux-ci, vous pouvez simplement taper "pg-start" pour démarrer Postgres et "pg-stop" pour le fermer.

Todd
la source
3
J'ai une erreur pg_ctl: directory "/usr/local/var/postgres" is not a database cluster directorycomment résoudre ce problème?
Rohman Masyhar
22

À des fins de test, je pense que l'application PostgreSQL est la meilleure option!

Exécutez une application et le serveur est opérationnel. Fermez l'application et le serveur tombe en panne.

http://postgresapp.com/

Crystian Leão
la source
9

lorsque vous installez postgresql en utilisant homebrew:

brew install postgres

à la fin de la sortie, vous verrez ces méthodes pour démarrer le serveur:

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

Je pense que c'est la meilleure façon.

Vous pouvez ajouter un alias dans votre .profile pour plus de commodité.

jkaluzka
la source
7

Pour une base de données de test jetable rapide, vous pouvez exécuter le serveur au premier plan.

Initialiser une nouvelle base de données postgres dans un nouveau répertoire

mkdir db
initdb db -E utf8
createdb public

Démarrez le serveur au premier plan (ctrl-C pour arrêter le serveur)

postgres -d db

Dans une autre session shell, connectez-vous au serveur

psql -d public
k107
la source
Cela semble génial mais ne fonctionne pas pour moi - ce n'était pas le serveur qui était déjà en cours d'exécution pour faire l'étape createdb. Lorsque j'essaie de démarrer le service, il indique qu'il a besoin du fichier PGDATA ou config, qui n'existe pas encore. Qu'est-ce que je rate?
szeitlin
7

J'ai le même problème et j'effectue toutes les mises à jour depuis le premier message. Mais après vérification du fichier journal:

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

Je vois la vraie cause:

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

Après avoir changé l'autorisation sur ce répertoire

chmod 0700 /usr/local/var/postgres

le serveur postgres a démarré.

Vérifiez à chaque fois le fichier journal.

Roosh
la source
5

PostgreSQL est intégré dans Server.app disponible via l'App Store de Mountain Lion. Cela signifie qu'il est déjà configuré et qu'il vous suffit de le lancer, puis de créer des utilisateurs et des bases de données.

Pointe : ne commencez pas par définir $ PGDATA et ainsi de suite, prenez les emplacements des fichiers tels quels.

Vous auriez ce fichier: /Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist

Commencer:

sudo serveradmin start postgres

Le processus a commencé avec des arguments:

/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 unix_socket_group =_post_70_six

Vous pouvez sudo:

sudo -u _postgres psql template1

Ou connectez-vous:

psql -h localhost -U _postgres postgres

Vous pouvez trouver le répertoire de données, la version, l'état d'exécution et ainsi de suite avec

sudo serveradmin fullstatus postgres  
datasmid
la source
Je n'ai pas pu trouver grand chose d'autre qui montre comment utiliser le Postgres intégré. M'a également aidé à trouver la commande serveradmin. Merci
Jason S
L'exécution d'un service en tant qu'utilisateur root (sudo) n'est certainement pas une bonne idée, dès qu'il y a un problème de sécurité, tout l'ordinateur est compromis.
Carlos Barcelona
Le postgresql ne s'exécute pas en tant que root, mais en tant que _postgres.
bbaassssiiee
5

Variation sur cette réponse: 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
substancejoy
la source
Vous devez ajouter un lien vers la réponse à laquelle vous faites référence.
Jeffrey Bosboom
Cela a été utile car mon pg fonctionnait bien et tout à coup, il a cessé de fonctionner et n'a pas pu trouver le dossier / var / postgres.
shinesecret
Quelqu'un pourrait-il expliquer pourquoi cela est supérieur à la réponse liée? Comme je l'ai vu, j'ai déjà voté la dernière fois que j'ai eu un problème similaire, je vais l'utiliser car il n'y a aucune raison donnée ici.
MCB
4

À des fins de développement, l'un des moyens les plus simples consiste à installer Postgres.app à partir du site officiel . Il peut être démarré / arrêté à partir du dossier Applications ou à l'aide des commandes suivantes dans le terminal:

# start
open -a Postgres

# stop
killall Postgres
killall postgres
Melnosta
la source
18
killalln'est probablement pas le meilleur moyen d'arrêter une base de données.
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.
zee
la source
4

Si vous avez installé en utilisant brew, la commande ci-dessous devrait suffire.

brew services restart postgresql

Et cela peut parfois ne pas fonctionner, dans ce cas ci-dessous deux commandes devraient définitivement fonctionner

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

pg_ctl -D /usr/local/var/postgres start
shanu khera
la source
1

aucune des réponses ci-dessus n'a résolu le problème pour moi malgré les mêmes messages d'erreur. J'ai pu récupérer et exécuter mon instance en supprimant le fichier postmaster.pid existant qui était verrouillé et n'autorisant pas les connexions.

Swedendrift
la source
1

Pour macports, utilisez simplement la commande load / unload et le nom de port du serveur en cours d'exécution:

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

vous n'avez donc pas à vous rappeler où se trouve le /Library/LaunchDaemons/org.macports.postgresql96.plistfichier

Steve
la source
1

Si vous avez installé Postgres à l'aide du programme d'installation EnterpriseDB, alors ce que @Kenial a suggéré est la voie à suivre.

sudo -u postgres pg_ctl -D /Library/PostgreSQL/{version}/data start
sudo -u postgres pg_ctl -D /Library/PostgreSQL/{version}/data stop
hithacker
la source
1

qui a fonctionné pour moi (macOS 10.13) sudo -u postgres /Library/PostgreSQL/9.6/bin/pg_ctl start -D /Library/PostgreSQL/9.6/data

ou d'abord cd /Library/PostgreSQL/9.6/bin/

Dmitry Evgrafoov
la source
1

$ brew upgrade postgres

réparé pour moi.

Cela, bien sûr, mettra à niveau votre version postgres et mettra à jour / installera toutes les dépendances.

AVERTISSEMENT: faites ceci en sachant que votre version postgresql va probablement changer. Pour moi, ce n'était pas grave.

thedotto
la source
0

Pour Mac / OSX, j'aime vraiment LaunchRocket pour cela et d'autres services d'arrière-plan que j'ai utilisés dans le développement.

https://github.com/jimbojsb/launchrocket

Ce site contient de belles instructions sur l'installation: http://macappstore.org/launchrocket/

Cela vous donne un bel écran dans vos Préférences Système qui vous permet de lancer, redémarrer, rooter, lancer à la connexion.

theUtherSide
la source
0

Cela a fonctionné pour moi à chaque fois, inspiré par Craig Ringer:

brew install proctools
sudo pkill -u postgres

proctools inclut pkill. Si vous n'avez pas Brew: https://brew.sh/

Punnerud
la source
0

Il y a des cas marginaux qui seront peut-être utiles pour quelqu'un:

Il y a une option, que vous aurez postgres.pid rempli de PID. Mais si vous redémarrez votre machine, et avant que le postgress ne revienne, un autre processus prendra ce PID. Si cela se produit, à la fois le statut pg_ctl et le service de brassage interrogés sur le statut postgres, vous diront qu'il est UP. Juste ps aux | grep et vérifier si c'est vraiment postgress

Adam Piotrowski
la source
0

Homebrew est le chemin !!

Pour démarrer le service:

brew services start postgresql   

Pour l'énumérer:

brew services list |grep postgres

pour arrêter le service .:

brew services stop postgresql 
Muhammad Dyas Yaskur
la source
0

Si vous ne l'avez pas installé avec brew et directement à partir du package mac, cela a fonctionné pour moi pour PostgreSQL 12 lorsque vous utilisez tous les emplacements, variables, etc. par défaut.

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

J'étais confronté au même problème. J'ai essayé toutes ces solutions mais aucune n'a fonctionné.

Enfin réussi à le faire fonctionner en changeant postgres HOST dans les paramètres de Django de localhostà 127.0.0.1.

Bravo si ça aide.

Tazeem
la source