Re: pg_stat_tmp files for dropped databases

From: Thom Brown <thom(at)linux(dot)com>
To: Tomas Vondra <tv(at)fuzzy(dot)cz>
Cc: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: pg_stat_tmp files for dropped databases
Date: 2014-02-22 01:37:14
Message-ID: CAA-aLv7+5zTCNiYQPPOKmix63Xn3g_Vgns2=xbWwRnhWr_8zHg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 22 February 2014 01:07, Tomas Vondra <tv(at)fuzzy(dot)cz> wrote:

> Hi,
>
> On 22.2.2014 01:13, Thom Brown wrote:
> > Hi,
> >
> > I've noticed that files for dropped databases aren't removed from
> > pg_stat_tmp. After a cluster-wide VACUUM ANALYSE, and restarting
> > Postgres, all the old database pg_stat_tmp files remain.
> >
> > Shouldn't these be cleaned up?
>
> Yeah, that's a bug in pgstat_recv_dropdb() - instead of building path to
> the temporary file (in pg_stat_tmp), it builds a path to the permanent
> file in pg_stat.
>
> The permanent files don't exist at that moment, as the postmaster is
> still runnig and only writes them at shutdown. So the unlink deletes
> nothing (i.e. returns ENOENT), but the return value is ignored for all
> the unlink() in pgstat.c.
>
> Patch for master attached, needs to be backpatched to 9.3.
>
> I'd bet the files survived restart because pg_stat_tmp was kept between
> the restart. Postmaster walks through all databases, and moves their
> stats to 'pg_stat' (i.e. removes them from pg_stat_tmp). On the start it
> does the opposite (move pg_stat -> pg_stat_tmp).
>
> But it does not clear the pg_stat_tmp directory, i.e. the files will
> stay there until removed manually. IIRC it was implemented like this on
> purpose (what if someone pointed pg_stat_tmp to directory with other
> files) - only the ownership etc. is checked. So this is expected.
>
> Assuming you have just stats in the directory, it's safe to remove the
> contents of pg_stat_tmp before starting up the database. On systems
> having pg_stat_tmp pointed to tmpfs, this is basically what happens when
> rebooting the machine (and why I haven't noticed this on our production
> systems so far).
>

Thanks for confirming and for finding the explanation.

--
Thom

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Greg Stark 2014-02-22 02:15:00 Re: Storing the password in .pgpass file in an encrypted format
Previous Message Tom Lane 2014-02-22 01:17:36 Re: Uninterruptable regexp_replace in 9.3.1 ?