diff options
Diffstat (limited to 'src/backend/utils/cache/relcache.c')
-rw-r--r-- | src/backend/utils/cache/relcache.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 40e71d513d2..65cd1e72907 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/cache/relcache.c,v 1.249 2006/10/04 00:30:00 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/cache/relcache.c,v 1.250 2006/11/05 23:40:30 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -3586,3 +3586,25 @@ RelationCacheInitFileInvalidate(bool beforeSend) LWLockRelease(RelCacheInitLock); } } + +/* + * Remove the init file for a given database during postmaster startup. + * + * We used to keep the init file across restarts, but that is unsafe in PITR + * scenarios, and even in simple crash-recovery cases there are windows for + * the init file to become out-of-sync with the database. So now we just + * remove it during startup and expect the first backend launch to rebuild it. + * Of course, this has to happen in each database of the cluster. For + * simplicity this is driven by flatfiles.c, which has to scan pg_database + * anyway. + */ +void +RelationCacheInitFileRemove(const char *dbPath) +{ + char initfilename[MAXPGPATH]; + + snprintf(initfilename, sizeof(initfilename), "%s/%s", + dbPath, RELCACHE_INIT_FILENAME); + unlink(initfilename); + /* ignore any error, since it might not be there at all */ +} |