Columnar temp tables cannot be accessed(#8235).

After PG vanilla commit ab874faaa1f, RelidByRelfilenumber logic
was changed, now for temp objects its return O oid. For such
cases we can use alternative approach with keeping temp relations
oids directly.
pull/8309/head
Maksim Melnikov 2025-10-31 13:08:36 +03:00
parent bc41e7b94f
commit d3578205ef
9 changed files with 68 additions and 59 deletions

View File

@ -1556,8 +1556,7 @@ ColumnarPerStripeScanCost(RelOptInfo *rel, Oid relationId, int numberOfColumnsRe
ereport(ERROR, (errmsg("could not open relation with OID %u", relationId))); ereport(ERROR, (errmsg("could not open relation with OID %u", relationId)));
} }
List *stripeList = StripesForRelfilelocator(RelationPhysicalIdentifier_compat( List *stripeList = StripesForRelfilelocator(relation);
relation));
RelationClose(relation); RelationClose(relation);
uint32 maxColumnCount = 0; uint32 maxColumnCount = 0;
@ -1614,8 +1613,7 @@ ColumnarTableStripeCount(Oid relationId)
ereport(ERROR, (errmsg("could not open relation with OID %u", relationId))); ereport(ERROR, (errmsg("could not open relation with OID %u", relationId)));
} }
List *stripeList = StripesForRelfilelocator(RelationPhysicalIdentifier_compat( List *stripeList = StripesForRelfilelocator(relation);
relation));
int stripeCount = list_length(stripeList); int stripeCount = list_length(stripeList);
RelationClose(relation); RelationClose(relation);

View File

