summaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/access/gin/ginentrypage.c2
-rw-r--r--src/backend/access/heap/heaptoast.c4
-rw-r--r--src/backend/access/heap/pruneheap.c28
-rw-r--r--src/backend/access/transam/multixact.c9
-rw-r--r--src/backend/access/transam/xlogwait.c2
-rw-r--r--src/backend/catalog/aclchk.c18
-rw-r--r--src/backend/catalog/pg_constraint.c12
-rw-r--r--src/backend/catalog/pg_type.c2
-rw-r--r--src/backend/catalog/system_views.sql2
-rw-r--r--src/backend/optimizer/plan/planner.c32
-rw-r--r--src/backend/storage/buffer/bufmgr.c4
-rw-r--r--src/backend/storage/ipc/standby.c2
-rw-r--r--src/backend/tsearch/spell.c2
-rw-r--r--src/backend/utils/activity/pgstat_replslot.c2
-rw-r--r--src/backend/utils/activity/wait_event.c12
-rw-r--r--src/backend/utils/activity/wait_event_names.txt6
-rw-r--r--src/backend/utils/adt/arrayfuncs.c2
-rw-r--r--src/backend/utils/adt/datum.c6
-rw-r--r--src/backend/utils/adt/formatting.c11
-rw-r--r--src/backend/utils/adt/jsonb_gin.c12
-rw-r--r--src/backend/utils/adt/like_support.c4
-rw-r--r--src/backend/utils/adt/numeric.c6
-rw-r--r--src/backend/utils/adt/pg_dependencies.c6
-rw-r--r--src/backend/utils/adt/pg_locale.c2
-rw-r--r--src/backend/utils/adt/pg_ndistinct.c4
-rw-r--r--src/backend/utils/adt/pgstatfuncs.c6
-rw-r--r--src/backend/utils/adt/rangetypes.c4
-rw-r--r--src/backend/utils/adt/rowtypes.c4
-rw-r--r--src/backend/utils/adt/xid8funcs.c2
-rw-r--r--src/backend/utils/cache/evtcache.c2
30 files changed, 107 insertions, 103 deletions
diff --git a/src/backend/access/gin/ginentrypage.c b/src/backend/access/gin/ginentrypage.c
index c0592367700..94f49d72a98 100644
--- a/src/backend/access/gin/ginentrypage.c
+++ b/src/backend/access/gin/ginentrypage.c
@@ -171,7 +171,7 @@ ginReadTuple(GinState *ginstate, OffsetNumber attnum, IndexTuple itup,
{
if (nipd > 0)
{
- ipd = ginPostingListDecode((GinPostingList *) ptr, &ndecoded);
+ ipd = ginPostingListDecode(ptr, &ndecoded);
if (nipd != ndecoded)
elog(ERROR, "number of items mismatch in GIN entry tuple, %d in tuple header, %d decoded",
nipd, ndecoded);
diff --git a/src/backend/access/heap/heaptoast.c b/src/backend/access/heap/heaptoast.c
index e148c9be482..60e765fbfce 100644
--- a/src/backend/access/heap/heaptoast.c
+++ b/src/backend/access/heap/heaptoast.c
@@ -569,7 +569,7 @@ toast_build_flattened_tuple(TupleDesc tupleDesc,
int num_to_free;
int i;
Datum new_values[MaxTupleAttributeNumber];
- Pointer freeable_values[MaxTupleAttributeNumber];
+ void *freeable_values[MaxTupleAttributeNumber];
/*
* We can pass the caller's isnull array directly to heap_form_tuple, but
@@ -593,7 +593,7 @@ toast_build_flattened_tuple(TupleDesc tupleDesc,
{
new_value = detoast_external_attr(new_value);
new_values[i] = PointerGetDatum(new_value);
- freeable_values[num_to_free++] = (Pointer) new_value;
+ freeable_values[num_to_free++] = new_value;
}
}
}
diff --git a/src/backend/access/heap/pruneheap.c b/src/backend/access/heap/pruneheap.c
index 5af84b4c875..ca44225a10e 100644
--- a/src/backend/access/heap/pruneheap.c
+++ b/src/backend/access/heap/pruneheap.c
@@ -158,8 +158,8 @@ typedef struct
/* Local functions */
static void prune_freeze_setup(PruneFreezeParams *params,
- TransactionId new_relfrozen_xid,
- MultiXactId new_relmin_mxid,
+ TransactionId *new_relfrozen_xid,
+ MultiXactId *new_relmin_mxid,
const PruneFreezeResult *presult,
PruneState *prstate);
static void prune_freeze_plan(Oid reloid, Buffer buffer,
@@ -325,8 +325,8 @@ heap_page_prune_opt(Relation relation, Buffer buffer)
*/
static void
prune_freeze_setup(PruneFreezeParams *params,
- TransactionId new_relfrozen_xid,
- MultiXactId new_relmin_mxid,
+ TransactionId *new_relfrozen_xid,
+ MultiXactId *new_relmin_mxid,
const PruneFreezeResult *presult,
PruneState *prstate)
{
@@ -362,15 +362,15 @@ prune_freeze_setup(PruneFreezeParams *params,
prstate->pagefrz.freeze_required = false;
if (prstate->attempt_freeze)
{
- prstate->pagefrz.FreezePageRelfrozenXid = new_relfrozen_xid;
- prstate->pagefrz.NoFreezePageRelfrozenXid = new_relfrozen_xid;
- prstate->pagefrz.FreezePageRelminMxid = new_relmin_mxid;
- prstate->pagefrz.NoFreezePageRelminMxid = new_relmin_mxid;
+ Assert(new_relfrozen_xid && new_relmin_mxid);
+ prstate->pagefrz.FreezePageRelfrozenXid = *new_relfrozen_xid;
+ prstate->pagefrz.NoFreezePageRelfrozenXid = *new_relfrozen_xid;
+ prstate->pagefrz.FreezePageRelminMxid = *new_relmin_mxid;
+ prstate->pagefrz.NoFreezePageRelminMxid = *new_relmin_mxid;
}
else
{
- Assert(new_relfrozen_xid == InvalidTransactionId &&
- new_relmin_mxid == InvalidMultiXactId);
+ Assert(!new_relfrozen_xid && !new_relmin_mxid);
prstate->pagefrz.FreezePageRelminMxid = InvalidMultiXactId;
prstate->pagefrz.NoFreezePageRelminMxid = InvalidMultiXactId;
prstate->pagefrz.FreezePageRelfrozenXid = InvalidTransactionId;
@@ -823,12 +823,8 @@ heap_page_prune_and_freeze(PruneFreezeParams *params,
/* Initialize prstate */
prune_freeze_setup(params,
- new_relfrozen_xid ?
- *new_relfrozen_xid : InvalidTransactionId,
- new_relmin_mxid ?
- *new_relmin_mxid : InvalidMultiXactId,
- presult,
- &prstate);
+ new_relfrozen_xid, new_relmin_mxid,
+ presult, &prstate);
/*
* Examine all line pointers and tuple visibility information to determine
diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c
index 27f02faec80..8ed3fd9d071 100644
--- a/src/backend/access/transam/multixact.c
+++ b/src/backend/access/transam/multixact.c
@@ -909,6 +909,7 @@ RecordNewMultiXact(MultiXactId multi, MultiXactOffset offset,
int64 next_pageno;
int next_entryno;
MultiXactOffset *next_offptr;
+ MultiXactOffset next_offset;
LWLock *lock;
LWLock *prevlock = NULL;
@@ -976,11 +977,15 @@ RecordNewMultiXact(MultiXactId multi, MultiXactOffset offset,
next_offptr += next_entryno;
}
- if (*next_offptr != offset + nmembers)
+ /* Like in GetNewMultiXactId(), skip over offset 0 */
+ next_offset = offset + nmembers;
+ if (next_offset == 0)
+ next_offset = 1;
+ if (*next_offptr != next_offset)
{
/* should already be set to the correct value, or not at all */
Assert(*next_offptr == 0);
- *next_offptr = offset + nmembers;
+ *next_offptr = next_offset;
MultiXactOffsetCtl->shared->page_dirty[slotno] = true;
}
diff --git a/src/backend/access/transam/xlogwait.c b/src/backend/access/transam/xlogwait.c
index 98aa5f1e4a2..84613fc39c7 100644
--- a/src/backend/access/transam/xlogwait.c
+++ b/src/backend/access/transam/xlogwait.c
@@ -321,7 +321,7 @@ WaitForLSN(WaitLSNType lsnType, XLogRecPtr targetLSN, int64 timeout)
Assert(waitLSNState);
/* Should have a valid proc number */
- Assert(MyProcNumber >= 0 && MyProcNumber < MaxBackends);
+ Assert(MyProcNumber >= 0 && MyProcNumber < MaxBackends + NUM_AUXILIARY_PROCS);
if (timeout > 0)
{
diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c
index d183f2990ce..cb496e018c5 100644
--- a/src/backend/catalog/aclchk.c
+++ b/src/backend/catalog/aclchk.c
@@ -3125,7 +3125,7 @@ object_aclmask_ext(Oid classid, Oid objectid, Oid roleid,
result = aclmask(acl, roleid, ownerId, mask, how);
/* if we have a detoasted copy, free it */
- if (acl && (Pointer) acl != DatumGetPointer(aclDatum))
+ if (acl && acl != DatumGetPointer(aclDatum))
pfree(acl);
ReleaseSysCache(tuple);
@@ -3255,7 +3255,7 @@ pg_attribute_aclmask_ext(Oid table_oid, AttrNumber attnum, Oid roleid,
result = aclmask(acl, roleid, ownerId, mask, how);
/* if we have a detoasted copy, free it */
- if (acl && (Pointer) acl != DatumGetPointer(aclDatum))
+ if (acl && acl != DatumGetPointer(aclDatum))
pfree(acl);
ReleaseSysCache(attTuple);
@@ -3362,7 +3362,7 @@ pg_class_aclmask_ext(Oid table_oid, Oid roleid, AclMode mask,
result = aclmask(acl, roleid, ownerId, mask, how);
/* if we have a detoasted copy, free it */
- if (acl && (Pointer) acl != DatumGetPointer(aclDatum))
+ if (acl && acl != DatumGetPointer(aclDatum))
pfree(acl);
ReleaseSysCache(tuple);
@@ -3454,7 +3454,7 @@ pg_parameter_aclmask(const char *name, Oid roleid, AclMode mask, AclMaskHow how)
result = aclmask(acl, roleid, BOOTSTRAP_SUPERUSERID, mask, how);
/* if we have a detoasted copy, free it */
- if (acl && (Pointer) acl != DatumGetPointer(aclDatum))
+ if (acl && acl != DatumGetPointer(aclDatum))
pfree(acl);
ReleaseSysCache(tuple);
@@ -3509,7 +3509,7 @@ pg_parameter_acl_aclmask(Oid acl_oid, Oid roleid, AclMode mask, AclMaskHow how)
result = aclmask(acl, roleid, BOOTSTRAP_SUPERUSERID, mask, how);
/* if we have a detoasted copy, free it */
- if (acl && (Pointer) acl != DatumGetPointer(aclDatum))
+ if (acl && acl != DatumGetPointer(aclDatum))
pfree(acl);
ReleaseSysCache(tuple);
@@ -3589,7 +3589,7 @@ pg_largeobject_aclmask_snapshot(Oid lobj_oid, Oid roleid,
result = aclmask(acl, roleid, ownerId, mask, how);
/* if we have a detoasted copy, free it */
- if (acl && (Pointer) acl != DatumGetPointer(aclDatum))
+ if (acl && acl != DatumGetPointer(aclDatum))
pfree(acl);
systable_endscan(scan);
@@ -3683,7 +3683,7 @@ pg_namespace_aclmask_ext(Oid nsp_oid, Oid roleid,
result = aclmask(acl, roleid, ownerId, mask, how);
/* if we have a detoasted copy, free it */
- if (acl && (Pointer) acl != DatumGetPointer(aclDatum))
+ if (acl && acl != DatumGetPointer(aclDatum))
pfree(acl);
ReleaseSysCache(tuple);
@@ -3819,7 +3819,7 @@ pg_type_aclmask_ext(Oid type_oid, Oid roleid, AclMode mask, AclMaskHow how,
result = aclmask(acl, roleid, ownerId, mask, how);
/* if we have a detoasted copy, free it */
- if (acl && (Pointer) acl != DatumGetPointer(aclDatum))
+ if (acl && acl != DatumGetPointer(aclDatum))
pfree(acl);
ReleaseSysCache(tuple);
@@ -4003,7 +4003,7 @@ pg_attribute_aclcheck_all_ext(Oid table_oid, Oid roleid,
attmask = aclmask(acl, roleid, ownerId, mode, ACLMASK_ANY);
/* if we have a detoasted copy, free it */
- if ((Pointer) acl != DatumGetPointer(aclDatum))
+ if (acl != DatumGetPointer(aclDatum))
pfree(acl);
}
diff --git a/src/backend/catalog/pg_constraint.c b/src/backend/catalog/pg_constraint.c
index 9944e4bd2d1..5b2a8132306 100644
--- a/src/backend/catalog/pg_constraint.c
+++ b/src/backend/catalog/pg_constraint.c
@@ -1544,7 +1544,7 @@ DeconstructFkConstraintRow(HeapTuple tuple, int *numfks,
if (numkeys <= 0 || numkeys > INDEX_MAX_KEYS)
elog(ERROR, "foreign key constraint cannot have %d columns", numkeys);
memcpy(conkey, ARR_DATA_PTR(arr), numkeys * sizeof(int16));
- if ((Pointer) arr != DatumGetPointer(adatum))
+ if (arr != DatumGetPointer(adatum))
pfree(arr); /* free de-toasted copy, if any */
adatum = SysCacheGetAttrNotNull(CONSTROID, tuple,
@@ -1556,7 +1556,7 @@ DeconstructFkConstraintRow(HeapTuple tuple, int *numfks,
ARR_ELEMTYPE(arr) != INT2OID)
elog(ERROR, "confkey is not a 1-D smallint array");
memcpy(confkey, ARR_DATA_PTR(arr), numkeys * sizeof(int16));
- if ((Pointer) arr != DatumGetPointer(adatum))
+ if (arr != DatumGetPointer(adatum))
pfree(arr); /* free de-toasted copy, if any */
if (pf_eq_oprs)
@@ -1571,7 +1571,7 @@ DeconstructFkConstraintRow(HeapTuple tuple, int *numfks,
ARR_ELEMTYPE(arr) != OIDOID)
elog(ERROR, "conpfeqop is not a 1-D Oid array");
memcpy(pf_eq_oprs, ARR_DATA_PTR(arr), numkeys * sizeof(Oid));
- if ((Pointer) arr != DatumGetPointer(adatum))
+ if (arr != DatumGetPointer(adatum))
pfree(arr); /* free de-toasted copy, if any */
}
@@ -1586,7 +1586,7 @@ DeconstructFkConstraintRow(HeapTuple tuple, int *numfks,
ARR_ELEMTYPE(arr) != OIDOID)
elog(ERROR, "conppeqop is not a 1-D Oid array");
memcpy(pp_eq_oprs, ARR_DATA_PTR(arr), numkeys * sizeof(Oid));
- if ((Pointer) arr != DatumGetPointer(adatum))
+ if (arr != DatumGetPointer(adatum))
pfree(arr); /* free de-toasted copy, if any */
}
@@ -1601,7 +1601,7 @@ DeconstructFkConstraintRow(HeapTuple tuple, int *numfks,
ARR_ELEMTYPE(arr) != OIDOID)
elog(ERROR, "conffeqop is not a 1-D Oid array");
memcpy(ff_eq_oprs, ARR_DATA_PTR(arr), numkeys * sizeof(Oid));
- if ((Pointer) arr != DatumGetPointer(adatum))
+ if (arr != DatumGetPointer(adatum))
pfree(arr); /* free de-toasted copy, if any */
}
@@ -1624,7 +1624,7 @@ DeconstructFkConstraintRow(HeapTuple tuple, int *numfks,
elog(ERROR, "confdelsetcols is not a 1-D smallint array");
num_delete_cols = ARR_DIMS(arr)[0];
memcpy(fk_del_set_cols, ARR_DATA_PTR(arr), num_delete_cols * sizeof(int16));
- if ((Pointer) arr != DatumGetPointer(adatum))
+ if (arr != DatumGetPointer(adatum))
pfree(arr); /* free de-toasted copy, if any */
*num_fk_del_set_cols = num_delete_cols;
diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c
index 257c7da8568..4a69a81b9fb 100644
--- a/src/backend/catalog/pg_type.c
+++ b/src/backend/catalog/pg_type.c
@@ -948,7 +948,7 @@ char *
makeMultirangeTypeName(const char *rangeTypeName, Oid typeNamespace)
{
char *buf;
- char *rangestr;
+ const char *rangestr;
/*
* If the range type name contains "range" then change that to
diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql
index 086c4c8fb6f..48af8ee90a6 100644
--- a/src/backend/catalog/system_views.sql
+++ b/src/backend/catalog/system_views.sql
@@ -1078,7 +1078,7 @@ CREATE VIEW pg_stat_replication_slots AS
s.total_txns,
s.total_bytes,
s.slotsync_skip_count,
- s.slotsync_skip_at,
+ s.slotsync_last_skip,
s.stats_reset
FROM pg_replication_slots as r,
LATERAL pg_stat_get_replication_slot(slot_name) as s
diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c
index 0e78628bf01..fd77334e5fd 100644
--- a/src/backend/optimizer/plan/planner.c
+++ b/src/backend/optimizer/plan/planner.c
@@ -7906,17 +7906,23 @@ apply_scanjoin_target_to_paths(PlannerInfo *root,
check_stack_depth();
/*
- * If the rel is partitioned, we want to drop its existing paths and
- * generate new ones. This function would still be correct if we kept the
- * existing paths: we'd modify them to generate the correct target above
- * the partitioning Append, and then they'd compete on cost with paths
- * generating the target below the Append. However, in our current cost
- * model the latter way is always the same or cheaper cost, so modifying
- * the existing paths would just be useless work. Moreover, when the cost
- * is the same, varying roundoff errors might sometimes allow an existing
- * path to be picked, resulting in undesirable cross-platform plan
- * variations. So we drop old paths and thereby force the work to be done
- * below the Append, except in the case of a non-parallel-safe target.
+ * If the rel only has Append and MergeAppend paths, we want to drop its
+ * existing paths and generate new ones. This function would still be
+ * correct if we kept the existing paths: we'd modify them to generate the
+ * correct target above the partitioning Append, and then they'd compete
+ * on cost with paths generating the target below the Append. However, in
+ * our current cost model the latter way is always the same or cheaper
+ * cost, so modifying the existing paths would just be useless work.
+ * Moreover, when the cost is the same, varying roundoff errors might
+ * sometimes allow an existing path to be picked, resulting in undesirable
+ * cross-platform plan variations. So we drop old paths and thereby force
+ * the work to be done below the Append.
+ *
+ * However, there are several cases when this optimization is not safe. If
+ * the rel isn't partitioned, then none of the paths will be Append or
+ * MergeAppend paths, so we should definitely not do this. If it is
+ * parititoned but is a joinrel, it may have Append and MergeAppend paths,
+ * but it can also have join paths that we can't afford to discard.
*
* Some care is needed, because we have to allow
* generate_useful_gather_paths to see the old partial paths in the next
@@ -7924,7 +7930,7 @@ apply_scanjoin_target_to_paths(PlannerInfo *root,
* generate_useful_gather_paths to add path(s) to the main list, and
* finally zap the partial pathlist.
*/
- if (rel_is_partitioned)
+ if (rel_is_partitioned && IS_SIMPLE_REL(rel))
rel->pathlist = NIL;
/*
@@ -7950,7 +7956,7 @@ apply_scanjoin_target_to_paths(PlannerInfo *root,
}
/* Finish dropping old paths for a partitioned rel, per comment above */
- if (rel_is_partitioned)
+ if (rel_is_partitioned && IS_SIMPLE_REL(rel))
rel->partial_pathlist = NIL;
/* Extract SRF-free scan/join target. */
diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c
index 00d9a23b675..ce52d6ca81f 100644
--- a/src/backend/storage/buffer/bufmgr.c
+++ b/src/backend/storage/buffer/bufmgr.c
@@ -4019,7 +4019,7 @@ InitBufferManagerAccess(void)
memset(&PrivateRefCountArray, 0, sizeof(PrivateRefCountArray));
- hash_ctl.keysize = sizeof(int32);
+ hash_ctl.keysize = sizeof(Buffer);
hash_ctl.entrysize = sizeof(PrivateRefCountEntry);
PrivateRefCountHash = hash_create("PrivateRefCount", 100, &hash_ctl,
@@ -5799,7 +5799,7 @@ LockBufferForCleanup(Buffer buffer)
SetStartupBufferPinWaitBufId(-1);
}
else
- ProcWaitForSignal(WAIT_EVENT_BUFFER_PIN);
+ ProcWaitForSignal(WAIT_EVENT_BUFFER_CLEANUP);
/*
* Remove flag marking us as waiter. Normally this will not be set
diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c
index 4222bdab078..fc45d72c79b 100644
--- a/src/backend/storage/ipc/standby.c
+++ b/src/backend/storage/ipc/standby.c
@@ -840,7 +840,7 @@ ResolveRecoveryConflictWithBufferPin(void)
* SIGHUP signal handler, etc cannot do that because it uses the different
* latch from that ProcWaitForSignal() waits on.
*/
- ProcWaitForSignal(WAIT_EVENT_BUFFER_PIN);
+ ProcWaitForSignal(WAIT_EVENT_BUFFER_CLEANUP);
if (got_standby_delay_timeout)
SendRecoveryConflictWithBufferPin(PROCSIG_RECOVERY_CONFLICT_BUFFERPIN);
diff --git a/src/backend/tsearch/spell.c b/src/backend/tsearch/spell.c
index 146801885d7..0dab31f0ddb 100644
--- a/src/backend/tsearch/spell.c
+++ b/src/backend/tsearch/spell.c
@@ -2320,7 +2320,7 @@ CheckCompoundAffixes(CMPDAffix **ptr, const char *word, int len, bool CheckInPla
}
else
{
- char *affbegin;
+ const char *affbegin;
while ((*ptr)->affix)
{
diff --git a/src/backend/utils/activity/pgstat_replslot.c b/src/backend/utils/activity/pgstat_replslot.c
index e08d33e8b4c..d757e00eb54 100644
--- a/src/backend/utils/activity/pgstat_replslot.c
+++ b/src/backend/utils/activity/pgstat_replslot.c
@@ -127,7 +127,7 @@ pgstat_report_replslotsync(ReplicationSlot *slot)
statent = &shstatent->stats;
statent->slotsync_skip_count += 1;
- statent->slotsync_skip_at = GetCurrentTimestamp();
+ statent->slotsync_last_skip = GetCurrentTimestamp();
pgstat_unlock_entry(entry_ref);
}
diff --git a/src/backend/utils/activity/wait_event.c b/src/backend/utils/activity/wait_event.c
index d9b8f34a355..96d61f77f6e 100644
--- a/src/backend/utils/activity/wait_event.c
+++ b/src/backend/utils/activity/wait_event.c
@@ -29,7 +29,7 @@
static const char *pgstat_get_wait_activity(WaitEventActivity w);
-static const char *pgstat_get_wait_bufferpin(WaitEventBufferPin w);
+static const char *pgstat_get_wait_buffer(WaitEventBuffer w);
static const char *pgstat_get_wait_client(WaitEventClient w);
static const char *pgstat_get_wait_ipc(WaitEventIPC w);
static const char *pgstat_get_wait_timeout(WaitEventTimeout w);
@@ -389,8 +389,8 @@ pgstat_get_wait_event_type(uint32 wait_event_info)
case PG_WAIT_LOCK:
event_type = "Lock";
break;
- case PG_WAIT_BUFFERPIN:
- event_type = "BufferPin";
+ case PG_WAIT_BUFFER:
+ event_type = "Buffer";
break;
case PG_WAIT_ACTIVITY:
event_type = "Activity";
@@ -453,11 +453,11 @@ pgstat_get_wait_event(uint32 wait_event_info)
case PG_WAIT_INJECTIONPOINT:
event_name = GetWaitEventCustomIdentifier(wait_event_info);
break;
- case PG_WAIT_BUFFERPIN:
+ case PG_WAIT_BUFFER:
{
- WaitEventBufferPin w = (WaitEventBufferPin) wait_event_info;
+ WaitEventBuffer w = (WaitEventBuffer) wait_event_info;
- event_name = pgstat_get_wait_bufferpin(w);
+ event_name = pgstat_get_wait_buffer(w);
break;
}
case PG_WAIT_ACTIVITY:
diff --git a/src/backend/utils/activity/wait_event_names.txt b/src/backend/utils/activity/wait_event_names.txt
index c1ac71ff7f2..1e5e368a5dc 100644
--- a/src/backend/utils/activity/wait_event_names.txt
+++ b/src/backend/utils/activity/wait_event_names.txt
@@ -279,12 +279,12 @@ WAL_WRITE "Waiting for a write to a WAL file."
ABI_compatibility:
#
-# Wait Events - Buffer Pin
+# Wait Events - Buffer
#
-Section: ClassName - WaitEventBufferPin
+Section: ClassName - WaitEventBuffer
-BUFFER_PIN "Waiting to acquire an exclusive pin on a buffer."
+BUFFER_CLEANUP "Waiting to acquire an exclusive pin on a buffer. Buffer pin waits can be protracted if another process holds an open cursor that last read data from the buffer in question."
ABI_compatibility:
diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c
index 5a1b8483bea..cc76bdde723 100644
--- a/src/backend/utils/adt/arrayfuncs.c
+++ b/src/backend/utils/adt/arrayfuncs.c
@@ -5687,7 +5687,7 @@ accumArrayResultArr(ArrayBuildStateArr *astate,
MemoryContextSwitchTo(oldcontext);
/* Release detoasted copy if any */
- if ((Pointer) arg != DatumGetPointer(dvalue))
+ if (arg != DatumGetPointer(dvalue))
pfree(arg);
return astate;
diff --git a/src/backend/utils/adt/datum.c b/src/backend/utils/adt/datum.c
index c2b111b829e..dabcca6f4c5 100644
--- a/src/backend/utils/adt/datum.c
+++ b/src/backend/utils/adt/datum.c
@@ -299,9 +299,9 @@ datum_image_eq(Datum value1, Datum value2, bool typByVal, int typLen)
len1 - VARHDRSZ) == 0);
/* Only free memory if it's a copy made here. */
- if ((Pointer) arg1val != DatumGetPointer(value1))
+ if (arg1val != DatumGetPointer(value1))
pfree(arg1val);
- if ((Pointer) arg2val != DatumGetPointer(value2))
+ if (arg2val != DatumGetPointer(value2))
pfree(arg2val);
}
}
@@ -355,7 +355,7 @@ datum_image_hash(Datum value, bool typByVal, int typLen)
result = hash_bytes((unsigned char *) VARDATA_ANY(val), len - VARHDRSZ);
/* Only free memory if it's a copy made here. */
- if ((Pointer) val != DatumGetPointer(value))
+ if (val != DatumGetPointer(value))
pfree(val);
}
else if (typLen == -2)
diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c
index 5bfeda2ffde..c3cb022a400 100644
--- a/src/backend/utils/adt/formatting.c
+++ b/src/backend/utils/adt/formatting.c
@@ -1046,8 +1046,9 @@ typedef struct NUMProc
char *number, /* string with number */
*number_p, /* pointer to current number position */
*inout, /* in / out buffer */
- *inout_p, /* pointer to current inout position */
- *last_relevant, /* last relevant number after decimal point */
+ *inout_p; /* pointer to current inout position */
+
+ const char *last_relevant, /* last relevant number after decimal point */
*L_negative_sign, /* Locale */
*L_positive_sign,
@@ -1118,7 +1119,7 @@ static FormatNode *NUM_cache(int len, NUMDesc *Num, const text *pars_str, bool *
static char *int_to_roman(int number);
static int roman_to_int(NUMProc *Np, size_t input_len);
static void NUM_prepare_locale(NUMProc *Np);
-static char *get_last_relevant_decnum(const char *num);
+static const char *get_last_relevant_decnum(const char *num);
static void NUM_numpart_from_char(NUMProc *Np, int id, size_t input_len);
static void NUM_numpart_to_char(NUMProc *Np, int id);
static char *NUM_processor(FormatNode *node, NUMDesc *Num, char *inout,
@@ -5297,10 +5298,10 @@ NUM_prepare_locale(NUMProc *Np)
* If there is no decimal point, return NULL (which will result in same
* behavior as if FM hadn't been specified).
*/
-static char *
+static const char *
get_last_relevant_decnum(const char *num)
{
- char *result,
+ const char *result,
*p = strchr(num, '.');
#ifdef DEBUG_TO_FROM_CHAR
diff --git a/src/backend/utils/adt/jsonb_gin.c b/src/backend/utils/adt/jsonb_gin.c
index 9b56248cf0b..a6d3332bb42 100644
--- a/src/backend/utils/adt/jsonb_gin.c
+++ b/src/backend/utils/adt/jsonb_gin.c
@@ -999,8 +999,7 @@ gin_consistent_jsonb(PG_FUNCTION_ARGS)
if (nkeys > 0)
{
Assert(extra_data && extra_data[0]);
- res = execute_jsp_gin_node((JsonPathGinNode *) extra_data[0], check,
- false) != GIN_FALSE;
+ res = execute_jsp_gin_node(extra_data[0], check, false) != GIN_FALSE;
}
}
else
@@ -1060,8 +1059,7 @@ gin_triconsistent_jsonb(PG_FUNCTION_ARGS)
if (nkeys > 0)
{
Assert(extra_data && extra_data[0]);
- res = execute_jsp_gin_node((JsonPathGinNode *) extra_data[0], check,
- true);
+ res = execute_jsp_gin_node(extra_data[0], check, true);
/* Should always recheck the result */
if (res == GIN_TRUE)
@@ -1258,8 +1256,7 @@ gin_consistent_jsonb_path(PG_FUNCTION_ARGS)
if (nkeys > 0)
{
Assert(extra_data && extra_data[0]);
- res = execute_jsp_gin_node((JsonPathGinNode *) extra_data[0], check,
- false) != GIN_FALSE;
+ res = execute_jsp_gin_node(extra_data[0], check, false) != GIN_FALSE;
}
}
else
@@ -1302,8 +1299,7 @@ gin_triconsistent_jsonb_path(PG_FUNCTION_ARGS)
if (nkeys > 0)
{
Assert(extra_data && extra_data[0]);
- res = execute_jsp_gin_node((JsonPathGinNode *) extra_data[0], check,
- true);
+ res = execute_jsp_gin_node(extra_data[0], check, true);
/* Should always recheck the result */
if (res == GIN_TRUE)
diff --git a/src/backend/utils/adt/like_support.c b/src/backend/utils/adt/like_support.c
index 999f23f86d5..dca1d9be035 100644
--- a/src/backend/utils/adt/like_support.c
+++ b/src/backend/utils/adt/like_support.c
@@ -1035,7 +1035,7 @@ like_fixed_prefix(Const *patt_const, bool case_insensitive, Oid collation,
pattlen = VARSIZE_ANY_EXHDR(bstr);
patt = (char *) palloc(pattlen);
memcpy(patt, VARDATA_ANY(bstr), pattlen);
- Assert((Pointer) bstr == DatumGetPointer(patt_const->constvalue));
+ Assert(bstr == DatumGetPointer(patt_const->constvalue));
}
match = palloc(pattlen + 1);
@@ -1577,7 +1577,7 @@ make_greater_string(const Const *str_const, FmgrInfo *ltproc, Oid collation)
len = VARSIZE_ANY_EXHDR(bstr);
workstr = (char *) palloc(len);
memcpy(workstr, VARDATA_ANY(bstr), len);
- Assert((Pointer) bstr == DatumGetPointer(str_const->constvalue));
+ Assert(bstr == DatumGetPointer(str_const->constvalue));
cmpstr = str_const->constvalue;
}
else
diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c
index 2501007d981..1d626aecbe7 100644
--- a/src/backend/utils/adt/numeric.c
+++ b/src/backend/utils/adt/numeric.c
@@ -2194,7 +2194,7 @@ numeric_abbrev_convert(Datum original_datum, SortSupport ssup)
}
/* should happen only for external/compressed toasts */
- if ((Pointer) original_varatt != DatumGetPointer(original_datum))
+ if (original_varatt != DatumGetPointer(original_datum))
pfree(original_varatt);
return result;
@@ -2284,9 +2284,9 @@ numeric_fast_cmp(Datum x, Datum y, SortSupport ssup)
result = cmp_numerics(nx, ny);
- if ((Pointer) nx != DatumGetPointer(x))
+ if (nx != DatumGetPointer(x))
pfree(nx);
- if ((Pointer) ny != DatumGetPointer(y))
+ if (ny != DatumGetPointer(y))
pfree(ny);
return result;
diff --git a/src/backend/utils/adt/pg_dependencies.c b/src/backend/utils/adt/pg_dependencies.c
index 56abb744177..236790b1439 100644
--- a/src/backend/utils/adt/pg_dependencies.c
+++ b/src/backend/utils/adt/pg_dependencies.c
@@ -494,7 +494,7 @@ dependencies_scalar(void *state, char *token, JsonTokenType tokentype)
case DEPS_EXPECT_ATTNUM:
attnum = pg_strtoint16_safe(token, (Node *) &escontext);
- if (SOFT_ERROR_OCCURRED(&escontext))
+ if (escontext.error_occurred)
{
errsave(parse->escontext,
errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
@@ -539,7 +539,7 @@ dependencies_scalar(void *state, char *token, JsonTokenType tokentype)
parse->dependency = (AttrNumber)
pg_strtoint16_safe(token, (Node *) &escontext);
- if (SOFT_ERROR_OCCURRED(&escontext))
+ if (escontext.error_occurred)
{
errsave(parse->escontext,
errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
@@ -569,7 +569,7 @@ dependencies_scalar(void *state, char *token, JsonTokenType tokentype)
parse->degree = float8in_internal(token, NULL, "double",
token, (Node *) &escontext);
- if (SOFT_ERROR_OCCURRED(&escontext))
+ if (escontext.error_occurred)
{
errsave(parse->escontext,
errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c
index b26257c0a8d..d73bab97c15 100644
--- a/src/backend/utils/adt/pg_locale.c
+++ b/src/backend/utils/adt/pg_locale.c
@@ -953,7 +953,7 @@ get_iso_localename(const char *winlocname)
wchar_t wc_locale_name[LOCALE_NAME_MAX_LENGTH];
wchar_t buffer[LOCALE_NAME_MAX_LENGTH];
static char iso_lc_messages[LOCALE_NAME_MAX_LENGTH];
- char *period;
+ const char *period;
int len;
int ret_val;
diff --git a/src/backend/utils/adt/pg_ndistinct.c b/src/backend/utils/adt/pg_ndistinct.c
index 5292521b169..a2bce48fda0 100644
--- a/src/backend/utils/adt/pg_ndistinct.c
+++ b/src/backend/utils/adt/pg_ndistinct.c
@@ -435,7 +435,7 @@ ndistinct_scalar(void *state, char *token, JsonTokenType tokentype)
case NDIST_EXPECT_ATTNUM:
attnum = pg_strtoint16_safe(token, (Node *) &escontext);
- if (SOFT_ERROR_OCCURRED(&escontext))
+ if (escontext.error_occurred)
{
errsave(parse->escontext,
errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
@@ -485,7 +485,7 @@ ndistinct_scalar(void *state, char *token, JsonTokenType tokentype)
*/
parse->ndistinct = pg_strtoint32_safe(token, (Node *) &escontext);
- if (!SOFT_ERROR_OCCURRED(&escontext))
+ if (!escontext.error_occurred)
{
parse->state = NDIST_EXPECT_KEY;
return JSON_SUCCESS;
diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c
index 7e2ed69138a..ef6fffe60b9 100644
--- a/src/backend/utils/adt/pgstatfuncs.c
+++ b/src/backend/utils/adt/pgstatfuncs.c
@@ -2162,7 +2162,7 @@ pg_stat_get_replication_slot(PG_FUNCTION_ARGS)
INT8OID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 11, "slotsync_skip_count",
INT8OID, -1, 0);
- TupleDescInitEntry(tupdesc, (AttrNumber) 12, "slotsync_skip_at",
+ TupleDescInitEntry(tupdesc, (AttrNumber) 12, "slotsync_last_skip",
TIMESTAMPTZOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 13, "stats_reset",
TIMESTAMPTZOID, -1, 0);
@@ -2192,10 +2192,10 @@ pg_stat_get_replication_slot(PG_FUNCTION_ARGS)
values[9] = Int64GetDatum(slotent->total_bytes);
values[10] = Int64GetDatum(slotent->slotsync_skip_count);
- if (slotent->slotsync_skip_at == 0)
+ if (slotent->slotsync_last_skip == 0)
nulls[11] = true;
else
- values[11] = TimestampTzGetDatum(slotent->slotsync_skip_at);
+ values[11] = TimestampTzGetDatum(slotent->slotsync_last_skip);
if (slotent->stat_reset_timestamp == 0)
nulls[12] = true;
diff --git a/src/backend/utils/adt/rangetypes.c b/src/backend/utils/adt/rangetypes.c
index b7e9f6dc0a8..d8e5130d642 100644
--- a/src/backend/utils/adt/rangetypes.c
+++ b/src/backend/utils/adt/rangetypes.c
@@ -1513,9 +1513,9 @@ range_fast_cmp(Datum a, Datum b, SortSupport ssup)
cmp = range_cmp_bounds(typcache, &upper1, &upper2);
}
- if ((Pointer) range_a != DatumGetPointer(a))
+ if (range_a != DatumGetPointer(a))
pfree(range_a);
- if ((Pointer) range_b != DatumGetPointer(b))
+ if (range_b != DatumGetPointer(b))
pfree(range_b);
return cmp;
diff --git a/src/backend/utils/adt/rowtypes.c b/src/backend/utils/adt/rowtypes.c
index 9e5449f17d7..38e6fe1c43a 100644
--- a/src/backend/utils/adt/rowtypes.c
+++ b/src/backend/utils/adt/rowtypes.c
@@ -1529,9 +1529,9 @@ record_image_cmp(FunctionCallInfo fcinfo)
if ((cmpresult == 0) && (len1 != len2))
cmpresult = (len1 < len2) ? -1 : 1;
- if ((Pointer) arg1val != DatumGetPointer(values1[i1]))
+ if (arg1val != DatumGetPointer(values1[i1]))
pfree(arg1val);
- if ((Pointer) arg2val != DatumGetPointer(values2[i2]))
+ if (arg2val != DatumGetPointer(values2[i2]))
pfree(arg2val);
}
else
diff --git a/src/backend/utils/adt/xid8funcs.c b/src/backend/utils/adt/xid8funcs.c
index a211a107767..4b3f7a69b3b 100644
--- a/src/backend/utils/adt/xid8funcs.c
+++ b/src/backend/utils/adt/xid8funcs.c
@@ -194,7 +194,7 @@ is_visible_fxid(FullTransactionId value, const pg_snapshot *snap)
#ifdef USE_BSEARCH_IF_NXIP_GREATER
else if (snap->nxip > USE_BSEARCH_IF_NXIP_GREATER)
{
- void *res;
+ const void *res;
res = bsearch(&value, snap->xip, snap->nxip, sizeof(FullTransactionId),
cmp_fxid);
diff --git a/src/backend/utils/cache/evtcache.c b/src/backend/utils/cache/evtcache.c
index b9d5a5998be..76ba2db5390 100644
--- a/src/backend/utils/cache/evtcache.c
+++ b/src/backend/utils/cache/evtcache.c
@@ -240,7 +240,7 @@ DecodeTextArrayToBitmapset(Datum array)
}
pfree(elems);
- if ((Pointer) arr != DatumGetPointer(array))
+ if (arr != DatumGetPointer(array))
pfree(arr);
return bms;