diff --git a/bin/pg_repack.c b/bin/pg_repack.c index 9002fafb..766e210e 100644 --- a/bin/pg_repack.c +++ b/bin/pg_repack.c @@ -487,11 +487,12 @@ preliminary_checks(char *errbuf, size_t errsize){ } /* Query the extension version. Exit if no match */ - res = execute_elevel("select repack.version(), repack.version_sql()", + res = execute_elevel("select repack.version(), repack.version_sql(), current_setting('server_version_num')::int >= 90600", 0, NULL, DEBUG2); if (PQresultStatus(res) == PGRES_TUPLES_OK) { const char *libver; + const char *has_iitst; char buf[64]; /* the string is something like "pg_repack 1.1.7" */ @@ -518,6 +519,13 @@ preliminary_checks(char *errbuf, size_t errsize){ buf, libver); goto cleanup; } + + /* If Postgres version is 9.6 or newer, disable idle-in-transaction timeout */ + has_iitst = getstr(res, 0, 2); + if (0 == strcmp("t", has_iitst)) + { + command("SET idle_in_transaction_session_timeout = 0", 0, NULL); + } } else { @@ -1703,6 +1711,10 @@ lock_access_share(PGconn *conn, Oid relid, const char *target_name) termStringInfo(&sql); pgut_command(conn, "RESET statement_timeout", 0, NULL); + if (PQserverVersion(conn) >= 90600) + { + pgut_command(conn, "RESET idle_in_transaction_session_timeout", 0, NULL); + } return ret; } diff --git a/regress/expected/nosuper.out b/regress/expected/nosuper.out index 1d2fad2d..ace7ecb8 100644 --- a/regress/expected/nosuper.out +++ b/regress/expected/nosuper.out @@ -14,6 +14,6 @@ ERROR: pg_repack failed with error: You must be a superuser to use pg_repack -- => ERROR \! pg_repack --dbname=contrib_regression --table=tbl_cluster --username=nosuper --no-superuser-check ERROR: pg_repack failed with error: ERROR: permission denied for schema repack -LINE 1: select repack.version(), repack.version_sql() +LINE 1: select repack.version(), repack.version_sql(), current_setti... ^ DROP ROLE IF EXISTS nosuper; diff --git a/regress/expected/nosuper_1.out b/regress/expected/nosuper_1.out index 973ab293..55a6d556 100644 --- a/regress/expected/nosuper_1.out +++ b/regress/expected/nosuper_1.out @@ -14,4 +14,6 @@ ERROR: pg_repack failed with error: You must be a superuser to use pg_repack -- => ERROR \! pg_repack --dbname=contrib_regression --table=tbl_cluster --username=nosuper --no-superuser-check ERROR: pg_repack failed with error: ERROR: permission denied for schema repack +LINE 1: select repack.version(), repack.version_sql(), current_setting('server_version_num')::int >= 90600 + ^ DROP ROLE IF EXISTS nosuper;