Comment savoir si mon serveur Postgresql est actif 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
Mise à jour 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
Le moyen le plus simple de vérifier les processus en cours:
ps auxwww | grep postgres
Et recherchez une commande qui ressemble à ceci (votre version ne sera peut-être pas la version 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 également définir la variable d’environnement PGDATA
.
Voici ce que j'ai dans mon ~/.bashrc
fichier 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 entrer en vigueur, pensez à le rechercher comme suit:
$ . ~/.bashrc
Maintenant, essayez-le et vous devriez obtenir quelque chose comme ça:
$ show-pg-status
pg_ctl: server is running (PID: 11030)
/usr/local/Cellar/postgresql/9.2.4/bin/postgres
Vous n'avez probablement pas initié postgres.
Si vous avez installé avec HomeBrew, l'init doit être lancé avant que quoi que ce soit 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 toujours des problèmes, vérifiez votre pare-feu. Si vous en utilisez un bon comme HandsOff! et il a été configuré pour bloquer le trafic, votre page ne verra pas la base de données.
A partir de PostgreSQL 9.3, vous pouvez utiliser la commande pg_isready
pour déterminer l’état de la connexion d’un serveur PostgreSQL.
De la docs :
pg_isready renvoie 0 au shell si le serveur accepte les connexions normalement, 1 si le serveur refuse 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 paramètres non valides).
Cela dépend de l'emplacement d'installation de votre serveur postgresql. Vous utilisez pg_ctl pour démarrer manuellement le serveur comme ci-dessous.
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Le pg_ctl status
La commande suggérée dans d'autres réponses vérifie que le processus postmaster existe et, le cas échéant, indique 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, telle que psql
pour exécuter une requête simple et vérifier le code de sortie, par exemple. psql -c 'SELECT 1'
, Ou utiliser pg_isready
pour vérifier l'état de la connexion .