web-dev-qa-db-fra.com

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

MISE À JOUR FINALE:

J'avais oublié de lancer la commande initdb.

</ FINAL UPDATE>

en exécutant cette commande

ps auxwww | grep postgres

Je vois que postgres n'est pas en cours d'exécution

> 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 suivante: Comment démarrer le serveur postgresql?

mettre à 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 contact n'a pas réussi alors j'ai fait ceci à la place:

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

Mais lorsque j'essaie de démarrer le serveur Rails, je vois encore 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 je 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

également:

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, j'ai fait ceci:

>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 ceci:

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

alors j'ai 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 "Est-ce que le serveur tourne?" message.

832
Ramy

Le gestionnaire de paquets Homebrew inclut des plists launchctl pour démarrer automatiquement. Pour plus d'informations, lancez brew info postgres.

Démarrer manuellement:

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

Arrêter manuellement:

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

Démarrer automatiquement:

"Pour que launchd lance postgresql maintenant 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 tcp localhost sont activées dans pg_hba.conf: 

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

Vérifiez les listen_addresses 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 l'installateur EnterpriseDB .

Vérifiez le résultat des commandes suivantes pour déterminer le gestionnaire de packages avec lequel il a été installé:

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

Si vous voulez démarrer et arrêter manuellement postgresql (installé via homebrew), la méthode la plus simple est la suivante:

brew services start postgresql

et

brew services stop postgresql
294
malopezcruz

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

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

Une autre approche consiste à utiliser lunchy gem (un wrapper pour launchctl):

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

Pour démarrer postgres:

lunchy start postgres

Pour arrêter postgres:

lunchy stop postgres

Pour plus d'informations, consultez: " Comment installer PostgreSQL sur un Mac avec Homebrew et Lunchy "

78
pisaruk

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

Tout d’abord, vous devez supprimer le fichier /usr/local/var/postgres/postmaster.pid. Vous pouvez ensuite redémarrer le service en utilisant l’une des nombreuses 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

73
rafaelportela

Voici mes 2 centimes: j'ai créé un alias pour postgres pg_ctl et je l'ai mis dans .bash_profile (ma version de 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"

Lancer un nouveau terminal. 

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

postgres.server start
postgres.server stop
68
Kenial

Le moyen le plus propre de loin de démarrer/arrêter/redémarrer postgres si vous l'avez installé via brew consiste 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 postgres et la seconde le démarrera. Pas besoin de spécifier des répertoires de données, etc., car tout est dans ce fichier.

Pour démarrer le serveur postgresql:

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

pour terminer le serveur postgresql:

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

Vous pouvez également créer un alias via CLI pour simplifier les choses:

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.

27
Todd

À des fins de test, je pense que PostgreSQL App 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/

22
Crystian Leão

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

9
jkaluzka

J'ai le même problème et effectuer toutes les mises à jour du premier post. 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 modification, autorisation sur ce répertoire

chmod 0700 /usr/local/var/postgres

le serveur postgres a commencé.

Vérifier à chaque fois le fichier journal.

7
Roosh

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émarrer le serveur au premier plan (ctrl-C pour l'arrêter)

postgres -d db

Dans une autre session Shell, connectez-vous au serveur.

psql -d public
7
k107

Variation sur cette réponse: https://stackoverflow.com/a/13103603/2394728

initdb `brew --prefix`/var/postgres/data -E utf8`
4
substancejoy

Pour le développement, l’un des moyens les plus simples consiste à installer Postgres.app à partir du site officiel . Il peut être démarré/arrêté depuis le dossier Applications ou en utilisant les commandes suivantes dans le terminal:

# start
open -a Postgres

# stop
killall Postgres
killall postgres
4
Melnosta

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

Conseil : Ne commencez pas par définir $ PGDATA, etc., prenez les emplacements de 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 nom_fichier_log = PostgreSQL.log -c log_line_prefix =% t -c log_lock_waits = on -c log_statement = ddl -c logging_collector = sur -c

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 de fonctionnement, etc. avec 

Sudo serveradmin fullstatus postgres  
4
bbaassssiiee
   # 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.
3
zee

Si vous avez installé avec 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 fonctionner définitivement

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

pg_ctl -D /usr/local/var/postgres start
2
shanu khera

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

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

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 remettre mon instance en service en supprimant le fichier postmaster.pid existant qui était verrouillé et en n'autorisant pas les connexions.

1
Swedendrift

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

Sudo port load postgresql96-server
- or -
Sudo port unload postgresql96-server

de sorte que vous ne devez pas vous rappeler où se trouve le fichier /Library/LaunchDaemons/org.macports.postgresql96.plist

1
Steve

Il existe des cas Edge qui seront peut-être utiles pour quelqu'un:

Il est possible que postgres.pid soit rempli avec un certain PID. Mais si vous redémarrez votre machine, et avant que postgress revienne, un autre processus utilisera ce PID. Si cela se produit, pg_ctl status et le service brasseur interrogé sur le statut postgres vous indiqueront qu'il s'agit de UP. Juste ps aux | grep et vérifier si c'est vraiment postgress

0
Adam Piotrowski

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/

0
Punnerud

Pour Mac/OSX, j'aime beaucoup LaunchRocket pour ce service et les autres services d'arrière-plan utilisés en développement.

https://github.com/jimbojsb/launchrocket

Ce site contient de bonnes instructions d’installation: http://macappstore.org/launchrocket/

Cela vous donne un joli écran dans vos préférences système qui vous permet de lancer, redémarrer, root, lancer à la connexion.

0
theUtherSide
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres

https://hub.docker.com/_/postgres

0
dewijones92

$ brew upgrade postgres

corrigé pour moi.

Cela, bien sûr, mettra à niveau votre version de Postgres et mettra à jour/installera toutes les dépendances. AVERTISSEMENT: Faites ceci en sachant que votre version de postgresql changera probablement. Pour moi, ce n'était pas grave.

0
thedanotto

Par souci d'exhaustivité: vérifiez si vous êtes dans une instance Tmux ou Screen, le démarrage ne fonctionnant pas à partir de là.

De: https://superuser.com/questions/879640/error-while-trying-to-start-postgres-installed-via-homebrew-operation-not-permi/898585

Cela a résolu le problème pour moi.

0
Fr4nc3sc0NL

cela 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 premier cd /Library/PostgreSQL/9.6/bin/

0
Dmitry Evgrafoov