Thread: tiny patch to make vacuumdb -a's database order match pg_dumpall

tiny patch to make vacuumdb -a's database order match pg_dumpall

From
"Dan Thomas"
Date:
Hiya,

I've been having trouble running vacuumdb -a and pg_dumpall
concurrently because they run through the databases in a different
order (so dumpall was getting stuck behind vacuum's lock, and my
firewall was rather unhelpfully closing the idle connection). I can't
see a good reason for them to be using a different order, and as it
will only affect those that have created new databases since restoring
from a dump, may not be instantly obvious. It appears slightly more
thought has gone into pg_dumpall's code (in that it actually includes
an ORDER BY), so I elected to fiddle with vacuumdb.

I hope this is in the correct format (this is the first patch I've
submitted for anything), please let me know if I've done something
daft.

Dan

237c237
<       result = executeQuery(conn, "SELECT datname FROM pg_database
WHERE datallowconn;", progname, echo);
---
>       result = executeQuery(conn, "SELECT datname FROM pg_database WHERE datallowconn ORDER BY 1;", progname, echo);

Re: tiny patch to make vacuumdb -a's database order match pg_dumpall

From
Tom Lane
Date:
"Dan Thomas" <godders@gmail.com> writes:
> I've been having trouble running vacuumdb -a and pg_dumpall
> concurrently because they run through the databases in a different
> order (so dumpall was getting stuck behind vacuum's lock, and my
> firewall was rather unhelpfully closing the idle connection).

Um, whaddya mean "dumpall was getting stuck behind vacuum's lock"?
A plain vacuum doesn't take any locks that would block pg_dump.

While the proposed patch looks harmless enough, I'm unconvinced that
it will solve your problem, or even quite what the problem is.

            regards, tom lane

Re: tiny patch to make vacuumdb -a's database order match pg_dumpall

From
"Dan Thomas"
Date:
> Um, whaddya mean "dumpall was getting stuck behind vacuum's lock"?
> A plain vacuum doesn't take any locks that would block pg_dump.

Dammit, just looked and the setup I originally encountered the problem
on and tracked it down to the vacuum process, and it is indeed set up
to perform a full vacuum.. I've incorrectly assumed the problem I'm
having now (with a normal vac) was for the same reason.

> While the proposed patch looks harmless enough, I'm unconvinced that
> it will solve your problem, or even quite what the problem is.

Yes, sorry about that, it does indeed appear that whatever is causing
my dumpall process to die isn't PG's fault.

Though I still think it makes a *bit* of sense to have vacuumdb use
the same order as pg_dumpall (clusterdb too now I think about it),
it's obviously not as much of an issue as I originally thought, and
not the source of my problem, which is a shame :)

Dan

Re: tiny patch to make vacuumdb -a's database order match pg_dumpall

From
Bruce Momjian
Date:
Dan Thomas wrote:
> Hiya,
>
> I've been having trouble running vacuumdb -a and pg_dumpall
> concurrently because they run through the databases in a different
> order (so dumpall was getting stuck behind vacuum's lock, and my
> firewall was rather unhelpfully closing the idle connection). I can't
> see a good reason for them to be using a different order, and as it
> will only affect those that have created new databases since restoring
> from a dump, may not be instantly obvious. It appears slightly more
> thought has gone into pg_dumpall's code (in that it actually includes
> an ORDER BY), so I elected to fiddle with vacuumdb.
>
> I hope this is in the correct format (this is the first patch I've
> submitted for anything), please let me know if I've done something
> daft.
>
> Dan
>
> 237c237
> <       result = executeQuery(conn, "SELECT datname FROM pg_database
> WHERE datallowconn;", progname, echo);
> ---
> >       result = executeQuery(conn, "SELECT datname FROM pg_database WHERE datallowconn ORDER BY 1;", progname,
echo);

OK, ORDER BY added for 8.3.

--
  Bruce Momjian  <bruce@momjian.us>          http://momjian.us
  EnterpriseDB                               http://www.enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +
Index: src/bin/scripts/vacuumdb.c
===================================================================
RCS file: /cvsroot/pgsql/src/bin/scripts/vacuumdb.c,v
retrieving revision 1.15
diff -c -c -r1.15 vacuumdb.c
*** src/bin/scripts/vacuumdb.c    5 Jan 2007 22:19:50 -0000    1.15
--- src/bin/scripts/vacuumdb.c    13 Feb 2007 17:37:09 -0000
***************
*** 234,240 ****
      int            i;

      conn = connectDatabase("postgres", host, port, username, password, progname);
!     result = executeQuery(conn, "SELECT datname FROM pg_database WHERE datallowconn;", progname, echo);
      PQfinish(conn);

      for (i = 0; i < PQntuples(result); i++)
--- 234,240 ----
      int            i;

      conn = connectDatabase("postgres", host, port, username, password, progname);
!     result = executeQuery(conn, "SELECT datname FROM pg_database WHERE datallowconn ORDER BY 1;", progname, echo);
      PQfinish(conn);

      for (i = 0; i < PQntuples(result); i++)