Use 'set_config(...)' function to update the 'bytea_output' settings

instead of 'UPDATE' statement, which is not allowed in the the read-only
instances.

Reported by: Robert J. Rotter
Solution provided by: Tom Lane

Fixes #3973
This commit is contained in:
Ashesh Vashi 2019-02-08 10:10:55 +05:30
parent 28ce485cd2
commit eb3d3980e0

View File

@ -406,12 +406,14 @@ class Connection(BaseConnection):
# Note that we use 'UPDATE pg_settings' for setting bytea_output as a
# convenience hack for those running on old, unsupported versions of
# PostgreSQL 'cos we're nice like that.
status = _execute(cur, "SET DateStyle=ISO; "
"SET client_min_messages=notice;"
"UPDATE pg_settings SET setting = 'escape'"
" WHERE name = 'bytea_output';"
"SET client_encoding='{0}';"
.format(postgres_encoding))
status = _execute(
cur,
"SET DateStyle=ISO; "
"SET client_min_messages=notice; "
"SELECT set_config('bytea_output','escape',false) FROM pg_settings"
" WHERE name = 'bytea_output'; "
"SET client_encoding='{0}';".format(postgres_encoding)
)
if status is not None:
self.conn.close()