return RelationSupportsSysCache(relationId);
}
-/*
- * Tells whether any index for the relation is unlogged.
- *
- * Note: There doesn't seem to be any way to have an unlogged index attached
- * to a permanent table, but it seems best to keep this general so that it
- * returns sensible results even when they seem obvious (like for an unlogged
- * table) and to handle possible future unlogged indexes on permanent tables.
- */
-bool
-RelationHasUnloggedIndex(Relation rel)
-{
- List *indexoidlist;
- ListCell *indexoidscan;
- bool result = false;
-
- indexoidlist = RelationGetIndexList(rel);
-
- foreach(indexoidscan, indexoidlist)
- {
- Oid indexoid = lfirst_oid(indexoidscan);
- HeapTuple tp;
- Form_pg_class reltup;
-
- tp = SearchSysCache1(RELOID, ObjectIdGetDatum(indexoid));
- if (!HeapTupleIsValid(tp))
- elog(ERROR, "cache lookup failed for relation %u", indexoid);
- reltup = (Form_pg_class) GETSTRUCT(tp);
-
- if (reltup->relpersistence == RELPERSISTENCE_UNLOGGED)
- result = true;
-
- ReleaseSysCache(tp);
-
- if (result == true)
- break;
- }
-
- list_free(indexoidlist);
-
- return result;
-}
-
/*
* Invalidate (remove) the init file during commit of a transaction that
* changed one or more of the relation cache entries that are kept in the
/* routines in utils/cache/relcache.c */
extern void RelationIncrementReferenceCount(Relation rel);
extern void RelationDecrementReferenceCount(Relation rel);
-extern bool RelationHasUnloggedIndex(Relation rel);
extern List *RelationGetRepsetList(Relation rel);
#endif /* REL_H */
RelationNeedsWAL(rel) \
&& !IsCatalogRelation(rel) \
&& !RelationIsAccessibleInLogicalDecoding(rel) \
- && !RelationHasUnloggedIndex(rel) \
)
#define EarlyPruningEnabled(rel) (old_snapshot_threshold >= 0 && RelationAllowsEarlyPruning(rel))