ver usuarios usar saber procesos postgres pg_stat_replication monitorear listar esta ejecutadas datos corriendo consultas como bloqueos postgresql shell user-management

postgresql - usuarios - ¿Cómo verificar si existe un usuario postgres?



ver consultas ejecutadas postgresql (3)

Espero que esto ayude a aquellos de ustedes que podrían estar haciendo esto en Python .
Creé una secuencia de comandos / solución de trabajo completa en un GitHubGist; consulte la URL debajo de este fragmento de código.

# ref: https://stackoverflow.com/questions/8546759/how-to-check-if-a-postgres-user-exists check_user_cmd = ("SELECT 1 FROM pg_roles WHERE rolname=''%s''" % (deis_app_user)) # our create role/user command and vars create_user_cmd = ("CREATE ROLE %s WITH LOGIN CREATEDB PASSWORD ''%s''" % (deis_app_user, deis_app_passwd)) # ref: https://stackoverflow.com/questions/37488175/simplify-database-psycopg2-usage-by-creating-a-module class RdsCreds(): def __init__(self): self.conn = psycopg2.connect("dbname=%s user=%s host=%s password=%s" % (admin_db_name, admin_db_user, db_host, admin_db_pass)) self.conn.set_isolation_level(0) self.cur = self.conn.cursor() def query(self, query): self.cur.execute(query) return self.cur.rowcount > 0 def close(self): self.cur.close() self.conn.close() db = RdsCreds() user_exists = db.query(check_user_cmd) # PostgreSQL currently has no ''create role if not exists'' # So, we only want to create the role/user if not exists if (user_exists) is True: print("%s user_exists: %s" % (deis_app_user, user_exists)) print("Idempotent: No credential modifications required. Exiting...") db.close() else: print("%s user_exists: %s" % (deis_app_user, user_exists)) print("Creating %s user now" % (deis_app_user)) db.query(create_user_cmd) user_exists = db.query(check_user_cmd) db.close() print("%s user_exists: %s" % (deis_app_user, user_exists))

Proporciona el rol / usuario de creación de PostgreSQL remoto (RDS) idempotent de Python sin módulos CM, etc.

createuser permite la creación de un usuario (ROLE) en PostgreSQL. ¿Hay alguna manera simple de verificar si ese usuario (nombre) ya existe? De lo contrario, createuser devuelve un error:

createuser: creation of new role failed: ERROR: role "USR_NAME" already exists

ACTUALIZACIÓN: la solución debe ser ejecutable desde el shell, preferiblemente, para que sea más fácil de automatizar dentro de un script.


Seguir la misma idea que verificar si existe una db

psql -t -c ''/du'' | cut -d /| -f 1 | grep -qw <user_to_check>

y puedes usarlo en un script como este:

if psql -t -c ''/du'' | cut -d /| -f 1 | grep -qw <user_to_check>; then # user exists # $? is 0 else # ruh-roh # $? is 1 fi


SELECT 1 FROM pg_roles WHERE rolname=''USR_NAME''

Y en términos de línea de comando (gracias a Erwin):

psql postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname=''USR_NAME''"

Rinde 1 si se encuentra y nada más.

Es decir:

psql postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname=''USR_NAME''" | grep -q 1 || createuser ...