diff --git a/src/backend/columnar/cstore_fdw.c b/src/backend/columnar/cstore_fdw.c index 97e6f5a3c..19b3d1847 100644 --- a/src/backend/columnar/cstore_fdw.c +++ b/src/backend/columnar/cstore_fdw.c @@ -718,7 +718,7 @@ FindCStoreTables(List *tableList) foreach(relationCell, tableList) { RangeVar *rangeVar = (RangeVar *) lfirst(relationCell); - Oid relationId = RangeVarGetRelid(rangeVar, AccessShareLock, true); + Oid relationId = RangeVarGetRelid(rangeVar, NoLock, true); if (IsCStoreFdwTable(relationId) && !DistributedTable(relationId)) { cstoreTableList = lappend(cstoreTableList, rangeVar); @@ -758,6 +758,17 @@ OpenRelationsForTruncate(List *cstoreTableList) { heap_close(relation, AccessExclusiveLock); } + + /* + * Type of cstore tables can change since we checked last time, + * since we didn't hold a lock when checking. + */ + else if (!IsCStoreFdwTable(relationId)) + { + ereport(ERROR, (errmsg("relation \"%s\" not columnar anymore", + RelationGetRelationName(relation)), + errhint("try repeating the truncate command"))); + } else { relationIdList = lappend_oid(relationIdList, relationId); diff --git a/src/backend/columnar/cstore_tableam.c b/src/backend/columnar/cstore_tableam.c index 203cbb334..d7c3aff11 100644 --- a/src/backend/columnar/cstore_tableam.c +++ b/src/backend/columnar/cstore_tableam.c @@ -58,7 +58,7 @@ * These are the same values from src/backend/access/heap/vacuumlazy.c */ #define VACUUM_TRUNCATE_LOCK_WAIT_INTERVAL 50 /* ms */ -#define VACUUM_TRUNCATE_LOCK_TIMEOUT 5000 /* ms */ +#define VACUUM_TRUNCATE_LOCK_TIMEOUT 4500 /* ms */ typedef struct CStoreScanDescData {