postgresql modules: use query parameters with cursor objects (#65791)

This commit is contained in:
Andrew Klychkov 2019-12-14 11:13:59 +03:00 committed by Abhijeet Kasurde
parent f5a0d6e4ba
commit 885cecfc94
5 changed files with 25 additions and 17 deletions

View file

@ -0,0 +1,4 @@
bugfixes:
- postgresql_set - use query parameters with cursor object (https://github.com/ansible/ansible/pull/65791).
- postgresql_slot - use query parameters with cursor object (https://github.com/ansible/ansible/pull/65791).
- postgresql_subscription - use query parameters with cursor object (https://github.com/ansible/ansible/pull/65791).

View file

@ -185,9 +185,9 @@ POSSIBLE_SIZE_UNITS = ("mb", "gb", "tb")
def param_get(cursor, module, name):
query = ("SELECT name, setting, unit, context, boot_val "
"FROM pg_settings WHERE name = '%s'" % name)
"FROM pg_settings WHERE name = %(name)s")
try:
cursor.execute(query)
cursor.execute(query, {'name': name})
info = cursor.fetchall()
cursor.execute("SHOW %s" % name)
val = cursor.fetchone()

View file

@ -184,26 +184,30 @@ class PgSlot(object):
if kind == 'physical':
# Check server version (needs for immedately_reserverd needs 9.6+):
if self.cursor.connection.server_version < 96000:
query = "SELECT pg_create_physical_replication_slot('%s')" % self.name
query = "SELECT pg_create_physical_replication_slot(%(name)s)"
else:
query = "SELECT pg_create_physical_replication_slot('%s', %s)" % (self.name, immediately_reserve)
query = "SELECT pg_create_physical_replication_slot(%(name)s, %(i_reserve)s)"
self.changed = exec_sql(self, query,
query_params={'name': self.name, 'i_reserve': immediately_reserve},
ddl=True)
elif kind == 'logical':
query = "SELECT pg_create_logical_replication_slot('%s', '%s')" % (self.name, output_plugin)
self.changed = exec_sql(self, query, ddl=True)
query = "SELECT pg_create_logical_replication_slot(%(name)s, %(o_plugin)s)"
self.changed = exec_sql(self, query,
query_params={'name': self.name, 'o_plugin': output_plugin}, ddl=True)
def drop(self):
if not self.exists:
return False
query = "SELECT pg_drop_replication_slot('%s')" % self.name
self.changed = exec_sql(self, query, ddl=True)
query = "SELECT pg_drop_replication_slot(%(name)s)"
self.changed = exec_sql(self, query, query_params={'name': self.name}, ddl=True)
def __slot_exists(self):
query = "SELECT slot_type FROM pg_replication_slots WHERE slot_name = '%s'" % self.name
res = exec_sql(self, query, add_to_executed=False)
query = "SELECT slot_type FROM pg_replication_slots WHERE slot_name = %(name)s"
res = exec_sql(self, query, query_params={'name': self.name}, add_to_executed=False)
if res:
self.exists = True
self.kind = res[0][0]

View file

@ -555,9 +555,9 @@ class PgSubscription():
"ON s.subdbid = d.oid "
"JOIN pg_catalog.pg_roles AS r "
"ON s.subowner = r.oid "
"WHERE s.subname = '%s' AND d.datname = '%s'" % (self.name, self.db))
"WHERE s.subname = %(name)s AND d.datname = %(db)s")
result = exec_sql(self, query, add_to_executed=False)
result = exec_sql(self, query, query_params={'name': self.name, 'db': self.db}, add_to_executed=False)
if result:
return result[0]
else:
@ -573,9 +573,9 @@ class PgSubscription():
"FROM pg_catalog.pg_subscription_rel r "
"JOIN pg_catalog.pg_subscription s ON s.oid = r.srsubid "
"JOIN pg_catalog.pg_class c ON c.oid = r.srrelid "
"WHERE s.subname = '%s'" % self.name)
"WHERE s.subname = %(name)s")
result = exec_sql(self, query, add_to_executed=False)
result = exec_sql(self, query, query_params={'name': self.name}, add_to_executed=False)
if result:
return [dict(row) for row in result]
else:

View file

@ -73,7 +73,7 @@
- assert:
that:
- result is changed
- result.queries == ["SELECT pg_create_physical_replication_slot('slot0', False)"]
- result.queries == ["SELECT pg_create_physical_replication_slot('slot0', false)"]
when: postgres_version_resp.stdout is version('9.6', '>=')
- assert:
@ -177,7 +177,7 @@
- assert:
that:
- result is changed
- result.queries == ["SELECT pg_create_physical_replication_slot('slot1', True)"]
- result.queries == ["SELECT pg_create_physical_replication_slot('slot1', true)"]
when: postgres_version_resp.stdout is version('9.6', '>=')
# Check, rowcount must be 1