pg.ddx.io  pgsql-patches@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: daveg <daveg@sonic.net>
To: pgsql-patches@postgresql.org
Cc: hari@efrontier.com
Subject: Re: pg_dump lock timeout
Date: Sun, 11 May 2008 06:00:35 -0700
Message-ID: <20080511130035.GW5673@sonic.net> (raw)
In-Reply-To: <20080511113047.GV5673@sonic.net>
References: <20080511113047.GV5673@sonic.net>

On Sun, May 11, 2008 at 04:30:47AM -0700, daveg wrote:
> 
> Attached is a patch to add a commandline option to pg_dump to limit how long
> pg_dump will wait for locks during startup.

Ooops, really attached this time. 

-dg


-- 
David Gould       daveg@sonic.net      510 536 1443    510 282 0869
If simplicity worked, the world would be overrun with insects.

Attachments:

pg_dump.c.timeout_patch (text/plain, 3.0K) download *** pgsql/src/bin/pg_dump/pg_dump.c.orig 2008-05-11 03:23:06.000000000 -0700 --- pgsql/src/bin/pg_dump/pg_dump.c 2008-05-11 03:44:58.000000000 -0700 *************** *** 71,76 **** --- 71,77 ---- bool schemaOnly; bool dataOnly; bool aclsSkip; + const char *lockWaitTimeout; /* subquery used to convert user ID (eg, datdba) to user name */ static const char *username_subquery; *************** *** 238,243 **** --- 239,245 ---- {"column-inserts", no_argument, NULL, 'D'}, {"host", required_argument, NULL, 'h'}, {"ignore-version", no_argument, NULL, 'i'}, + {"lock-wait-timeout", required_argument, NULL, 'l'}, {"no-reconnect", no_argument, NULL, 'R'}, {"oids", no_argument, NULL, 'o'}, {"no-owner", no_argument, NULL, 'O'}, *************** *** 278,283 **** --- 280,286 ---- strcpy(g_opaque_type, "opaque"); dataOnly = schemaOnly = dumpInserts = attrNames = false; + lockWaitTimeout = NULL; progname = get_progname(argv[0]); *************** *** 299,305 **** } } ! while ((c = getopt_long(argc, argv, "abcCdDE:f:F:h:in:N:oOp:RsS:t:T:U:vWxX:Z:", long_options, &optindex)) != -1) { switch (c) --- 302,308 ---- } } ! while ((c = getopt_long(argc, argv, "abcCdDE:f:F:h:il:n:N:oOp:RsS:t:T:U:vWxX:Z:", long_options, &optindex)) != -1) { switch (c) *************** *** 350,355 **** --- 353,362 ---- /* ignored, deprecated option */ break; + case 'l': /* lock wait time */ + lockWaitTimeout = optarg; + break; + case 'n': /* include schema(s) */ simple_string_list_append(&schema_include_patterns, optarg); include_everything = false; *************** *** 755,760 **** --- 762,769 ---- printf(_("\nGeneral options:\n")); printf(_(" -f, --file=FILENAME output file name\n")); printf(_(" -F, --format=c|t|p output file format (custom, tar, plain text)\n")); + printf(_(" -l, --lock-wait-timeout=DELAY\n" + " timeout and fail after delay waiting for a table share lock\n")); printf(_(" -v, --verbose verbose mode\n")); printf(_(" -Z, --compress=0-9 compression level for compressed formats\n")); printf(_(" --help show this help, then exit\n")); *************** *** 3191,3196 **** --- 3200,3213 ---- i_reltablespace = PQfnumber(res, "reltablespace"); i_reloptions = PQfnumber(res, "reloptions"); + if (lockWaitTimeout) + { + /* Abandon the dump instead of waiting forever for a table lock */ + resetPQExpBuffer(lockquery); + appendPQExpBuffer(lockquery, "SET statement_timeout = "); + appendStringLiteralConn(lockquery, lockWaitTimeout, g_conn); + do_sql_command(g_conn, lockquery->data); + } for (i = 0; i < ntups; i++) { tblinfo[i].dobj.objType = DO_TABLE; *************** *** 3259,3264 **** --- 3276,3285 ---- tblinfo[i].dobj.name); } + if (lockWaitTimeout) + { + do_sql_command(g_conn, "SET statement_timeout = default"); + } PQclear(res); /*
pg_dump.sgml.timeout_patch (text/plain, 1.1K) download *** pgsql/doc/src/sgml/ref/pg_dump.sgml.orig 2008-05-11 03:38:05.000000000 -0700 --- pgsql/doc/src/sgml/ref/pg_dump.sgml 2008-05-11 03:38:56.000000000 -0700 *************** *** 302,307 **** --- 302,320 ---- </varlistentry> <varlistentry> + <term><option>-l <replaceable class="parameter">wait_time</replaceable></option></term> + <term><option>--lock-wait-timeout=<replaceable class="parameter">wait_time</replaceable></option></term> + <listitem> + <para> + Do not wait forever for table locks at the start of the dump. Instead + time out and abandon the dump if unable to lock a table within the + specified wait time. The wait time is specified with the same formats + as accepted for intervals by the SET command. + </para> + </listitem> + </varlistentry> + + <varlistentry> <term><option>-n <replaceable class="parameter">schema</replaceable></option></term> <term><option>--schema=<replaceable class="parameter">schema</replaceable></option></term> <listitem>

view thread (14+ messages)  latest in thread

Message-ID: <20080511130035.GW5673@sonic.net>
Permalink:  ../20080511130035.GW5673@sonic.net/
Also on:    postgresql.org/message-id/20080511130035.GW5673@sonic.net

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-patches@postgresql.org
  Cc: daveg@sonic.net, hari@efrontier.com
  Subject: Re: pg_dump lock timeout
  In-Reply-To: <20080511130035.GW5673@sonic.net>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox