Comment vérifier l'état du serveur PostgreSQL Mac OS X

Comment savoir si mon serveur Postgresql fonctionne ou non?

je reçois ce message:

[~/dev/working/sw] sudo bundle exec rake db:migrate 
rake aborted!
could not connect to server: Connection refused
    Is the server running on host "localhost" and accepting
    TCP/IP connections on port 5432?

mise à jour:

> which postgres
/usr/local/bin/postgres
> pg_ctl -D /usr/local/bin/postgres -l /usr/local/bin/postgres/server.log start
pg_ctl: could not open PID file "/usr/local/bin/postgres/postmaster.pid": Not a directory

Maj 2:

>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
71
demandé sur AlexG 2011-11-02 07:10:15

6 réponses

la façon la plus simple de vérifier les processus en cours d'exécution:

ps auxwww | grep postgres

et cherchez une commande qui ressemble à quelque chose comme ceci (votre version ne peut pas être 8.3):

/Library/PostgreSQL/8.3/bin/postgres -D /Library/PostgreSQL/8.3/data

pour démarrer le serveur, exécutez quelque chose comme ceci:

/Library/PostgreSQL/8.3/bin/pg_ctl start -D /Library/PostgreSQL/8.3/data -l postgres.log
70
répondu Bohemian 2011-11-02 04:03:40

Vous pouvez exécuter la commande suivante pour déterminer si postgress est en cours d'exécution:

$ pg_ctl status

vous voudrez aussi définir la variable d'environnement PGDATA .

voici ce que j'ai dans mon fichier ~/.bashrc pour postgres:

export PGDATA='/usr/local/var/postgres'
export PGHOST=localhost
alias start-pg='pg_ctl -l $PGDATA/server.log start'
alias stop-pg='pg_ctl stop -m fast'
alias show-pg-status='pg_ctl status'
alias restart-pg='pg_ctl reload'

pour les faire prendre effet, n'oubliez pas de le source comme ceci:

$ . ~/.bashrc

maintenant, essayez et vous devriez obtenir quelque chose comme ceci:

$ show-pg-status
pg_ctl: server is running (PID: 11030)
/usr/local/Cellar/postgresql/9.2.4/bin/postgres
39
répondu l3x 2013-09-02 21:55:35

vous n'avez probablement pas dans ses postgres.

si vous installez en utilisant HomeBrew, l'init doit être exécuté avant que quoi que ce soit d'autre ne devienne utilisable.

pour voir les instructions, Lancez brew info postgres

# Create/Upgrade a Database
If this is your first install, create a database with:
     initdb /usr/local/var/postgres -E utf8

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:
    pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

une fois que vous avez exécuté cela, il devrait dire quelque chose comme:

succès. Vous pouvez maintenant démarrer le serveur de base de données en utilisant:

postgres -D /usr/local/var/postgres or
pg_ctl -D /usr/local/var/postgres -l logfile start

si vous rencontrez encore des problèmes, vérifiez votre pare-feu. Si vous utilisez un bon comme HandsOff! et il a été configuré pour bloquer le trafic, alors votre page ne verra pas la base de données.

15
répondu SamGoody 2013-05-09 21:29:09

cela dépend de l'endroit où votre serveur postgresql est installé. Vous utilisez le pg_ctl démarrer manuellement le serveur comme ci-dessous.

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
9
répondu Nvick 2011-11-02 03:37:15

à partir de PostgreSQL 9.3, vous pouvez utiliser la commande pg_isready pour déterminer l'état de connexion d'un serveur PostgreSQL.

De la docs :

pg_isready renvoie 0 à l'interpréteur de commandes si le serveur accepte les connexions normalement, 1 si le serveur rejette les connexions (par exemple au démarrage), 2 s'il n'y a pas eu de réponse à la tentative de connexion, et 3 si aucune tentative n'a été faite (par exemple due pour les paramètres non valides).

9
répondu benjwadams 2016-05-04 22:21:15

la commande pg_ctl status suggérée dans d'autres réponses vérifie que le processus postmaster existe et, le cas échéant, signale qu'il est en cours d'exécution. Cela ne signifie pas nécessairement qu'il est prêt à accepter des connexions ou à exécuter des requêtes.

il est préférable d'utiliser une autre méthode comme psql pour exécuter une simple requête et vérifier le code de sortie, par exemple psql -c 'SELECT 1' , ou utiliser pg_isready pour vérifier le statut de connexion .

4
répondu Owen Pauling 2016-05-10 09:54:11