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
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
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
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.
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
à 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).
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 .