Comment vérifier si un utilisateur postgres existe?
createuser
permet la création d'un utilisateur (RÔLE) dans PostgreSQL. Est-il un moyen simple pour vérifier si l'utilisateur(nom) existe déjà? Sinon createuser revient avec une erreur:
createuser: creation of new role failed: ERROR: role "USR_NAME" already exists
Mise à JOUR: La solution doit être exécutable à partir de la coquille de préférence, de sorte qu'il est plus facile d'automatiser l'intérieur d'un script.
Vous devez vous connecter pour publier un commentaire.
Et en termes de ligne de commande (merci à Erwin):
Rendements 1 si trouvé, et rien d'autre.
Qui est:
psql
est la commande. Mais si vous parlezcreateuser
utilitaire de ligne de commande (vous faites évidemment, je n'avais pas remarqué le manque d'espace danscreate user
au premier abord), alors il peut être plus facile d'ignorer le statut de sortie et de rediriger la sortie de/dev/null
.psql postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='USR_NAME'"
. Les rendements1
si trouvé, et rien d'autre.echo "SELECT rolname FROM pg_roles WHERE rolname='USR_NAME';" | psql | grep -c USR_NAME
. Ajouter votre solution comme une réponse sans "postgres" après psql.createuser
de sortie, paspsql
s'.Suivant la même idée que pour vérifier si une base de données existe
et vous pouvez l'utiliser dans un script comme ceci:
pg_roles
, mais non d'une modification de commande\du
. Qui est le plus susceptible de ne pas changer?Espère que cela aide ceux d'entre vous qui pourraient être faites dans le python.
J'ai créé un travail complet du script/solution sur un GitHubGist--voir URL ci-dessous cet extrait de code.
Fournit équipotente à distance (RDS) PostgreSQL créer rôle/utilisateur de python sans CM de modules, etc.
psql -qtA -c "\du USR_NAME" | cut -d "|" -f 1
[[ -n $(psql -qtA -c "\du ${1}" | cut -d "|" -f 1) ]] && echo "exists" || echo "does not exist"