Hi Aron, Thanks for the input. The "small change" you suggest would change the behavior of the patch which I would prefer not to do as I have reasons for the previous behavior. Because you gave no reasons and "stop after removing LIMIT LOs" was not changed to "stop after attempting to remove LIMIT LOs" I suspect you were just trying to keep the code clean.
The difference: In your version of the patch vacuumlo will stop after N lo_unlink(OID) attempts. The previous behavior of the patch is that vacuumlo will stop after N successful lo_unlink(OID)s. If you have good reason for your behavior please add another flag so that it is optional. There should be a clear distinction between "counting vs not", and "aborting vs continuing" when a lo_unlink(OID) is unsuccessful. On Tue, Jul 26, 2011 at 4:18 AM, Aron <m...@eunice.de> wrote: > Here's another small change to the patch, it works fine for me and it quite > saved my day. > > I try to submit the patch by email. > > > diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c > index f6e2a28..1f88d72 100644 > --- a/contrib/vacuumlo/vacuumlo.c > +++ b/contrib/vacuumlo/vacuumlo.c > @@ -48,6 +48,7 @@ struct _param > char *pg_host; > int verbose; > int dry_run; > + int transaction_limit; > }; > > int vacuumlo(char *, struct _param *); > @@ -286,6 +287,8 @@ vacuumlo(char *database, struct _param * param) > } > else > deleted++; > + if(param->transaction_limit!=0 && > deleted>=param->transaction_limit) > + break; > } > PQclear(res); > > @@ -313,6 +316,7 @@ usage(const char *progname) > printf(" -h HOSTNAME database server host or socket > directory\n"); > printf(" -n don't remove large objects, just show what > would be > done\n"); > printf(" -p PORT database server port\n"); > + printf(" -l LIMIT stop after removing LIMIT LOs\n"); > printf(" -U USERNAME user name to connect as\n"); > printf(" -w never prompt for password\n"); > printf(" -W force password prompt\n"); > @@ -342,6 +346,7 @@ main(int argc, char **argv) > param.pg_port = NULL; > param.verbose = 0; > param.dry_run = 0; > + param.transaction_limit = 0; > > if (argc > 1) > { > @@ -359,7 +364,7 @@ main(int argc, char **argv) > > while (1) > { > - c = getopt(argc, argv, "h:U:p:vnwW"); > + c = getopt(argc, argv, "h:U:p:l:vnwW"); > if (c == -1) > break; > > @@ -395,6 +400,14 @@ main(int argc, char **argv) > } > param.pg_port = strdup(optarg); > break; > + case 'l': > + param.transaction_limit = strtol(optarg, > NULL, 10); > + if ((param.transaction_limit < 0) || > (param.transaction_limit > > 2147483647)) > + { > + fprintf(stderr, "%s: invalid > transaction limit number: %s, valid > range is form 0(disabled) to 2147483647.\n", progname, optarg); > + exit(1); > + } > + break; > case 'h': > param.pg_host = strdup(optarg); > break; > > > -- > View this message in context: > http://postgresql.1045698.n5.nabble.com/vacuumlo-patch-tp4628522p4634026.html > Sent from the PostgreSQL - hackers mailing list archive at Nabble.com. > > -- > Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-hackers > -- Noodle Connecting People, Content & Capabilities within the Enterprise Toll Free: 866-258-6951 x 701 tim.le...@vialect.com http://www.vialect.com Noodle is a product of Vialect Inc Follow Noodle on Twitter http://www.twitter.com/noodle_news