mirror of
https://github.com/postgres/postgres.git
synced 2025-07-05 07:21:24 +03:00
Change the autovacuum launcher to read pg_database directly, rather than
via the "flat files" facility. This requires making it enough like a backend to be able to run transactions; it's no longer an "auxiliary process" but more like the autovacuum worker processes. Also, its signal handling has to be brought into line with backends/workers. In particular, since it now has to handle procsignal.c processing, the special autovac-launcher-only signal conditions are moved to SIGUSR2. Alvaro, with some cleanup from Tom
This commit is contained in:
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/utils/init/postinit.c,v 1.195 2009/08/29 19:26:51 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/utils/init/postinit.c,v 1.196 2009/08/31 19:41:00 tgl Exp $
|
||||
*
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@ -460,7 +460,9 @@ BaseInit(void)
|
||||
* name can be returned to the caller in out_dbname. If out_dbname isn't
|
||||
* NULL, it must point to a buffer of size NAMEDATALEN.
|
||||
*
|
||||
* In bootstrap mode no parameters are used.
|
||||
* In bootstrap mode no parameters are used. The autovacuum launcher process
|
||||
* doesn't use any parameters either, because it only goes far enough to be
|
||||
* able to read pg_database; it doesn't connect to any particular database.
|
||||
*
|
||||
* The return value indicates whether the userID is a superuser. (That
|
||||
* can only be tested inside a transaction, so we want to do it during
|
||||
@ -537,6 +539,12 @@ InitPostgres(const char *in_dbname, Oid dboid, const char *username,
|
||||
if (!bootstrap)
|
||||
pgstat_initialize();
|
||||
|
||||
/*
|
||||
* Load relcache entries for the shared system catalogs. This must
|
||||
* create at least an entry for pg_database.
|
||||
*/
|
||||
RelationCacheInitializePhase2();
|
||||
|
||||
/*
|
||||
* Set up process-exit callback to do pre-shutdown cleanup. This has to
|
||||
* be after we've initialized all the low-level modules like the buffer
|
||||
@ -548,10 +556,17 @@ InitPostgres(const char *in_dbname, Oid dboid, const char *username,
|
||||
*/
|
||||
on_shmem_exit(ShutdownPostgres, 0);
|
||||
|
||||
/* The autovacuum launcher is done here */
|
||||
if (IsAutoVacuumLauncherProcess())
|
||||
return true; /* result doesn't matter */
|
||||
|
||||
/*
|
||||
* Start a new transaction here before first access to db, and get a
|
||||
* snapshot. We don't have a use for the snapshot itself, but we're
|
||||
* interested in the secondary effect that it sets RecentGlobalXmin.
|
||||
* (This is critical for anything that reads heap pages, because HOT
|
||||
* may decide to prune them even if the process doesn't attempt to
|
||||
* modify any tuples.)
|
||||
*/
|
||||
if (!bootstrap)
|
||||
{
|
||||
@ -559,12 +574,6 @@ InitPostgres(const char *in_dbname, Oid dboid, const char *username,
|
||||
(void) GetTransactionSnapshot();
|
||||
}
|
||||
|
||||
/*
|
||||
* Load relcache entries for the shared system catalogs. This must
|
||||
* create at least an entry for pg_database.
|
||||
*/
|
||||
RelationCacheInitializePhase2();
|
||||
|
||||
/*
|
||||
* Set up the global variables holding database id and default tablespace.
|
||||
* But note we won't actually try to touch the database just yet.
|
||||
|
Reference in New Issue
Block a user