Alvaro Herrera <[EMAIL PROTECTED]> writes:
> The problem is that the database hash is cleared of databases that no
> longer exist, and the database list is constructed by scanning
> pg_database.  Since no entry exist for the database we use for shared
> tables (InvalidOid), the hash table is dropped.

Doh ...

> The attached patch fixes this.

Wouldn't it be easier to just special-case the shared DB in
pgstat_vacuum_tabstat?

    while ((dbentry = (PgStat_StatDBEntry *) hash_seq_search(&hstat)) != NULL)
    {
        Oid            dbid = dbentry->databaseid;

        CHECK_FOR_INTERRUPTS();

-       if (hash_search(htab, (void *) &dbid, HASH_FIND, NULL) == NULL)
+       /* ignore the DB entry for shared tables ... they never go away */
+       if (OidIsValid(dbid) &&
+           hash_search(htab, (void *) &dbid, HASH_FIND, NULL) == NULL)
            pgstat_drop_database(dbid);
    }


>> Additionally, in 8.3devel doing anything that queries or modifies a
>> shared table seems to zero the statistics for all shared tables.

> I'm not sure if this is fixed by the patch; can you verify, or provide a
> more specific description of the problem?

Seems unlikely that this bug would explain a behavior like that.

                        regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

Reply via email to