On Fri, Sep 24, 2021 at 04:58:27PM -0500, Justin Pryzby wrote: > A compilation of fixes for master.
Thanks Michael for applying fixes to user-facing docs (I hadn't realized that the 2nd one needed to be backpatched). This fixes an file I failed to include in the "recheck" patch and more typos for extended stats (+Tomas). +Andres (Jit), +Zhihong (file header comments).
>From b244c10676210b096e03a4170b5ce106fc470457 Mon Sep 17 00:00:00 2001 From: Justin Pryzby <pryz...@telsasoft.com> Date: Wed, 28 Apr 2021 14:12:49 -0500 Subject: [PATCH v2 01/12] Avoid double parens git grep -l '\<if (([^(]*))' '*.c' First sent on this thread, which concludes with application of 0002 but not this patch. https://www.postgresql.org/message-id/flat/20210428182936.ge27...@telsasoft.com --- contrib/amcheck/verify_heapam.c | 6 +++--- contrib/ltree/ltree_io.c | 6 +++--- src/backend/access/transam/xact.c | 6 +++--- src/backend/commands/tablecmds.c | 2 +- src/backend/nodes/nodeFuncs.c | 4 ++-- src/backend/replication/logical/decode.c | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/contrib/amcheck/verify_heapam.c b/contrib/amcheck/verify_heapam.c index 173f99d787..0ac52b6ba2 100644 --- a/contrib/amcheck/verify_heapam.c +++ b/contrib/amcheck/verify_heapam.c @@ -406,13 +406,13 @@ verify_heapam(PG_FUNCTION_ARGS) &vmbuffer); if (skip_option == SKIP_PAGES_ALL_FROZEN) { - if ((mapbits & VISIBILITYMAP_ALL_FROZEN) != 0) + if (mapbits & VISIBILITYMAP_ALL_FROZEN) continue; } if (skip_option == SKIP_PAGES_ALL_VISIBLE) { - if ((mapbits & VISIBILITYMAP_ALL_VISIBLE) != 0) + if (mapbits & VISIBILITYMAP_ALL_VISIBLE) continue; } } @@ -690,7 +690,7 @@ check_tuple_header(HeapCheckContext *ctx) report_corruption(ctx, psprintf("tuple data should begin at byte %u, but actually begins at byte %u (1 attribute, has nulls)", expected_hoff, ctx->tuphdr->t_hoff)); - else if ((infomask & HEAP_HASNULL)) + else if (infomask & HEAP_HASNULL) report_corruption(ctx, psprintf("tuple data should begin at byte %u, but actually begins at byte %u (%u attributes, has nulls)", expected_hoff, ctx->tuphdr->t_hoff, ctx->natts)); diff --git a/contrib/ltree/ltree_io.c b/contrib/ltree/ltree_io.c index 15115cb29f..b75f35d5b5 100644 --- a/contrib/ltree/ltree_io.c +++ b/contrib/ltree/ltree_io.c @@ -661,17 +661,17 @@ deparse_lquery(const lquery *in) } memcpy(ptr, curtlevel->name, curtlevel->len); ptr += curtlevel->len; - if ((curtlevel->flag & LVAR_SUBLEXEME)) + if (curtlevel->flag & LVAR_SUBLEXEME) { *ptr = '%'; ptr++; } - if ((curtlevel->flag & LVAR_INCASE)) + if (curtlevel->flag & LVAR_INCASE) { *ptr = '@'; ptr++; } - if ((curtlevel->flag & LVAR_ANYEND)) + if (curtlevel->flag & LVAR_ANYEND) { *ptr = '*'; ptr++; diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index 6597ec45a9..8350a8fd19 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -2427,7 +2427,7 @@ PrepareTransaction(void) * cases, such as a temp table created and dropped all within the * transaction. That seems to require much more bookkeeping though. */ - if ((MyXactFlags & XACT_FLAGS_ACCESSEDTEMPNAMESPACE)) + if (MyXactFlags & XACT_FLAGS_ACCESSEDTEMPNAMESPACE) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cannot PREPARE a transaction that has operated on temporary objects"))); @@ -5540,7 +5540,7 @@ XactLogCommitRecord(TimestampTz commit_time, xl_xinfo.xinfo |= XACT_COMPLETION_UPDATE_RELCACHE_FILE; if (forceSyncCommit) xl_xinfo.xinfo |= XACT_COMPLETION_FORCE_SYNC_COMMIT; - if ((xactflags & XACT_FLAGS_ACQUIREDACCESSEXCLUSIVELOCK)) + if (xactflags & XACT_FLAGS_ACQUIREDACCESSEXCLUSIVELOCK) xl_xinfo.xinfo |= XACT_XINFO_HAS_AE_LOCKS; /* @@ -5691,7 +5691,7 @@ XactLogAbortRecord(TimestampTz abort_time, xlrec.xact_time = abort_time; - if ((xactflags & XACT_FLAGS_ACQUIREDACCESSEXCLUSIVELOCK)) + if (xactflags & XACT_FLAGS_ACQUIREDACCESSEXCLUSIVELOCK) xl_xinfo.xinfo |= XACT_XINFO_HAS_AE_LOCKS; if (nsubxacts > 0) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index dbee6ae199..e018cdfd9e 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -16309,7 +16309,7 @@ PreCommit_on_commit_actions(void) * relations, we can skip truncating ON COMMIT DELETE ROWS * tables, as they must still be empty. */ - if ((MyXactFlags & XACT_FLAGS_ACCESSEDTEMPNAMESPACE)) + if (MyXactFlags & XACT_FLAGS_ACCESSEDTEMPNAMESPACE) oids_to_truncate = lappend_oid(oids_to_truncate, oc->relid); break; case ONCOMMIT_DROP: diff --git a/src/backend/nodes/nodeFuncs.c b/src/backend/nodes/nodeFuncs.c index e276264882..e5e82cb85f 100644 --- a/src/backend/nodes/nodeFuncs.c +++ b/src/backend/nodes/nodeFuncs.c @@ -2390,7 +2390,7 @@ query_tree_walker(Query *query, * don't contain actual expressions. However they do contain OIDs which * may be needed by dependency walkers etc. */ - if ((flags & QTW_EXAMINE_SORTGROUP)) + if (flags & QTW_EXAMINE_SORTGROUP) { if (walker((Node *) query->groupClause, context)) return true; @@ -3328,7 +3328,7 @@ query_tree_mutator(Query *query, * may be of interest to some mutators. */ - if ((flags & QTW_EXAMINE_SORTGROUP)) + if (flags & QTW_EXAMINE_SORTGROUP) { MUTATE(query->groupClause, query->groupClause, List *); MUTATE(query->windowClause, query->windowClause, List *); diff --git a/src/backend/replication/logical/decode.c b/src/backend/replication/logical/decode.c index 2874dc0612..fc9a0d67c9 100644 --- a/src/backend/replication/logical/decode.c +++ b/src/backend/replication/logical/decode.c @@ -337,7 +337,7 @@ DecodeXactOp(LogicalDecodingContext *ctx, XLogRecordBuffer *buf) ReorderBufferXidSetCatalogChanges(ctx->reorder, xid, buf->origptr); } - else if ((!ctx->fast_forward)) + else if (!ctx->fast_forward) ReorderBufferImmediateInvalidation(ctx->reorder, invals->nmsgs, invals->msgs); -- 2.17.0
>From 168bc839d9218cfd93afdccc0c7be0b86a457539 Mon Sep 17 00:00:00 2001 From: Justin Pryzby <pryz...@telsasoft.com> Date: Sat, 24 Apr 2021 17:02:52 -0500 Subject: [PATCH v2 02/12] Deforming is never done for Virtual TTS since 36d22dd95bc87ca68e742da91f47f8826f8758c9 --- src/backend/jit/llvm/llvmjit_deform.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/backend/jit/llvm/llvmjit_deform.c b/src/backend/jit/llvm/llvmjit_deform.c index 008cd617f6..3221f28b8f 100644 --- a/src/backend/jit/llvm/llvmjit_deform.c +++ b/src/backend/jit/llvm/llvmjit_deform.c @@ -89,9 +89,7 @@ slot_compile_deform(LLVMJitContext *context, TupleDesc desc, int attnum; - /* virtual tuples never need deforming, so don't generate code */ - if (ops == &TTSOpsVirtual) - return NULL; + Assert (ops != &TTSOpsVirtual); /* decline to JIT for slot types we don't know to handle */ if (ops != &TTSOpsHeapTuple && ops != &TTSOpsBufferHeapTuple && -- 2.17.0
>From f4e58fcfd250f65d19f0c771e45dda03597a998b Mon Sep 17 00:00:00 2001 From: Justin Pryzby <pryz...@telsasoft.com> Date: Sat, 8 May 2021 08:12:46 -0500 Subject: [PATCH v2 03/12] tablefunc.c: Fix comment Mentioned at: https://www.postgresql.org/message-id/CAJRYxuKmMkgHFKjuYPxThdT5Mjg%2Bg-nH5szYbS8UoVsQXzd95A%40mail.gmail.com --- contrib/tablefunc/tablefunc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/tablefunc/tablefunc.c b/contrib/tablefunc/tablefunc.c index 779bd4415e..52b272f298 100644 --- a/contrib/tablefunc/tablefunc.c +++ b/contrib/tablefunc/tablefunc.c @@ -1480,7 +1480,7 @@ validateConnectbyTupleDesc(TupleDesc td, bool show_branch, bool show_serial) "fifth column must be type %s", format_type_be(INT4OID)))); - /* check that the type of the fifth column is INT4 */ + /* check that the type of the fourth column is INT4 */ if (!show_branch && show_serial && TupleDescAttr(td, 3)->atttypid != INT4OID) ereport(ERROR, -- 2.17.0
>From dba3d80d1ccb71c5e98566e086632d5a12c45f6e Mon Sep 17 00:00:00 2001 From: Justin Pryzby <pryz...@telsasoft.com> Date: Fri, 24 Sep 2021 14:18:52 -0500 Subject: [PATCH v2 04/12] Recheck arg is not needed since 2011 It was added at: a4dde3bff36dac1ac0b699becad6f103d861a874 And not used since: 7e2f906201c8bb95f7fb17e56b8740c38bda5441 --- src/backend/commands/cluster.c | 4 ++-- src/backend/commands/tablecmds.c | 2 +- src/include/commands/cluster.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c index 9d22f648a8..ef9485c833 100644 --- a/src/backend/commands/cluster.c +++ b/src/backend/commands/cluster.c @@ -398,7 +398,7 @@ cluster_rel(Oid tableOid, Oid indexOid, ClusterParams *params) /* Check heap and index are valid to cluster on */ if (OidIsValid(indexOid)) - check_index_is_clusterable(OldHeap, indexOid, recheck, AccessExclusiveLock); + check_index_is_clusterable(OldHeap, indexOid, AccessExclusiveLock); /* * Quietly ignore the request if this is a materialized view which has not @@ -440,7 +440,7 @@ cluster_rel(Oid tableOid, Oid indexOid, ClusterParams *params) * protection here. */ void -check_index_is_clusterable(Relation OldHeap, Oid indexOid, bool recheck, LOCKMODE lockmode) +check_index_is_clusterable(Relation OldHeap, Oid indexOid, LOCKMODE lockmode) { Relation OldIndex; diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index e018cdfd9e..9d2ab31e7e 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -13612,7 +13612,7 @@ ATExecClusterOn(Relation rel, const char *indexName, LOCKMODE lockmode) indexName, RelationGetRelationName(rel)))); /* Check index is valid to cluster on */ - check_index_is_clusterable(rel, indexOid, false, lockmode); + check_index_is_clusterable(rel, indexOid, lockmode); /* And do the work */ mark_index_clustered(rel, indexOid, false); diff --git a/src/include/commands/cluster.h b/src/include/commands/cluster.h index b64d3bc204..bccbb9dd1c 100644 --- a/src/include/commands/cluster.h +++ b/src/include/commands/cluster.h @@ -32,7 +32,7 @@ typedef struct ClusterParams extern void cluster(ParseState *pstate, ClusterStmt *stmt, bool isTopLevel); extern void cluster_rel(Oid tableOid, Oid indexOid, ClusterParams *params); extern void check_index_is_clusterable(Relation OldHeap, Oid indexOid, - bool recheck, LOCKMODE lockmode); + LOCKMODE lockmode); extern void mark_index_clustered(Relation rel, Oid indexOid, bool is_internal); extern Oid make_new_heap(Oid OIDOldHeap, Oid NewTableSpace, Oid NewAccessMethod, -- 2.17.0
>From c231b8a0e2d3148dbfbba5cb7227b8a96359552f Mon Sep 17 00:00:00 2001 From: Justin Pryzby <pryz...@telsasoft.com> Date: Mon, 5 Jul 2021 11:16:38 -0500 Subject: [PATCH v2 05/12] Add some missing newlines after function definitions --- src/backend/access/gin/ginlogic.c | 1 + src/backend/access/rmgrdesc/heapdesc.c | 1 + src/backend/utils/mmgr/freepage.c | 1 + 3 files changed, 3 insertions(+) diff --git a/src/backend/access/gin/ginlogic.c b/src/backend/access/gin/ginlogic.c index 6bf3288f5b..3c6a782b19 100644 --- a/src/backend/access/gin/ginlogic.c +++ b/src/backend/access/gin/ginlogic.c @@ -58,6 +58,7 @@ trueConsistentFn(GinScanKey key) key->recheckCurItem = false; return true; } + static GinTernaryValue trueTriConsistentFn(GinScanKey key) { diff --git a/src/backend/access/rmgrdesc/heapdesc.c b/src/backend/access/rmgrdesc/heapdesc.c index 5c29fd9eae..1a5b8f7902 100644 --- a/src/backend/access/rmgrdesc/heapdesc.c +++ b/src/backend/access/rmgrdesc/heapdesc.c @@ -114,6 +114,7 @@ heap_desc(StringInfo buf, XLogReaderState *record) appendStringInfo(buf, "off %u", xlrec->offnum); } } + void heap2_desc(StringInfo buf, XLogReaderState *record) { diff --git a/src/backend/utils/mmgr/freepage.c b/src/backend/utils/mmgr/freepage.c index e4ee1aab97..d253108d90 100644 --- a/src/backend/utils/mmgr/freepage.c +++ b/src/backend/utils/mmgr/freepage.c @@ -270,6 +270,7 @@ sum_free_pages_recurse(FreePageManager *fpm, FreePageBtree *btp, Size *sum) } } } + static Size sum_free_pages(FreePageManager *fpm) { -- 2.17.0
>From fb264416b378342d3808e92eadd416203266a4f4 Mon Sep 17 00:00:00 2001 From: Justin Pryzby <pryz...@telsasoft.com> Date: Sun, 5 Sep 2021 18:14:39 -0500 Subject: [PATCH v2 06/12] Wrong function name in header comment Found like this for f in `find src -type f -name '*.c'`; do awk -v p=0 '/^\/\* *-*$/{h=$0; getline; h=h"\n"$0; g=gensub( "[^_[:alnum:]].*", "", 1, $2); p=1} 0&&/^{/{p=0; print h}; /^ \*\/$/{h=h"\n"$0; getline a; h=h"\n"a; getline f; h=h"\n"f; l=length(g); if (substr(f,1,7) == substr(g,1,7) && substr(f,1,l) != substr(g,1,l)) print FILENAME,g,f,"\n"h; next} 0&&/^[^s/ {]/{p=0; h=""; next} 0&&p{h=h"\n"$0}' "$f"; done |less --- src/backend/executor/nodeTableFuncscan.c | 18 +++++++++--------- src/backend/optimizer/util/pathnode.c | 2 +- src/common/pg_lzcompress.c | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/backend/executor/nodeTableFuncscan.c b/src/backend/executor/nodeTableFuncscan.c index 27dfa1b956..f9fafa9e5b 100644 --- a/src/backend/executor/nodeTableFuncscan.c +++ b/src/backend/executor/nodeTableFuncscan.c @@ -14,11 +14,11 @@ */ /* * INTERFACE ROUTINES - * ExecTableFuncscan scans a function. + * ExecTableFuncScan scans a function. * ExecFunctionNext retrieve next tuple in sequential order. - * ExecInitTableFuncscan creates and initializes a TableFuncscan node. - * ExecEndTableFuncscan releases any storage allocated. - * ExecReScanTableFuncscan rescans the function + * ExecInitTableFuncScan creates and initializes a TableFuncscan node. + * ExecEndTableFuncScan releases any storage allocated. + * ExecReScanTableFuncScan rescans the function */ #include "postgres.h" @@ -46,7 +46,7 @@ static void tfuncLoadRows(TableFuncScanState *tstate, ExprContext *econtext); /* ---------------------------------------------------------------- * TableFuncNext * - * This is a workhorse for ExecTableFuncscan + * This is a workhorse for ExecTableFuncScan * ---------------------------------------------------------------- */ static TupleTableSlot * @@ -84,7 +84,7 @@ TableFuncRecheck(TableFuncScanState *node, TupleTableSlot *slot) } /* ---------------------------------------------------------------- - * ExecTableFuncscan(node) + * ExecTableFuncScan(node) * * Scans the function sequentially and returns the next qualifying * tuple. @@ -103,7 +103,7 @@ ExecTableFuncScan(PlanState *pstate) } /* ---------------------------------------------------------------- - * ExecInitTableFuncscan + * ExecInitTableFuncScan * ---------------------------------------------------------------- */ TableFuncScanState * @@ -205,7 +205,7 @@ ExecInitTableFuncScan(TableFuncScan *node, EState *estate, int eflags) } /* ---------------------------------------------------------------- - * ExecEndTableFuncscan + * ExecEndTableFuncScan * * frees any storage allocated through C routines. * ---------------------------------------------------------------- @@ -234,7 +234,7 @@ ExecEndTableFuncScan(TableFuncScanState *node) } /* ---------------------------------------------------------------- - * ExecReScanTableFuncscan + * ExecReScanTableFuncScan * * Rescans the relation. * ---------------------------------------------------------------- diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c index cedb3848dd..e53d381e19 100644 --- a/src/backend/optimizer/util/pathnode.c +++ b/src/backend/optimizer/util/pathnode.c @@ -105,7 +105,7 @@ compare_path_costs(Path *path1, Path *path2, CostSelector criterion) } /* - * compare_path_fractional_costs + * compare_fractional_path_costs * Return -1, 0, or +1 according as path1 is cheaper, the same cost, * or more expensive than path2 for fetching the specified fraction * of the total tuples. diff --git a/src/common/pg_lzcompress.c b/src/common/pg_lzcompress.c index a30a2c2eb8..72e6a7ea61 100644 --- a/src/common/pg_lzcompress.c +++ b/src/common/pg_lzcompress.c @@ -825,7 +825,7 @@ pglz_decompress(const char *source, int32 slen, char *dest, /* ---------- - * pglz_max_compressed_size - + * pglz_maximum_compressed_size - * * Calculate the maximum compressed size for a given amount of raw data. * Return the maximum size, or total compressed size if maximum size is -- 2.17.0
>From ca78971abf478beac96b3f8a5fd02427ab8c686c Mon Sep 17 00:00:00 2001 From: Zhihong Yu <z...@yugabyte.com> Date: Fri, 10 Sep 2021 11:28:17 -0700 Subject: [PATCH v2 07/12] incorrect file names in header comment awk by Justin, patch by Zhihong Yu find src -name '*.[ch]' -type f -print0 |xargs -r0 awk '{fn=gensub(".*/", "", "1", FILENAME)} FILENAME~/scripts/{fn=gensub("\\.c","", 1, fn)} FNR==1 && /---$/{top=1} /\*\//{top=0} !top{next} FNR>1 && FNR<4 && NF==2 && $2!=fn{print FILENAME,"head",fn,$2} /IDENTIFICATION/{getline; if ($0!~FILENAME){print FILENAME,"foot",$2}}' --- src/backend/catalog/pg_publication.c | 2 +- src/backend/commands/publicationcmds.c | 2 +- src/backend/commands/subscriptioncmds.c | 2 +- src/backend/optimizer/util/appendinfo.c | 2 +- src/backend/optimizer/util/inherit.c | 2 +- src/backend/replication/logical/logicalfuncs.c | 2 +- src/backend/replication/logical/reorderbuffer.c | 2 +- src/backend/replication/logical/snapbuild.c | 2 +- src/backend/utils/activity/backend_progress.c | 4 ++-- src/backend/utils/activity/backend_status.c | 2 +- src/backend/utils/activity/wait_event.c | 2 +- src/include/replication/pgoutput.h | 2 +- src/include/utils/dynahash.h | 5 +++-- src/port/pgcheckdir.c | 4 +++- 14 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/backend/catalog/pg_publication.c b/src/backend/catalog/pg_publication.c index 9cd0c82f93..83432b476c 100644 --- a/src/backend/catalog/pg_publication.c +++ b/src/backend/catalog/pg_publication.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * pg_publication.c + * src/backend/catalog/pg_publication.c * *------------------------------------------------------------------------- */ diff --git a/src/backend/commands/publicationcmds.c b/src/backend/commands/publicationcmds.c index 9c7f91611d..4b99815ad6 100644 --- a/src/backend/commands/publicationcmds.c +++ b/src/backend/commands/publicationcmds.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * publicationcmds.c + * src/backend/commands/publicationcmds.c * *------------------------------------------------------------------------- */ diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c index c47ba26369..ee700e456d 100644 --- a/src/backend/commands/subscriptioncmds.c +++ b/src/backend/commands/subscriptioncmds.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * subscriptioncmds.c + * src/backend/commands/subscriptioncmds.c * *------------------------------------------------------------------------- */ diff --git a/src/backend/optimizer/util/appendinfo.c b/src/backend/optimizer/util/appendinfo.c index af46f581ac..d696d9cbf9 100644 --- a/src/backend/optimizer/util/appendinfo.c +++ b/src/backend/optimizer/util/appendinfo.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * src/backend/optimizer/path/appendinfo.c + * src/backend/optimizer/util/appendinfo.c * *------------------------------------------------------------------------- */ diff --git a/src/backend/optimizer/util/inherit.c b/src/backend/optimizer/util/inherit.c index c758172efa..ff4250368d 100644 --- a/src/backend/optimizer/util/inherit.c +++ b/src/backend/optimizer/util/inherit.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * src/backend/optimizer/path/inherit.c + * src/backend/optimizer/util/inherit.c * *------------------------------------------------------------------------- */ diff --git a/src/backend/replication/logical/logicalfuncs.c b/src/backend/replication/logical/logicalfuncs.c index e59939aad1..5c4efb0dcf 100644 --- a/src/backend/replication/logical/logicalfuncs.c +++ b/src/backend/replication/logical/logicalfuncs.c @@ -9,7 +9,7 @@ * Copyright (c) 2012-2021, PostgreSQL Global Development Group * * IDENTIFICATION - * src/backend/replication/logicalfuncs.c + * src/backend/replication/logical/logicalfuncs.c *------------------------------------------------------------------------- */ diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index 46e66608cf..3564b3bb82 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * src/backend/replication/reorderbuffer.c + * src/backend/replication/logical/reorderbuffer.c * * NOTES * This module gets handed individual pieces of transactions in the order diff --git a/src/backend/replication/logical/snapbuild.c b/src/backend/replication/logical/snapbuild.c index a14a3d6900..fb12791f39 100644 --- a/src/backend/replication/logical/snapbuild.c +++ b/src/backend/replication/logical/snapbuild.c @@ -110,7 +110,7 @@ * Copyright (c) 2012-2021, PostgreSQL Global Development Group * * IDENTIFICATION - * src/backend/replication/snapbuild.c + * src/backend/replication/logical/snapbuild.c * *------------------------------------------------------------------------- */ diff --git a/src/backend/utils/activity/backend_progress.c b/src/backend/utils/activity/backend_progress.c index 6743e68cef..1d6c999415 100644 --- a/src/backend/utils/activity/backend_progress.c +++ b/src/backend/utils/activity/backend_progress.c @@ -1,11 +1,11 @@ /* ---------- - * progress.c + * backend_progress.c * * Command progress reporting infrastructure. * * Copyright (c) 2001-2021, PostgreSQL Global Development Group * - * src/backend/postmaster/progress.c + * src/backend/utils/activity/backend_progress.c * ---------- */ #include "postgres.h" diff --git a/src/backend/utils/activity/backend_status.c b/src/backend/utils/activity/backend_status.c index 7229598822..0aa3750c65 100644 --- a/src/backend/utils/activity/backend_status.c +++ b/src/backend/utils/activity/backend_status.c @@ -6,7 +6,7 @@ * * * IDENTIFICATION - * src/backend/postmaster/backend_status.c + * src/backend/utils/activity/backend_status.c * ---------- */ #include "postgres.h" diff --git a/src/backend/utils/activity/wait_event.c b/src/backend/utils/activity/wait_event.c index ef7e6bfb77..d0fd888f78 100644 --- a/src/backend/utils/activity/wait_event.c +++ b/src/backend/utils/activity/wait_event.c @@ -6,7 +6,7 @@ * * * IDENTIFICATION - * src/backend/postmaster/wait_event.c + * src/backend/utils/activity/wait_event.c * * NOTES * diff --git a/src/include/replication/pgoutput.h b/src/include/replication/pgoutput.h index 0dc460fb70..4bcea9b745 100644 --- a/src/include/replication/pgoutput.h +++ b/src/include/replication/pgoutput.h @@ -6,7 +6,7 @@ * Copyright (c) 2015-2021, PostgreSQL Global Development Group * * IDENTIFICATION - * pgoutput.h + * src/include/replication/pgoutput.h * *------------------------------------------------------------------------- */ diff --git a/src/include/utils/dynahash.h b/src/include/utils/dynahash.h index 2f6adc2ef9..e5a52bc34c 100644 --- a/src/include/utils/dynahash.h +++ b/src/include/utils/dynahash.h @@ -1,13 +1,14 @@ /*------------------------------------------------------------------------- * - * dynahash + * dynahash.h * POSTGRES dynahash.h file definitions * * * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * src/include/utils/dynahash.h + * IDENTIFICATION + * src/include/utils/dynahash.h * *------------------------------------------------------------------------- */ diff --git a/src/port/pgcheckdir.c b/src/port/pgcheckdir.c index 9fb2f23bdd..f19f33944c 100644 --- a/src/port/pgcheckdir.c +++ b/src/port/pgcheckdir.c @@ -1,6 +1,6 @@ /*------------------------------------------------------------------------- * - * src/port/pgcheckdir.c + * pgcheckdir.c * * A simple subroutine to check whether a directory exists and is empty or not. * Useful in both initdb and the backend. @@ -8,6 +8,8 @@ * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * + * IDENTIFICATION + * src/port/pgcheckdir.c *------------------------------------------------------------------------- */ -- 2.17.0
>From 6244a1816592c85dc9baed2e9cb33feba9c4342c Mon Sep 17 00:00:00 2001 From: Justin Pryzby <pryz...@telsasoft.com> Date: Sun, 12 Sep 2021 23:45:05 -0500 Subject: [PATCH v2 08/12] Refer to plural statistics OBJECTS See also: f04c9a61468904b6815b2bc73a48878817766e0e --- src/backend/commands/statscmds.c | 4 ++-- src/backend/statistics/extended_stats.c | 12 ++++++------ src/backend/utils/adt/selfuncs.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/backend/commands/statscmds.c b/src/backend/commands/statscmds.c index afe6744e23..d6be3218ad 100644 --- a/src/backend/commands/statscmds.c +++ b/src/backend/commands/statscmds.c @@ -869,8 +869,8 @@ ChooseExtendedStatisticNameAddition(List *exprs) } /* - * StatisticsGetRelation: given a statistics's relation OID, get the OID of - * the relation it is an statistics on. Uses the system cache. + * StatisticsGetRelation: given a statistics object's OID, get the OID of + * the relation it is defined on. Uses the system cache. */ Oid StatisticsGetRelation(Oid statId, bool missing_ok) diff --git a/src/backend/statistics/extended_stats.c b/src/backend/statistics/extended_stats.c index 5fa36e0036..d406a346c8 100644 --- a/src/backend/statistics/extended_stats.c +++ b/src/backend/statistics/extended_stats.c @@ -182,7 +182,7 @@ BuildRelationExtStatistics(Relation onerel, double totalrows, continue; } - /* compute statistics target for this statistics */ + /* compute statistics target for this statistics object */ stattarget = statext_compute_stattarget(stat->stattarget, bms_num_members(stat->columns), stats); @@ -195,7 +195,7 @@ BuildRelationExtStatistics(Relation onerel, double totalrows, if (stattarget == 0) continue; - /* evaluate expressions (if the statistics has any) */ + /* evaluate expressions (if the statistics object has any) */ data = make_build_data(onerel, stat, numrows, rows, stats, stattarget); /* compute statistic of each requested type */ @@ -257,7 +257,7 @@ BuildRelationExtStatistics(Relation onerel, double totalrows, * when analyzing only some of the columns, this will skip statistics objects * that would require additional columns. * - * See statext_compute_stattarget for details about how we compute statistics + * See statext_compute_stattarget for details about how we compute the statistics * target for a statistics object (from the object target, attribute targets * and default statistics target). */ @@ -329,7 +329,7 @@ ComputeExtStatisticsRows(Relation onerel, * * When computing target for extended statistics objects, we consider three * places where the target may be set - the statistics object itself, - * attributes the statistics is defined on, and then the default statistics + * attributes the statistics object is defined on, and then the default statistics * target. * * First we look at what's set for the statistics object itself, using the @@ -1789,8 +1789,8 @@ statext_mcv_clauselist_selectivity(PlannerInfo *root, List *clauses, int varReli /* * The clause was not estimated yet, and we've extracted either - * attnums of expressions from it. Ignore it if it's not fully - * covered by the chosen statistics. + * attnums or expressions from it. Ignore it if it's not fully + * covered by the chosen statistics object. * * We need to check both attributes and expressions, and reject if * either is not covered. diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 0c8c05f6c2..65ab651eb5 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -3443,7 +3443,7 @@ estimate_num_groups(PlannerInfo *root, List *groupExprs, double input_rows, * expression, treat it as a single variable even if it's really more * complicated. * - * XXX This has the consequence that if there's a statistics on the + * XXX This has the consequence that if there's a statistics object on the * expression, we don't split it into individual Vars. This affects * our selection of statistics in estimate_multivariate_ndistinct, * because it's probably better to use more accurate estimate for each -- 2.17.0
>From 5dd9d59249cc732310698723dd22ce71dd63879c Mon Sep 17 00:00:00 2001 From: Justin Pryzby <pryz...@telsasoft.com> Date: Fri, 20 Aug 2021 19:40:52 -0500 Subject: [PATCH v2 09/12] examine_expression: fix comment wrong since bf2a691e02 --- src/backend/statistics/extended_stats.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/statistics/extended_stats.c b/src/backend/statistics/extended_stats.c index d406a346c8..0a7d12d467 100644 --- a/src/backend/statistics/extended_stats.c +++ b/src/backend/statistics/extended_stats.c @@ -701,7 +701,7 @@ examine_expression(Node *expr, int stattarget) /* * Using 'vacatts' of size 'nvacatts' as input data, return a newly built * VacAttrStats array which includes only the items corresponding to - * attributes indicated by 'stxkeys'. If we don't have all of the per column + * attributes indicated by 'attrs'. If we don't have all of the per column * stats available to compute the extended stats, then we return NULL to indicate * to the caller that the stats should not be built. */ -- 2.17.0
>From ad5acebbbc52f7fa6c2077120b5299a88cb4f102 Mon Sep 17 00:00:00 2001 From: Justin Pryzby <pry...@telsasoft.com> Date: Wed, 1 Sep 2021 14:38:16 -0500 Subject: [PATCH v2 10/12] statscmds.c typos https://www.postgresql.org/message-id/flat/20210901193816.go26...@telsasoft.com There are some typos in 537ca68db (refenrece) I'll add them to my typos branch if you don't want to patch them right now or wait to see if someone notices anything else. --- src/backend/commands/statscmds.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/backend/commands/statscmds.c b/src/backend/commands/statscmds.c index d6be3218ad..e9e2382ceb 100644 --- a/src/backend/commands/statscmds.c +++ b/src/backend/commands/statscmds.c @@ -213,11 +213,11 @@ CreateStatistics(CreateStatsStmt *stmt) * Convert the expression list to a simple array of attnums, but also keep * a list of more complex expressions. While at it, enforce some * constraints - we don't allow extended statistics on system attributes, - * and we require the data type to have less-than operator. + * and we require the data type to have a less-than operator. * - * There are many ways how to "mask" a simple attribute refenrece as an + * There are many ways to "mask" a simple attribute reference as an * expression, for example "(a+0)" etc. We can't possibly detect all of - * them, but we handle at least the simple case with attribute in parens. + * them, but we handle at least the simple case with the attribute in parens. * There'll always be a way around this, if the user is determined (like * the "(a+0)" example), but this makes it somewhat consistent with how * indexes treat attributes/expressions. -- 2.17.0
>From 5e24eb55f721cf8da442231b33a2e491ab2f126d Mon Sep 17 00:00:00 2001 From: Justin Pryzby <pryz...@telsasoft.com> Date: Sun, 26 Sep 2021 11:13:27 -0500 Subject: [PATCH v2 11/12] f!stats typos --- src/backend/statistics/README | 8 ++++---- src/backend/statistics/README.mcv | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/backend/statistics/README b/src/backend/statistics/README index 7fda13e75b..765e3b3711 100644 --- a/src/backend/statistics/README +++ b/src/backend/statistics/README @@ -12,7 +12,7 @@ hopefully improving the estimates and producing better plans. Types of statistics ------------------- -There are currently two kinds of extended statistics: +There are currently three kinds of extended statistics: (a) ndistinct coefficients @@ -24,7 +24,7 @@ There are currently two kinds of extended statistics: Compatible clause types ----------------------- -Each type of statistics may be used to estimate some subset of clause types. +Each type of statistic may be used to estimate some subset of clause types. (a) functional dependencies - equality clauses (AND), possibly IS NULL @@ -73,8 +73,8 @@ it will do if: When the above conditions are met, clauselist_selectivity() first attempts to pass the clause list off to the extended statistics selectivity estimation -function. This functions may not find any clauses which is can perform any -estimations on. In such cases these clauses are simply ignored. When actual +function. This function may not find any clauses which it can perform any +estimations on. In such cases, these clauses are simply ignored. When actual estimation work is performed in these functions they're expected to mark which clauses they've performed estimations for so that any other function performing estimations knows which clauses are to be skipped. diff --git a/src/backend/statistics/README.mcv b/src/backend/statistics/README.mcv index 8455b0d13f..98a72ca1be 100644 --- a/src/backend/statistics/README.mcv +++ b/src/backend/statistics/README.mcv @@ -2,7 +2,7 @@ MCV lists ========= Multivariate MCV (most-common values) lists are a straightforward extension of -regular MCV list, tracking most frequent combinations of values for a group of +regular MCV lists, tracking most frequent combinations of values for a group of attributes. This works particularly well for columns with a small number of distinct values, @@ -18,7 +18,7 @@ Estimates of some clauses (e.g. equality) based on MCV lists are more accurate than when using histograms. Also, MCV lists don't necessarily require sorting of the values (the fact that -we use sorting when building them is implementation detail), but even more +we use sorting when building them is an implementation detail), but even more importantly the ordering is not built into the approximation (while histograms are built on ordering). So MCV lists work well even for attributes where the ordering of the data type is disconnected from the meaning of the data. For @@ -53,7 +53,7 @@ Hashed MCV (not yet implemented) Regular MCV lists have to include actual values for each item, so if those items are large the list may be quite large. This is especially true for multivariate MCV lists, although the current implementation partially mitigates this by -performing de-duplicating the values before storing them on disk. +de-duplicating the values before storing them on disk. It's possible to only store hashes (32-bit values) instead of the actual values, significantly reducing the space requirements. Obviously, this would only make @@ -77,14 +77,14 @@ to select the columns from pg_stats. The data is encoded as anyarrays, and all the items have the same data type, so anyarray provides a simple way to get a text representation. -With multivariate MCV lists the columns may use different data types, making +With multivariate MCV lists, the columns may use different data types, making it impossible to use anyarrays. It might be possible to produce a similar array-like representation, but that would complicate further processing and analysis of the MCV list. So instead the MCV lists are stored in a custom data type (pg_mcv_list), which however makes it more difficult to inspect the contents. To make that -easier, there's a SRF returning detailed information about the MCV lists. +easier, there's an SRF returning detailed information about the MCV lists. SELECT m.* FROM pg_statistic_ext s, pg_statistic_ext_data d, -- 2.17.0
>From d8f629c51f70f936fead1d7a6d1b6d485e0f8a35 Mon Sep 17 00:00:00 2001 From: Justin Pryzby <pryz...@telsasoft.com> Date: Sat, 25 Sep 2021 18:40:23 -0500 Subject: [PATCH v2 12/12] fix ext stats exprs references to indexes Expressions on statistics were based on expressional indexes, but a few places were copied and pasted without since being cleaned up. Since a4d75c86bf15220df22de0a92c819ecef9db3849 Backpatch to v14? --- src/backend/commands/tablecmds.c | 4 ++-- src/backend/parser/parse_utilcmd.c | 2 +- src/backend/utils/adt/selfuncs.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 9d2ab31e7e..99f77c36bf 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -12585,13 +12585,13 @@ RememberStatisticsForRebuilding(Oid stxoid, AlteredTableInfo *tab) /* * This de-duplication check is critical for two independent reasons: we * mustn't try to recreate the same statistics object twice, and if the - * statistics depends on more than one column whose type is to be altered, + * statistics object depends on more than one column whose type is to be altered, * we must capture its definition string before applying any of the type * changes. ruleutils.c will get confused if we ask again later. */ if (!list_member_oid(tab->changedStatisticsOids, stxoid)) { - /* OK, capture the index's existing definition string */ + /* OK, capture the statistic object's existing definition string */ char *defstring = pg_get_statisticsobjdef_string(stxoid); tab->changedStatisticsOids = lappend_oid(tab->changedStatisticsOids, diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c index 1d3ee53244..49f617d2fd 100644 --- a/src/backend/parser/parse_utilcmd.c +++ b/src/backend/parser/parse_utilcmd.c @@ -2948,7 +2948,7 @@ transformStatsStmt(Oid relid, CreateStatsStmt *stmt, const char *queryString) if (list_length(pstate->p_rtable) != 1) ereport(ERROR, (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), - errmsg("statistics expressions can refer only to the table being indexed"))); + errmsg("statistics expressions can refer only to the table being referenced"))); free_parsestate(pstate); diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 65ab651eb5..abcb628a39 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -5252,7 +5252,7 @@ examine_variable(PlannerInfo *root, Node *node, int varRelid, { HeapTuple t = statext_expressions_load(info->statOid, pos); - /* Get index's table for permission check */ + /* Get statistic object's table for permission check */ RangeTblEntry *rte; Oid userid; -- 2.17.0