@ -125,7 +125,7 @@ static Oid ColumnarChunkGroupRelationId(void);
static Oid ColumnarChunkIndexRelationId(void); static Oid ColumnarChunkIndexRelationId(void);
static Oid ColumnarChunkGroupIndexRelationId(void); static Oid ColumnarChunkGroupIndexRelationId(void);
static Oid ColumnarNamespaceId(void); static Oid ColumnarNamespaceId(void);
static uint64 LookupStorageId(RelFileLocator relfilelocator); static uint64 LookupStorageId(Oid relationId, RelFileLocator relfilelocator);
static uint64 GetHighestUsedRowNumber(uint64 storageId); static uint64 GetHighestUsedRowNumber(uint64 storageId);
static void DeleteStorageFromColumnarMetadataTable(Oid metadataTableId, static void DeleteStorageFromColumnarMetadataTable(Oid metadataTableId,
AttrNumber storageIdAtrrNumber, AttrNumber storageIdAtrrNumber,
@ -606,7 +606,7 @@ ReadColumnarOptions(Oid regclass, ColumnarOptions *options)
* of columnar.chunk. * of columnar.chunk.
*/ */
void void
SaveStripeSkipList(RelFileLocator relfilelocator, uint64 stripe, SaveStripeSkipList(Oid relid, RelFileLocator relfilelocator, uint64 stripe,
StripeSkipList *chunkList, StripeSkipList *chunkList,
TupleDesc tupleDescriptor) TupleDesc tupleDescriptor)
{ {
@ -614,7 +614,7 @@ SaveStripeSkipList(RelFileLocator relfilelocator, uint64 stripe,
uint32 chunkIndex = 0; uint32 chunkIndex = 0;
uint32 columnCount = chunkList->columnCount; uint32 columnCount = chunkList->columnCount;
uint64 storageId = LookupStorageId(relfilelocator); uint64 storageId = LookupStorageId(relid, relfilelocator);
Oid columnarChunkOid = ColumnarChunkRelationId(); Oid columnarChunkOid = ColumnarChunkRelationId();
Relation columnarChunk = table_open(columnarChunkOid, RowExclusiveLock); Relation columnarChunk = table_open(columnarChunkOid, RowExclusiveLock);
ModifyState *modifyState = StartModifyRelation(columnarChunk); ModifyState *modifyState = StartModifyRelation(columnarChunk);
@ -684,10 +684,10 @@ SaveStripeSkipList(RelFileLocator relfilelocator, uint64 stripe,
* SaveChunkGroups saves the metadata for given chunk groups in columnar.chunk_group. * SaveChunkGroups saves the metadata for given chunk groups in columnar.chunk_group.
*/ */
void void
SaveChunkGroups(RelFileLocator relfilelocator, uint64 stripe, SaveChunkGroups(Oid relid, RelFileLocator relfilelocator, uint64 stripe,
List *chunkGroupRowCounts) List *chunkGroupRowCounts)
{ {
uint64 storageId = LookupStorageId(relfilelocator); uint64 storageId = LookupStorageId(relid, relfilelocator);
Oid columnarChunkGroupOid = ColumnarChunkGroupRelationId(); Oid columnarChunkGroupOid = ColumnarChunkGroupRelationId();
Relation columnarChunkGroup = table_open(columnarChunkGroupOid, RowExclusiveLock); Relation columnarChunkGroup = table_open(columnarChunkGroupOid, RowExclusiveLock);
ModifyState *modifyState = StartModifyRelation(columnarChunkGroup); ModifyState *modifyState = StartModifyRelation(columnarChunkGroup);
@ -720,7 +720,7 @@ SaveChunkGroups(RelFileLocator relfilelocator, uint64 stripe,
* ReadStripeSkipList fetches chunk metadata for a given stripe. * ReadStripeSkipList fetches chunk metadata for a given stripe.
*/ */
StripeSkipList * StripeSkipList *
ReadStripeSkipList(RelFileLocator relfilelocator, uint64 stripe, ReadStripeSkipList(Relation rel, uint64 stripe,
TupleDesc tupleDescriptor, TupleDesc tupleDescriptor,
uint32 chunkCount, Snapshot snapshot) uint32 chunkCount, Snapshot snapshot)
{ {
@ -729,7 +729,8 @@ ReadStripeSkipList(RelFileLocator relfilelocator, uint64 stripe,
uint32 columnCount = tupleDescriptor->natts; uint32 columnCount = tupleDescriptor->natts;
ScanKeyData scanKey[2]; ScanKeyData scanKey[2];
uint64 storageId = LookupStorageId(relfilelocator); uint64 storageId = LookupStorageId(RelationPrecomputeOid_compat(rel),
RelationPhysicalIdentifier_compat(rel));
Oid columnarChunkOid = ColumnarChunkRelationId(); Oid columnarChunkOid = ColumnarChunkRelationId();
Relation columnarChunk = table_open(columnarChunkOid, AccessShareLock); Relation columnarChunk = table_open(columnarChunkOid, AccessShareLock);
@ -1273,9 +1274,10 @@ InsertEmptyStripeMetadataRow(uint64 storageId, uint64 stripeId, uint32 columnCou
* of the given relfilenode. * of the given relfilenode.
*/ */
List * List *
StripesForRelfilelocator(RelFileLocator relfilelocator) StripesForRelfilelocator(Relation rel)
{ {
uint64 storageId = LookupStorageId(relfilelocator); uint64 storageId = LookupStorageId(RelationPrecomputeOid_compat(rel),
RelationPhysicalIdentifier_compat(rel));
/* /*
* PG18 requires snapshot to be active or registered before it's used * PG18 requires snapshot to be active or registered before it's used
@ -1304,9 +1306,10 @@ StripesForRelfilelocator(RelFileLocator relfilelocator)
* returns 0. * returns 0.
*/ */
uint64 uint64
GetHighestUsedAddress(RelFileLocator relfilelocator) GetHighestUsedAddress(Relation rel)
{ {
uint64 storageId = LookupStorageId(relfilelocator); uint64 storageId = LookupStorageId(RelationPrecomputeOid_compat(rel),
RelationPhysicalIdentifier_compat(rel));
uint64 highestUsedAddress = 0; uint64 highestUsedAddress = 0;
uint64 highestUsedId = 0; uint64 highestUsedId = 0;
@ -1316,6 +1319,16 @@ GetHighestUsedAddress(RelFileLocator relfilelocator)
} }
Oid
ColumnarRelationId(Oid relid, RelFileLocator relfilelocator)
{
return OidIsValid(relid) ? relid : RelidByRelfilenumber(RelationTablespace_compat(
relfilelocator),
RelationPhysicalIdentifierNumber_compat(
relfilelocator));
}
/* /*
* GetHighestUsedAddressAndId returns the highest used address and id for * GetHighestUsedAddressAndId returns the highest used address and id for
* the given relfilenode across all active and inactive transactions. * the given relfilenode across all active and inactive transactions.
@ -1591,7 +1604,7 @@ BuildStripeMetadata(Relation columnarStripes, HeapTuple heapTuple)
* metadata tables. * metadata tables.
*/ */
void void
DeleteMetadataRows(RelFileLocator relfilelocator) DeleteMetadataRows(Relation rel)
{ {
/* /*
* During a restore for binary upgrade, metadata tables and indexes may or * During a restore for binary upgrade, metadata tables and indexes may or
@ -1602,7 +1615,8 @@ DeleteMetadataRows(RelFileLocator relfilelocator)
return; return;
} }
uint64 storageId = LookupStorageId(relfilelocator); uint64 storageId = LookupStorageId(RelationPrecomputeOid_compat(rel),
RelationPhysicalIdentifier_compat(rel));
DeleteStorageFromColumnarMetadataTable(ColumnarStripeRelationId(), DeleteStorageFromColumnarMetadataTable(ColumnarStripeRelationId(),
Anum_columnar_stripe_storageid, Anum_columnar_stripe_storageid,
@ -2001,13 +2015,11 @@ ColumnarNamespaceId(void)
* false if the relation doesn't have a meta page yet. * false if the relation doesn't have a meta page yet.
*/ */
static uint64 static uint64
LookupStorageId(RelFileLocator relfilelocator) LookupStorageId(Oid relid, RelFileLocator relfilelocator)
{ {
Oid relationId = RelidByRelfilenumber(RelationTablespace_compat(relfilelocator), relid = ColumnarRelationId(relid, relfilelocator);
RelationPhysicalIdentifierNumber_compat(
relfilelocator));
Relation relation = relation_open(relationId, AccessShareLock); Relation relation = relation_open(relid, AccessShareLock);
uint64 storageId = ColumnarStorageGetStorageId(relation, false); uint64 storageId = ColumnarStorageGetStorageId(relation, false);
table_close(relation, AccessShareLock); table_close(relation, AccessShareLock);

View File

@ -986,8 +986,7 @@ ColumnarTableRowCount(Relation relation)
{ {
ListCell *stripeMetadataCell = NULL; ListCell *stripeMetadataCell = NULL;
uint64 totalRowCount = 0; uint64 totalRowCount = 0;
List *stripeList = StripesForRelfilelocator(RelationPhysicalIdentifier_compat( List *stripeList = StripesForRelfilelocator(relation);
relation));
foreach(stripeMetadataCell, stripeList) foreach(stripeMetadataCell, stripeList)
{ {
@ -1015,8 +1014,7 @@ LoadFilteredStripeBuffers(Relation relation, StripeMetadata *stripeMetadata,
bool *projectedColumnMask = ProjectedColumnMask(columnCount, projectedColumnList); bool *projectedColumnMask = ProjectedColumnMask(columnCount, projectedColumnList);
StripeSkipList *stripeSkipList = ReadStripeSkipList(RelationPhysicalIdentifier_compat( StripeSkipList *stripeSkipList = ReadStripeSkipList(relation,
relation),
stripeMetadata->id, stripeMetadata->id,
tupleDescriptor, tupleDescriptor,
stripeMetadata->chunkCount, stripeMetadata->chunkCount,

View File

@ -872,7 +872,7 @@ columnar_relation_set_new_filelocator(Relation rel,
RelationPhysicalIdentifier_compat(rel)), RelationPhysicalIdentifier_compat(rel)),
GetCurrentSubTransactionId()); GetCurrentSubTransactionId());
DeleteMetadataRows(RelationPhysicalIdentifier_compat(rel)); DeleteMetadataRows(rel);
} }
*freezeXid = RecentXmin; *freezeXid = RecentXmin;
@ -897,7 +897,7 @@ columnar_relation_nontransactional_truncate(Relation rel)
NonTransactionDropWriteState(RelationPhysicalIdentifierNumber_compat(relfilelocator)); NonTransactionDropWriteState(RelationPhysicalIdentifierNumber_compat(relfilelocator));
/* Delete old relfilenode metadata */ /* Delete old relfilenode metadata */
DeleteMetadataRows(relfilelocator); DeleteMetadataRows(rel);
/* /*
* No need to set new relfilenode, since the table was created in this * No need to set new relfilenode, since the table was created in this
@ -960,8 +960,7 @@ columnar_relation_copy_for_cluster(Relation OldHeap, Relation NewHeap,
ColumnarOptions columnarOptions = { 0 }; ColumnarOptions columnarOptions = { 0 };
ReadColumnarOptions(OldHeap->rd_id, &columnarOptions); ReadColumnarOptions(OldHeap->rd_id, &columnarOptions);
ColumnarWriteState *writeState = ColumnarBeginWrite(RelationPhysicalIdentifier_compat( ColumnarWriteState *writeState = ColumnarBeginWrite(NewHeap,
NewHeap),
columnarOptions, columnarOptions,
targetDesc); targetDesc);
@ -1036,8 +1035,7 @@ NeededColumnsList(TupleDesc tupdesc, Bitmapset *attr_needed)
static uint64 static uint64
ColumnarTableTupleCount(Relation relation) ColumnarTableTupleCount(Relation relation)
{ {
List *stripeList = StripesForRelfilelocator(RelationPhysicalIdentifier_compat( List *stripeList = StripesForRelfilelocator(relation);
relation));
uint64 tupleCount = 0; uint64 tupleCount = 0;
ListCell *lc = NULL; ListCell *lc = NULL;
@ -1228,7 +1226,6 @@ static void
LogRelationStats(Relation rel, int elevel) LogRelationStats(Relation rel, int elevel)
{ {
ListCell *stripeMetadataCell = NULL; ListCell *stripeMetadataCell = NULL;
RelFileLocator relfilelocator = RelationPhysicalIdentifier_compat(rel);
StringInfo infoBuf = makeStringInfo(); StringInfo infoBuf = makeStringInfo();
int compressionStats[COMPRESSION_COUNT] = { 0 }; int compressionStats[COMPRESSION_COUNT] = { 0 };
@ -1239,7 +1236,7 @@ LogRelationStats(Relation rel, int elevel)
uint64 droppedChunksWithData = 0; uint64 droppedChunksWithData = 0;
uint64 totalDecompressedLength = 0; uint64 totalDecompressedLength = 0;
List *stripeList = StripesForRelfilelocator(relfilelocator); List *stripeList = StripesForRelfilelocator(rel);
int stripeCount = list_length(stripeList); int stripeCount = list_length(stripeList);
foreach(stripeMetadataCell, stripeList) foreach(stripeMetadataCell, stripeList)
@ -1247,7 +1244,7 @@ LogRelationStats(Relation rel, int elevel)
StripeMetadata *stripe = lfirst(stripeMetadataCell); StripeMetadata *stripe = lfirst(stripeMetadataCell);
Snapshot snapshot = RegisterSnapshot(GetTransactionSnapshot()); Snapshot snapshot = RegisterSnapshot(GetTransactionSnapshot());
StripeSkipList *skiplist = ReadStripeSkipList(relfilelocator, stripe->id, StripeSkipList *skiplist = ReadStripeSkipList(rel, stripe->id,
RelationGetDescr(rel), RelationGetDescr(rel),
stripe->chunkCount, stripe->chunkCount,
snapshot); snapshot);
@ -1385,8 +1382,7 @@ TruncateColumnar(Relation rel, int elevel)
* new stripes be added beyond highestPhysicalAddress while * new stripes be added beyond highestPhysicalAddress while
* we're truncating. * we're truncating.
*/ */
uint64 newDataReservation = Max(GetHighestUsedAddress( uint64 newDataReservation = Max(GetHighestUsedAddress(rel) + 1,
RelationPhysicalIdentifier_compat(rel)) + 1,
ColumnarFirstLogicalOffset); ColumnarFirstLogicalOffset);
BlockNumber old_rel_pages = smgrnblocks(RelationGetSmgr(rel), MAIN_FORKNUM); BlockNumber old_rel_pages = smgrnblocks(RelationGetSmgr(rel), MAIN_FORKNUM);
@ -2154,7 +2150,7 @@ ColumnarTableDropHook(Oid relid)
Relation rel = table_open(relid, AccessExclusiveLock); Relation rel = table_open(relid, AccessExclusiveLock);
RelFileLocator relfilelocator = RelationPhysicalIdentifier_compat(rel); RelFileLocator relfilelocator = RelationPhysicalIdentifier_compat(rel);
DeleteMetadataRows(relfilelocator); DeleteMetadataRows(rel);
DeleteColumnarTableOptions(rel->rd_id, true); DeleteColumnarTableOptions(rel->rd_id, true);
MarkRelfilenumberDropped(RelationPhysicalIdentifierNumber_compat(relfilelocator), MarkRelfilenumberDropped(RelationPhysicalIdentifierNumber_compat(relfilelocator),

View File

@ -47,6 +47,7 @@ struct ColumnarWriteState
TupleDesc tupleDescriptor; TupleDesc tupleDescriptor;
FmgrInfo **comparisonFunctionArray; FmgrInfo **comparisonFunctionArray;
RelFileLocator relfilelocator; RelFileLocator relfilelocator;
Oid temp_relid; /* We can't rely on RelidByRelfilenumber for temp tables anymore.*/
MemoryContext stripeWriteContext; MemoryContext stripeWriteContext;
MemoryContext perTupleContext; MemoryContext perTupleContext;
@ -93,10 +94,12 @@ static StringInfo CopyStringInfo(StringInfo sourceString);
* data load operation. * data load operation.
*/ */
ColumnarWriteState * ColumnarWriteState *
ColumnarBeginWrite(RelFileLocator relfilelocator, ColumnarBeginWrite(Relation rel,
ColumnarOptions options, ColumnarOptions options,
TupleDesc tupleDescriptor) TupleDesc tupleDescriptor)
{ {
RelFileLocator relfilelocator = RelationPhysicalIdentifier_compat(rel);
/* get comparison function pointers for each of the columns */ /* get comparison function pointers for each of the columns */
uint32 columnCount = tupleDescriptor->natts; uint32 columnCount = tupleDescriptor->natts;
FmgrInfo **comparisonFunctionArray = palloc0(columnCount * sizeof(FmgrInfo *)); FmgrInfo **comparisonFunctionArray = palloc0(columnCount * sizeof(FmgrInfo *));
@ -134,6 +137,7 @@ ColumnarBeginWrite(RelFileLocator relfilelocator,
ColumnarWriteState *writeState = palloc0(sizeof(ColumnarWriteState)); ColumnarWriteState *writeState = palloc0(sizeof(ColumnarWriteState));
writeState->relfilelocator = relfilelocator; writeState->relfilelocator = relfilelocator;
writeState->temp_relid = RelationPrecomputeOid_compat(rel);
writeState->options = options; writeState->options = options;
writeState->tupleDescriptor = CreateTupleDescCopy(tupleDescriptor); writeState->tupleDescriptor = CreateTupleDescCopy(tupleDescriptor);
writeState->comparisonFunctionArray = comparisonFunctionArray; writeState->comparisonFunctionArray = comparisonFunctionArray;
@ -183,10 +187,9 @@ ColumnarWriteRow(ColumnarWriteState *writeState, Datum *columnValues, bool *colu
writeState->stripeSkipList = stripeSkipList; writeState->stripeSkipList = stripeSkipList;
writeState->compressionBuffer = makeStringInfo(); writeState->compressionBuffer = makeStringInfo();
Oid relationId = RelidByRelfilenumber(RelationTablespace_compat( Oid relationId = ColumnarRelationId(writeState->temp_relid,
writeState->relfilelocator), writeState->relfilelocator);
RelationPhysicalIdentifierNumber_compat(
writeState->relfilelocator));
Relation relation = relation_open(relationId, NoLock); Relation relation = relation_open(relationId, NoLock);
writeState->emptyStripeReservation = writeState->emptyStripeReservation =
ReserveEmptyStripe(relation, columnCount, chunkRowCount, ReserveEmptyStripe(relation, columnCount, chunkRowCount,
@ -404,10 +407,9 @@ FlushStripe(ColumnarWriteState *writeState)
elog(DEBUG1, "Flushing Stripe of size %d", stripeBuffers->rowCount); elog(DEBUG1, "Flushing Stripe of size %d", stripeBuffers->rowCount);
Oid relationId = RelidByRelfilenumber(RelationTablespace_compat( Oid relationId = ColumnarRelationId(writeState->temp_relid,
writeState->relfilelocator), writeState->relfilelocator);
RelationPhysicalIdentifierNumber_compat(
writeState->relfilelocator));
Relation relation = relation_open(relationId, NoLock); Relation relation = relation_open(relationId, NoLock);
/* /*
@ -499,10 +501,12 @@ FlushStripe(ColumnarWriteState *writeState)
} }
} }
SaveChunkGroups(writeState->relfilelocator, SaveChunkGroups(writeState->temp_relid,
writeState->relfilelocator,
stripeMetadata->id, stripeMetadata->id,
writeState->chunkGroupRowCounts); writeState->chunkGroupRowCounts);
SaveStripeSkipList(writeState->relfilelocator, SaveStripeSkipList(writeState->temp_relid,
writeState->relfilelocator,
stripeMetadata->id, stripeMetadata->id,
stripeSkipList, tupleDescriptor); stripeSkipList, tupleDescriptor);

View File

@ -191,8 +191,7 @@ columnar_init_write_state(Relation relation, TupleDesc tupdesc,
ReadColumnarOptions(tupSlotRelationId, &columnarOptions); ReadColumnarOptions(tupSlotRelationId, &columnarOptions);
SubXidWriteState *stackEntry = palloc0(sizeof(SubXidWriteState)); SubXidWriteState *stackEntry = palloc0(sizeof(SubXidWriteState));
stackEntry->writeState = ColumnarBeginWrite(RelationPhysicalIdentifier_compat( stackEntry->writeState = ColumnarBeginWrite(relation,
relation),
columnarOptions, columnarOptions,
tupdesc); tupdesc);
stackEntry->subXid = currentSubXid; stackEntry->subXid = currentSubXid;

View File

@ -232,7 +232,7 @@ extern void columnar_init_gucs(void);
extern CompressionType ParseCompressionType(const char *compressionTypeString); extern CompressionType ParseCompressionType(const char *compressionTypeString);
/* Function declarations for writing to a columnar table */ /* Function declarations for writing to a columnar table */
extern ColumnarWriteState * ColumnarBeginWrite(RelFileLocator relfilelocator, extern ColumnarWriteState * ColumnarBeginWrite(Relation rel,
ColumnarOptions options, ColumnarOptions options,
TupleDesc tupleDescriptor); TupleDesc tupleDescriptor);
extern uint64 ColumnarWriteRow(ColumnarWriteState *state, Datum *columnValues, extern uint64 ColumnarWriteRow(ColumnarWriteState *state, Datum *columnValues,
@ -287,21 +287,21 @@ extern PGDLLEXPORT bool ReadColumnarOptions(Oid regclass, ColumnarOptions *optio
extern PGDLLEXPORT bool IsColumnarTableAmTable(Oid relationId); extern PGDLLEXPORT bool IsColumnarTableAmTable(Oid relationId);
/* columnar_metadata_tables.c */ /* columnar_metadata_tables.c */
extern void DeleteMetadataRows(RelFileLocator relfilelocator); extern void DeleteMetadataRows(Relation rel);
extern uint64 ColumnarMetadataNewStorageId(void); extern uint64 ColumnarMetadataNewStorageId(void);
extern uint64 GetHighestUsedAddress(RelFileLocator relfilelocator); extern uint64 GetHighestUsedAddress(Relation rel);
extern EmptyStripeReservation * ReserveEmptyStripe(Relation rel, uint64 columnCount, extern EmptyStripeReservation * ReserveEmptyStripe(Relation rel, uint64 columnCount,
uint64 chunkGroupRowCount, uint64 chunkGroupRowCount,
uint64 stripeRowCount); uint64 stripeRowCount);
extern StripeMetadata * CompleteStripeReservation(Relation rel, uint64 stripeId, extern StripeMetadata * CompleteStripeReservation(Relation rel, uint64 stripeId,
uint64 sizeBytes, uint64 rowCount, uint64 sizeBytes, uint64 rowCount,
uint64 chunkCount); uint64 chunkCount);
extern void SaveStripeSkipList(RelFileLocator relfilelocator, uint64 stripe, extern void SaveStripeSkipList(Oid relid, RelFileLocator relfilelocator, uint64 stripe,
StripeSkipList *stripeSkipList, StripeSkipList *stripeSkipList,
TupleDesc tupleDescriptor); TupleDesc tupleDescriptor);
extern void SaveChunkGroups(RelFileLocator relfilelocator, uint64 stripe, extern void SaveChunkGroups(Oid relid, RelFileLocator relfilelocator, uint64 stripe,
List *chunkGroupRowCounts); List *chunkGroupRowCounts);
extern StripeSkipList * ReadStripeSkipList(RelFileLocator relfilelocator, uint64 stripe, extern StripeSkipList * ReadStripeSkipList(Relation rel, uint64 stripe,
TupleDesc tupleDescriptor, TupleDesc tupleDescriptor,
uint32 chunkCount, uint32 chunkCount,
Snapshot snapshot); Snapshot snapshot);
@ -317,6 +317,7 @@ extern uint64 StripeGetHighestRowNumber(StripeMetadata *stripeMetadata);
extern StripeMetadata * FindStripeWithHighestRowNumber(Relation relation, extern StripeMetadata * FindStripeWithHighestRowNumber(Relation relation,
Snapshot snapshot); Snapshot snapshot);
extern Datum columnar_relation_storageid(PG_FUNCTION_ARGS); extern Datum columnar_relation_storageid(PG_FUNCTION_ARGS);
extern Oid ColumnarRelationId(Oid relid, RelFileLocator relfilelocator);
/* write_state_management.c */ /* write_state_management.c */

View File

@ -61,7 +61,7 @@ typedef struct EmptyStripeReservation
uint64 stripeFirstRowNumber; uint64 stripeFirstRowNumber;
} EmptyStripeReservation; } EmptyStripeReservation;
extern List * StripesForRelfilelocator(RelFileLocator relfilelocator); extern List * StripesForRelfilelocator(Relation rel);
extern void ColumnarStorageUpdateIfNeeded(Relation rel, bool isUpgrade); extern void ColumnarStorageUpdateIfNeeded(Relation rel, bool isUpgrade);
extern List * ExtractColumnarRelOptions(List *inOptions, List **outColumnarOptions); extern List * ExtractColumnarRelOptions(List *inOptions, List **outColumnarOptions);
extern void SetColumnarRelOptions(RangeVar *rv, List *reloptions); extern void SetColumnarRelOptions(RangeVar *rv, List *reloptions);

View File

@ -469,6 +469,8 @@ getStxstattarget_compat(HeapTuple tup)
#define RelationPhysicalIdentifier_compat(a) ((a)->rd_locator) #define RelationPhysicalIdentifier_compat(a) ((a)->rd_locator)
#define RelationTablespace_compat(a) (a.spcOid) #define RelationTablespace_compat(a) (a.spcOid)
#define RelationPrecomputeOid_compat(a) (RelationUsesLocalBuffers(a) ? RelationGetRelid( \
a) : InvalidOid)
#define RelationPhysicalIdentifierNumber_compat(a) (a.relNumber) #define RelationPhysicalIdentifierNumber_compat(a) (a.relNumber)
#define RelationPhysicalIdentifierNumberPtr_compat(a) (a->relNumber) #define RelationPhysicalIdentifierNumberPtr_compat(a) (a->relNumber)
#define RelationPhysicalIdentifierBackend_compat(a) (a->smgr_rlocator.locator) #define RelationPhysicalIdentifierBackend_compat(a) (a->smgr_rlocator.locator)
@ -521,7 +523,6 @@ get_guc_variables_compat(int *gucCount)
#define RelationPhysicalIdentifierBackend_compat(a) (a->smgr_rnode.node) #define RelationPhysicalIdentifierBackend_compat(a) (a->smgr_rnode.node)
typedef RelFileNode RelFileLocator; typedef RelFileNode RelFileLocator;
typedef Oid RelFileNumber; typedef Oid RelFileNumber;
#define RelidByRelfilenumber(a, b) RelidByRelfilenode(a, b)
#define float_abs(a) Abs(a) #define float_abs(a) Abs(a)