diff --git a/src/bin/pg_dump/pg_backup.h b/src/bin/pg_dump/pg_backup.h
index 07b4e61..fbe4aef 100644
*** a/src/bin/pg_dump/pg_backup.h
--- /bsrc/bin/pg_dump/pg_backup.h
*************** typedef struct _restoreOptions
*** 87,92 ****
--- 87,93 ----
  										 * restore */
  	int			use_setsessauth;/* Use SET SESSION AUTHORIZATION commands
  								 * instead of OWNER TO */
+ 	bool		disable_statement_timeout; /* Do we disable statement_timeout? */
  	char	   *superuser;		/* Username to use as superuser */
  	int			dataOnly;
  	int			dropSchema;
diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index a4b442e..8ce6a43 100644
*** a/src/bin/pg_dump/pg_backup_archiver.c
--- /bsrc/bin/pg_dump/pg_backup_archiver.c
*************** RestoreArchive(Archive *AHX, RestoreOpti
*** 220,225 ****
--- 220,230 ----
  	}
  
  	/*
+ 	* Disable statement_timeout in archive for pg_restore/psql
+ 	*/
+ 	if (ropt->disable_statement_timeout)
+ 		ahprintf(AH, "SET statement_timeout = 0;\n");
+ 	/*
  	 * Establish important parameter values right away.
  	 */
  	_doSetFixedOutputState(AH);
*************** NewRestoreOptions(void)
*** 465,470 ****
--- 470,476 ----
  	opts->format = archUnknown;
  	opts->suppressDumpWarnings = false;
  	opts->exit_on_error = false;
+ 	opts->disable_statement_timeout = true;
  
  	return opts;
  }
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index ed1b33d..bf9365a 100644
*** a/src/bin/pg_dump/pg_dump.c
--- /bsrc/bin/pg_dump/pg_dump.c
*************** main(int argc, char **argv)
*** 225,230 ****
--- 225,231 ----
  	int			outputNoOwner = 0;
  	static int	use_setsessauth = 0;
  	static int	disable_triggers = 0;
+ 	static int	use_statement_timeout = 0;
  	char	   *outputSuperuser = NULL;
  
  	RestoreOptions *ropt;
*************** main(int argc, char **argv)
*** 267,272 ****
--- 268,274 ----
  		{"disable-dollar-quoting", no_argument, &disable_dollar_quoting, 1},
  		{"disable-triggers", no_argument, &disable_triggers, 1},
  		{"use-set-session-authorization", no_argument, &use_setsessauth, 1},
+ 		{"use-statement-timeout", no_argument, &use_statement_timeout, 1},
  
  		{NULL, 0, NULL, 0}
  	};
*************** main(int argc, char **argv)
*** 419,424 ****
--- 421,428 ----
  					disable_triggers = 1;
  				else if (strcmp(optarg, "use-set-session-authorization") == 0)
  					use_setsessauth = 1;
+ 				else if (strcmp(optarg, "use-statement-timeout") == 0)
+ 					use_statement_timeout = 1;
  				else
  				{
  					fprintf(stderr,
*************** main(int argc, char **argv)
*** 571,576 ****
--- 575,583 ----
  	 */
  	do_sql_command(g_conn, "BEGIN");
  
+ 	if (!use_statement_timeout)
+ 		do_sql_command(g_conn, "SET statement_timeout = 0;");
+ 
  	do_sql_command(g_conn, "SET TRANSACTION ISOLATION LEVEL SERIALIZABLE");
  
  	/* Select the appropriate subquery to convert user IDs to names */
*************** help(const char *progname)
*** 771,776 ****
--- 778,784 ----
  	printf(_("  --use-set-session-authorization\n"
  			 "                              use SESSION AUTHORIZATION commands instead of\n"
  	"                              ALTER OWNER commands to set ownership\n"));
+ 	printf(_("  --use-statement-timeout     respect statement_timeout\n"));
  
  	printf(_("\nConnection options:\n"));
  	printf(_("  -h, --host=HOSTNAME      database server host or socket directory\n"));
diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c
index 0e8433f..b1367c5 100644
*** a/src/bin/pg_dump/pg_restore.c
--- /bsrc/bin/pg_dump/pg_restore.c
*************** main(int argc, char **argv)
*** 77,82 ****
--- 77,83 ----
  	static int	use_setsessauth = 0;
  	static int	disable_triggers = 0;
  	static int	no_data_for_failed_tables = 0;
+ 	static int use_statement_timeout = 0;
  
  	struct option cmdopts[] = {
  		{"clean", 0, NULL, 'c'},
*************** main(int argc, char **argv)
*** 113,118 ****
--- 114,120 ----
  		{"use-set-session-authorization", no_argument, &use_setsessauth, 1},
  		{"disable-triggers", no_argument, &disable_triggers, 1},
  		{"no-data-for-failed-tables", no_argument, &no_data_for_failed_tables, 1},
+ 		{"use-statement-timeout", no_argument, &use_statement_timeout, 1},
  
  		{NULL, 0, NULL, 0}
  	};
*************** main(int argc, char **argv)
*** 245,250 ****
--- 247,254 ----
  					use_setsessauth = 1;
  				else if (strcmp(optarg, "disable-triggers") == 0)
  					disable_triggers = 1;
+ 				else if (strcmp(optarg, "use-statement-timeout") == 0)
+ 					use_statement_timeout = 1;
  				else
  				{
  					fprintf(stderr,
*************** main(int argc, char **argv)
*** 292,297 ****
--- 296,302 ----
  	opts->disable_triggers = disable_triggers;
  	opts->use_setsessauth = use_setsessauth;
  	opts->noDataForFailedTables = no_data_for_failed_tables;
+ 	opts->disable_statement_timeout = !!use_statement_timeout;
  
  	if (opts->formatName)
  	{
*************** usage(const char *progname)
*** 403,408 ****
--- 408,414 ----
  			 "                           created\n"));
  	printf(_("  -1, --single-transaction\n"
  			 "                           restore as a single transaction\n"));
+ 	printf(_("  --use-statement-timeout     respect statement_timeout\n"));
  
  	printf(_("\nConnection options:\n"));
  	printf(_("  -h, --host=HOSTNAME      database server host or socket directory\n"));
