diff options
Diffstat (limited to 'src/backend/utils/misc/database.c')
-rw-r--r-- | src/backend/utils/misc/database.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/backend/utils/misc/database.c b/src/backend/utils/misc/database.c index f415e5aee18..364075c8bed 100644 --- a/src/backend/utils/misc/database.c +++ b/src/backend/utils/misc/database.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/misc/Attic/database.c,v 1.40 2000/10/16 14:52:19 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/misc/Attic/database.c,v 1.41 2000/11/14 18:37:45 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -186,7 +186,7 @@ GetRawDatabaseInfo(const char *name, Oid *db_id, char *path) max = PageGetMaxOffsetNumber(pg); /* look at each tuple on the page */ - for (i = 0; i <= max; i++) + for (i = 0; i < max; i++) { int offset; @@ -221,8 +221,11 @@ GetRawDatabaseInfo(const char *name, Oid *db_id, char *path) * database OID from a flat file, handled the same way we * handle the password relation? */ - if (TransactionIdIsValid((TransactionId) tup.t_data->t_xmax)) - continue; + if (tup.t_data->t_infomask & HEAP_XMIN_INVALID) + continue; /* inserting xact known aborted */ + if (TransactionIdIsValid((TransactionId) tup.t_data->t_xmax) && + !(tup.t_data->t_infomask & HEAP_XMAX_INVALID)) + continue; /* deleting xact happened, not known aborted */ /* * Okay, see if this is the one we want. @@ -241,6 +244,10 @@ GetRawDatabaseInfo(const char *name, Oid *db_id, char *path) } } + /* failed to find it... */ + *db_id = InvalidOid; + *path = '\0'; + done: close(dbfd); pfree(pg); |