Espero que esto ayude a aquellos de ustedes que podrían estar haciendo esto en Python .
Creé un script / solución de trabajo completo en un GitHubGist; consulte la URL debajo de este fragmento de código.
check_user_cmd = ("SELECT 1 FROM pg_roles WHERE rolname='%s'" % (deis_app_user))
create_user_cmd = ("CREATE ROLE %s WITH LOGIN CREATEDB PASSWORD '%s'" % (deis_app_user, deis_app_passwd))
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)
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 funciones / usuarios remotos idempotentes (RDS) PostgreSQL desde python sin módulos CM, etc.
psql
es el comando. Pero si está hablandocreateuser
de la utilidad de línea de comando (obviamente lo hace, no noté la falta de espaciocreate user
al principio), entonces puede ser más fácil simplemente ignorar el estado de salida y redirigir la salida a/dev/null
.psql postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='USR_NAME'"
. Rinde1
si se encuentra y nada más.echo "SELECT rolname FROM pg_roles WHERE rolname='USR_NAME';" | psql | grep -c USR_NAME
. Agregue su solución como respuesta sin "postgres" después de psql.