users/rhaas/postgres.git
4 years agoRestore the portal-level snapshot after procedure COMMIT/ROLLBACK.
Tom Lane [Fri, 21 May 2021 18:03:53 +0000 (14:03 -0400)]
Restore the portal-level snapshot after procedure COMMIT/ROLLBACK.

COMMIT/ROLLBACK necessarily destroys all snapshots within the session.
The original implementation of intra-procedure transactions just
cavalierly did that, ignoring the fact that this left us executing in
a rather different environment than normal.  In particular, it turns
out that handling of toasted datums depends rather critically on there
being an outer ActiveSnapshot: otherwise, when SPI or the core
executor pop whatever snapshot they used and return, it's unsafe to
dereference any toasted datums that may appear in the query result.
It's possible to demonstrate "no known snapshots" and "missing chunk
number N for toast value" errors as a result of this oversight.

Historically this outer snapshot has been held by the Portal code,
and that seems like a good plan to preserve.  So add infrastructure
to pquery.c to allow re-establishing the Portal-owned snapshot if it's
not there anymore, and add enough bookkeeping support that we can tell
whether it is or not.

We can't, however, just re-establish the Portal snapshot as part of
COMMIT/ROLLBACK.  As in normal transaction start, acquiring the first
snapshot should wait until after SET and LOCK commands.  Hence, teach
spi.c about doing this at the right time.  (Note that this patch
doesn't fix the problem for any PLs that try to run intra-procedure
transactions without using SPI to execute SQL commands.)

This makes SPI's no_snapshots parameter rather a misnomer, so in HEAD,
rename that to allow_nonatomic.

replication/logical/worker.c also needs some fixes, because it wasn't
careful to hold a snapshot open around AFTER trigger execution.
That code doesn't use a Portal, which I suspect someday we're gonna
have to fix.  But for now, just rearrange the order of operations.
This includes back-patching the recent addition of finish_estate()
to centralize the cleanup logic there.

This also back-patches commit 2ecfeda3e into v13, to improve the
test coverage for worker.c (it was that test that exposed that
worker.c's snapshot management is wrong).

Per bug #15990 from Andreas Wicht.  Back-patch to v11 where
intra-procedure COMMIT was added.

Discussion: https://postgr.es/m/15990-eee2ac466b11293d@postgresql.org

4 years agoPut some psql documentation pieces back into alphabetical order
Peter Eisentraut [Fri, 21 May 2021 15:10:09 +0000 (17:10 +0200)]
Put some psql documentation pieces back into alphabetical order

4 years agoFix deadlock for multiple replicating truncates of the same table.
Amit Kapila [Fri, 21 May 2021 02:24:27 +0000 (07:54 +0530)]
Fix deadlock for multiple replicating truncates of the same table.

While applying the truncate change, the logical apply worker acquires
RowExclusiveLock on the relation being truncated. This allowed truncate on
the relation at a time by two apply workers which lead to a deadlock. The
reason was that one of the workers after updating the pg_class tuple tries
to acquire SHARE lock on the relation and started to wait for the second
worker which has acquired RowExclusiveLock on the relation. And when the
second worker tries to update the pg_class tuple, it starts to wait for
the first worker which leads to a deadlock. Fix it by acquiring
AccessExclusiveLock on the relation before applying the truncate change as
we do for normal truncate operation.

Author: Peter Smith, test case by Haiying Tang
Reviewed-by: Dilip Kumar, Amit Kapila
Backpatch-through: 11
Discussion: https://postgr.es/m/CAHut+PsNm43p0jM+idTvWwiGZPcP0hGrHMPK9TOAkc+a4UpUqw@mail.gmail.com

4 years agoAvoid detoasting failure after COMMIT inside a plpgsql FOR loop.
Tom Lane [Thu, 20 May 2021 22:32:37 +0000 (18:32 -0400)]
Avoid detoasting failure after COMMIT inside a plpgsql FOR loop.

exec_for_query() normally tries to prefetch a few rows at a time
from the query being iterated over, so as to reduce executor
entry/exit overhead.  Unfortunately this is unsafe if we have
COMMIT or ROLLBACK within the loop, because there might be
TOAST references in the data that we prefetched but haven't
yet examined.  Immediately after the COMMIT/ROLLBACK, we have
no snapshots in the session, meaning that VACUUM is at liberty
to remove recently-deleted TOAST rows.

This was originally reported as a case triggering the "no known
snapshots" error in init_toast_snapshot(), but even if you miss
hitting that, you can get "missing toast chunk", as illustrated
by the added isolation test case.

To fix, just disable prefetching in non-atomic contexts.  Maybe
there will be performance complaints prompting us to work harder
later, but it's not clear at the moment that this really costs
much, and I doubt we'd want to back-patch any complicated fix.

In passing, adjust that error message in init_toast_snapshot()
to be a little clearer about the likely cause of the problem.

Patch by me, based on earlier investigation by Konstantin Knizhnik.

Per bug #15990 from Andreas Wicht.  Back-patch to v11 where
intra-procedure COMMIT was added.

Discussion: https://postgr.es/m/15990-eee2ac466b11293d@postgresql.org

4 years agodoc: change PG 14 relnotes as suggested by Justin Pryzby
Bruce Momjian [Thu, 20 May 2021 19:50:46 +0000 (15:50 -0400)]
doc:  change PG 14 relnotes as suggested by Justin Pryzby

4 years agoInstall PostgresVersion.pm
Andrew Dunstan [Thu, 20 May 2021 19:11:17 +0000 (15:11 -0400)]
Install PostgresVersion.pm

A lamentable oversight on my part meant that when PostgresVersion.pm was
added in commit 4c4eaf3d19 provision to install it was not added to the
Makefile, so it was not installed along with the other perl modules.

4 years agoClean up cpluspluscheck violation.
Tom Lane [Thu, 20 May 2021 17:03:08 +0000 (13:03 -0400)]
Clean up cpluspluscheck violation.

"typename" is a C++ keyword, so pg_upgrade.h fails to compile in C++.
Fortunately, there seems no likely reason for somebody to need to
do that.  Nonetheless, it's project policy that all .h files should
pass cpluspluscheck, so rename the argument to fix that.

Oversight in 57c081de0; back-patch as that was.  (The policy requiring
pg_upgrade.h to pass cpluspluscheck only goes back to v12, but it
seems best to keep this code looking the same in all branches.)

4 years agoUse a more portable way to get the version string in PostgresNode
Andrew Dunstan [Thu, 20 May 2021 12:03:15 +0000 (08:03 -0400)]
Use a more portable way to get the version string in PostgresNode

Older versions of perl on Windows don't like the list form of pipe open,
and perlcritic doesn't like the string form of open, so we avoid both
with a simpler formulation using qx{}.

Per complaint from Amit Kapila.

4 years agoAvoid creating testtablespace directories where not wanted.
Tom Lane [Wed, 19 May 2021 18:04:01 +0000 (14:04 -0400)]
Avoid creating testtablespace directories where not wanted.

Recently we refactored things so that pg_regress makes the
"testtablespace" subdirectory used by the core regression tests,
instead of doing that in the makefiles.  That had the undesirable
side effect of making such a subdirectory in every directory that
has "input" or "output" test files.  Since these subdirectories
remain empty, git doesn't complain about them, but nonetheless
they're clutter.

To fix, invent an explicit --make-testtablespace-dir switch,
so that pg_regress only makes the subdirectory when explicitly
told to.

Discussion: https://postgr.es/m/2854388.1621284789@sss.pgh.pa.us

4 years agodoc: revert 1e7d53bd01 so libpq chapter number is accessable
Bruce Momjian [Wed, 19 May 2021 15:22:21 +0000 (11:22 -0400)]
doc:  revert 1e7d53bd01 so libpq chapter number is accessable

Fix PG 14 relnotes to use <link> instead of <xref>.  This was discussed
in commit message 59fa7eb603.

4 years agodoc: add xreflabel for libpq chapter, needed for PG 14 relnotes
Bruce Momjian [Wed, 19 May 2021 15:01:28 +0000 (11:01 -0400)]
doc:  add xreflabel for libpq chapter, needed for PG 14 relnotes

4 years agoFix pgbench permute tests.
Dean Rasheed [Wed, 19 May 2021 11:50:58 +0000 (12:50 +0100)]
Fix pgbench permute tests.

One of the tests for the pgbench permute() function added by
6b258e3d68 fails on some 32-bit platforms, due to variations in the
floating point computations in getrand(). The remaining tests give
sufficient coverage, so just remove the failing test.

Reported by Christoph Berg. Analysis by Thomas Munro and Tom Lane.
Based on patch by Fabien Coelho.

Discussion: https://postgr.es/m/YKQnUoYV63GRJBDD@msg.df7cb.de

4 years agoMake standby promotion reset the recovery pause state to 'not paused'.
Fujii Masao [Wed, 19 May 2021 04:48:19 +0000 (13:48 +0900)]
Make standby promotion reset the recovery pause state to 'not paused'.

If a promotion is triggered while recovery is paused, the paused state ends
and promotion continues. But previously in that case
pg_get_wal_replay_pause_state() returned 'paused' wrongly while a promotion
was ongoing.

This commit changes a standby promotion so that it marks the recovery
pause state as 'not paused' when it's triggered, to fix the issue.

Author: Fujii Masao
Reviewed-by: Dilip Kumar, Kyotaro Horiguchi
Discussion: https://postgr.es/m/f706876c-4894-0ba5-6f4d-79803eeea21b@oss.nttdata.com

4 years agoFix 020_messages.pl test.
Amit Kapila [Wed, 19 May 2021 03:24:46 +0000 (08:54 +0530)]
Fix 020_messages.pl test.

We were not waiting for a publisher to catch up with the subscriber after
creating a subscription. Now, it can happen that apply worker starts
replication even after we have disabled the subscription in the test. This
will make the test expect that there is no active slot whereas there
exists one. Fix this symptom by allowing the publisher to wait for
catching up with the subscription.

It is not a good idea to ensure if the slot is still active by checking
for walsender existence as we release the slot after we clean up the
walsender related memory. Fix that by checking the slot status in
pg_replication_slots.

Also, it is better to avoid repeated enabling/disabling of the
subscription.

Finally, we make autovacuum off for this test to avoid any empty
transaction appearing in the test while consuming changes.

Reported-by: as per buildfarm
Author: Vignesh C
Reviewed-by: Amit Kapila, Michael Paquier
Discussion: https://postgr.es/m/CAA4eK1+uW1UGDHDz-HWMHMen76mKP7NJebOTZN4uwbyMjaYVww@mail.gmail.com

4 years agodoc: partial completion of XML markup for PG 14 release notes
Bruce Momjian [Wed, 19 May 2021 03:21:47 +0000 (23:21 -0400)]
doc:  partial completion of XML markup for PG 14 release notes

4 years agoFix issues in pg_stat_wal.
Fujii Masao [Wed, 19 May 2021 02:38:34 +0000 (11:38 +0900)]
Fix issues in pg_stat_wal.

1) Previously there were both pgstat_send_wal() and pgstat_report_wal()
   in order to send WAL activity to the stats collector. With the former being
   used by wal writer, the latter by most other processes. They were a bit
   redundant and so this commit merges them into pgstat_send_wal() to
   simplify the code.

2) Previously WAL global statistics counters were calculated and then
   compared with zero-filled buffer in order to determine whether any WAL
   activity has happened since the last submission. These calculation and
   comparison were not cheap. This was regularly exercised even in read-only
   workloads. This commit fixes the issue by making some WAL activity
   counters directly be checked to determine if there's WAL activity stats
   to send.

3) Previously pgstat_report_stat() did not check if there's WAL activity
   stats to send as part of the "Don't expend a clock check if nothing to do"
   check at the top. It's probably rare to have pending WAL stats without
   also passing one of the other conditions, but for safely this commit
   changes pgstat_report_stats() so that it checks also some WAL activity
   counters at the top.

This commit also adds the comments about the design of WAL stats.

Reported-by: Andres Freund
Author: Masahiro Ikeda
Reviewed-by: Kyotaro Horiguchi, Atsushi Torikoshi, Andres Freund, Fujii Masao
Discussion: https://postgr.es/m/20210324232224.vrfiij2rxxwqqjjb@alap3.anarazel.de

4 years agoAdd --no-toast-compression to pg_dumpall
Michael Paquier [Wed, 19 May 2021 00:38:48 +0000 (09:38 +0900)]
Add --no-toast-compression to pg_dumpall

This is an oversight from bbe0a81d, where the equivalent option exists
in pg_dump.  This is useful to be able to reset the compression methods
cluster-wide when restoring the data based on default_toast_compression.

Reviewed-by: Daniel Gustafsson, Tom Lane
Discussion: https://postgr.es/m/YKHC+qCJvzCRVCpY@paquier.xyz

4 years agodoc: add PG 14 rel item about vacuum_cleanup_index_scale_factor
Bruce Momjian [Tue, 18 May 2021 19:17:44 +0000 (15:17 -0400)]
doc:  add PG 14 rel item about vacuum_cleanup_index_scale_factor

4 years agoFix typo and outdated information in README.barrier
David Rowley [Mon, 17 May 2021 21:54:56 +0000 (09:54 +1200)]
Fix typo and outdated information in README.barrier

README.barrier didn't seem to get the memo when atomics were added. Fix
that.

Author: Tatsuo Ishii, David Rowley
Discussion: https://postgr.es/m/20210516.211133.2159010194908437625.t-ishii%40sraoss.co.jp
Backpatch-through: 9.6, oldest supported release

4 years agoStamp 14beta1.
Tom Lane [Mon, 17 May 2021 20:11:18 +0000 (16:11 -0400)]
Stamp 14beta1.

4 years agoRemove obsolete reference to winflex download
Magnus Hagander [Mon, 17 May 2021 19:54:36 +0000 (21:54 +0200)]
Remove obsolete reference to winflex download

We used to distribute a binary version of flex for windows on our
download site, but it hasn't been working for many years. The "old
documentation" referenced was also for versions that have been EOL for
many years. So, remove it.

Discussion: https://postgr.es/m/CABUevEwXLJpVpab62f7AFXNWQ5=U0kvErCLq4VEsikidLyzSQg@mail.gmail.com

4 years agodoc: PG 14 relnotes adjustments from Fujii Masao
Bruce Momjian [Mon, 17 May 2021 18:05:05 +0000 (14:05 -0400)]
doc:  PG 14 relnotes adjustments from Fujii Masao

4 years agoTranslation updates
Peter Eisentraut [Mon, 17 May 2021 12:30:27 +0000 (14:30 +0200)]
Translation updates

Source-Git-URL: git://git.postgresql.org/git/pgtranslation/messages.git
Source-Git-Hash: 9bbd9c3714d0c76daaa806588b1fbf744aa60496

4 years agoFix wording in description of pg_stat_statements.toplevel
Magnus Hagander [Mon, 17 May 2021 08:59:54 +0000 (10:59 +0200)]
Fix wording in description of pg_stat_statements.toplevel

Incorrect wording got applied in 7531fcb1fcf.

Reported-By: Fujii Masao
Discussion: https://postgr.es/m/e5512912-eac9-b163-df2b-e2601ce06d27@oss.nttdata.com

4 years agoDoc: Update documentation for asynchronous execution.
Etsuro Fujita [Mon, 17 May 2021 08:30:00 +0000 (17:30 +0900)]
Doc: Update documentation for asynchronous execution.

Add a note of caution on the performance of asynchronous execution by
postgres_fdw.  Follow-up for commit 27e1f1456.

Stephen Frost, a little bit expanded by me.

Discussion: https://postgr.es/m/20210506171224.GV20766%40tamriel.snowman.net

4 years agodoc: update PG 14 relnotes from feedback by Tom, Alvaro, Julien
Bruce Momjian [Mon, 17 May 2021 03:34:50 +0000 (23:34 -0400)]
doc: update PG 14 relnotes from feedback by Tom, Alvaro, Julien

4 years agodoc: remove XML comments around compute_query_id PG14 rel text
Bruce Momjian [Sat, 15 May 2021 21:30:45 +0000 (17:30 -0400)]
doc:  remove XML comments around compute_query_id PG14 rel text

4 years agodoc: update PG 14 release notes for compute_query_id change
Bruce Momjian [Sat, 15 May 2021 21:26:26 +0000 (17:26 -0400)]
doc: update PG 14 release notes for compute_query_id change

Also remove ALTER TYPE ...SUBSCRIPT, and update for all current commits.

4 years agoUnbreak EXEC_BACKEND build
Alvaro Herrera [Sat, 15 May 2021 19:17:15 +0000 (15:17 -0400)]
Unbreak EXEC_BACKEND build

Per buildfarm

4 years agoAllow compute_query_id to be set to 'auto' and make it default
Alvaro Herrera [Sat, 15 May 2021 18:13:09 +0000 (14:13 -0400)]
Allow compute_query_id to be set to 'auto' and make it default

Allowing only on/off meant that all either all existing configuration
guides would become obsolete if we disabled it by default, or that we
would have to accept a performance loss in the default config if we
enabled it by default.  By allowing 'auto' as a middle ground, the
performance cost is only paid by those who enable pg_stat_statements and
similar modules.

I only edited the release notes to comment-out a paragraph that is now
factually wrong; further edits are probably needed to describe the
related change in more detail.

Author: Julien Rouhaud <rjuju123@gmail.com>
Reviewed-by: Justin Pryzby <pryzby@telsasoft.com>
Discussion: https://postgr.es/m/20210513002623.eugftm4nk2lvvks3@nol

4 years agoBe more careful about barriers when releasing BackgroundWorkerSlots.
Tom Lane [Sat, 15 May 2021 16:21:06 +0000 (12:21 -0400)]
Be more careful about barriers when releasing BackgroundWorkerSlots.

ForgetBackgroundWorker lacked any memory barrier at all, while
BackgroundWorkerStateChange had one but unaccountably did
additional manipulation of the slot after the barrier.  AFAICS,
the rule must be that the barrier is immediately before setting
or clearing slot->in_use.

It looks like back in 9.6 when ForgetBackgroundWorker was first
written, there might have been some case for not needing a
barrier there, but I'm not very convinced of that --- the fact
that the load of bgw_notify_pid is in the caller doesn't seem
to guarantee no memory ordering problem.  So patch 9.6 too.

It's likely that this doesn't fix any observable bug on Intel
hardware, but machines with weaker memory ordering rules could
have problems here.

Discussion: https://postgr.es/m/4046084.1620244003@sss.pgh.pa.us

4 years agoHarden nbtree deduplication posting split code.
Peter Geoghegan [Fri, 14 May 2021 22:08:02 +0000 (15:08 -0700)]
Harden nbtree deduplication posting split code.

Add a defensive "can't happen" error to code that handles nbtree posting
list splits (promote an existing assertion).  This avoids a segfault in
the event of an insertion of a newitem that is somehow identical to an
existing non-pivot tuple in the index.  An nbtree index should never
have two index tuples with identical TIDs.

This scenario is not particular unlikely in the event of any kind of
corruption that leaves the index in an inconsistent state relative to
the heap relation that is indexed.  There are two known reports of
preventable hard crashes.  Doing nothing seems unacceptable given the
general expectation that nbtree will cope reasonably well with corrupt
data.

Discussion: https://postgr.es/m/CAH2-Wz=Jr_d-dOYEEmwz0-ifojVNWho01eAqewfQXgKfoe114w@mail.gmail.com
Backpatch: 13-, where nbtree deduplication was introduced.

4 years agoPrevent infinite insertion loops in spgdoinsert().
Tom Lane [Fri, 14 May 2021 19:07:34 +0000 (15:07 -0400)]
Prevent infinite insertion loops in spgdoinsert().

Formerly we just relied on operator classes that assert longValuesOK
to eventually shorten the leaf value enough to fit on an index page.
That fails since the introduction of INCLUDE-column support (commit
09c1c6ab4), because the INCLUDE columns might alone take up more
than a page, meaning no amount of leaf-datum compaction will get
the job done.  At least with spgtextproc.c, that leads to an infinite
loop, since spgtextproc.c won't throw an error for not being able
to shorten the leaf datum anymore.

To fix without breaking cases that would otherwise work, add logic
to spgdoinsert() to verify that the leaf tuple size is decreasing
after each "choose" step.  Some opclasses might not decrease the
size on every single cycle, and in any case, alignment roundoff
of the tuple size could obscure small gains.  Therefore, allow
up to 10 cycles without additional savings before throwing an
error.  (Perhaps this number will need adjustment, but it seems
quite generous right now.)

As long as we've developed this logic, let's back-patch it.
The back branches don't have INCLUDE columns to worry about, but
this seems like a good defense against possible bugs in operator
classes.  We already know that an infinite loop here is pretty
unpleasant, so having a defense seems to outweigh the risk of
breaking things.  (Note that spgtextproc.c is actually the only
known opclass with longValuesOK support, so that this is all moot
for known non-core opclasses anyway.)

Per report from Dilip Kumar.

Discussion: https://postgr.es/m/CAFiTN-uxP_soPhVG840tRMQTBmtA_f_Y8N51G7DKYYqDh7XN-A@mail.gmail.com

4 years agoFix query-cancel handling in spgdoinsert().
Tom Lane [Fri, 14 May 2021 17:26:55 +0000 (13:26 -0400)]
Fix query-cancel handling in spgdoinsert().

Knowing that a buggy opclass could cause an infinite insertion loop,
spgdoinsert() intended to allow its loop to be interrupted by query
cancel.  However, that never actually worked, because in iterations
after the first, we'd be holding buffer lock(s) which would cause
InterruptHoldoffCount to be positive, preventing servicing of the
interrupt.

To fix, check if an interrupt is pending, and if so fall out of
the insertion loop and service the interrupt after we've released
the buffers.  If it was indeed a query cancel, that's the end of
the matter.  If it was a non-canceling interrupt reason, make use
of the existing provision to retry the whole insertion.  (This isn't
as wasteful as it might seem, since any upper-level index tuples we
already created should be usable in the next attempt.)

While there's no known instance of such a bug in existing release
branches, it still seems like a good idea to back-patch this to
all supported branches, since the behavior is fairly nasty if a
loop does happen --- not only is it uncancelable, but it will
quickly consume memory to the point of an OOM failure.  In any
case, this code is certainly not working as intended.

Per report from Dilip Kumar.

Discussion: https://postgr.es/m/CAFiTN-uxP_soPhVG840tRMQTBmtA_f_Y8N51G7DKYYqDh7XN-A@mail.gmail.com

4 years agoRefactor CHECK_FOR_INTERRUPTS() to add flexibility.
Tom Lane [Fri, 14 May 2021 16:54:26 +0000 (12:54 -0400)]
Refactor CHECK_FOR_INTERRUPTS() to add flexibility.

Split up CHECK_FOR_INTERRUPTS() to provide an additional macro
INTERRUPTS_PENDING_CONDITION(), which just tests whether an
interrupt is pending without attempting to service it.  This is
useful in situations where the caller knows that interrupts are
blocked, and would like to find out if it's worth the trouble
to unblock them.

Also add INTERRUPTS_CAN_BE_PROCESSED(), which indicates whether
CHECK_FOR_INTERRUPTS() can be relied on to clear the pending interrupt.

This commit doesn't actually add any uses of the new macros,
but a follow-on bug fix will do so.  Back-patch to all supported
branches to provide infrastructure for that fix.

Alvaro Herrera and Tom Lane

Discussion: https://postgr.es/m/20210513155351.GA7848@alvherre.pgsql

4 years agoDescribe (auto-)analyze behavior for partitioned tables
Alvaro Herrera [Fri, 14 May 2021 17:10:52 +0000 (13:10 -0400)]
Describe (auto-)analyze behavior for partitioned tables

This explains the new behavior introduced by 0827e8af70f4 as well as
preexisting.

Author: Justin Pryzby <pryzby@telsasoft.com>
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
Discussion: https://postgr.es/m/20210423180152.GA17270@telsasoft.com

4 years agodoc: update PG 14 release notes with recent feedback
Bruce Momjian [Fri, 14 May 2021 17:01:03 +0000 (13:01 -0400)]
doc:  update PG 14 release notes with recent feedback

Reported-by: Justin Pryzby
Discussion: https://postgr.es/m/20210514020141.GQ27406@telsasoft.com

4 years agoMessage style improvements
Peter Eisentraut [Fri, 14 May 2021 08:21:28 +0000 (10:21 +0200)]
Message style improvements

4 years agodoc: PG 14 release notes, reorder items by significance
Bruce Momjian [Fri, 14 May 2021 01:16:34 +0000 (21:16 -0400)]
doc: PG 14 release notes, reorder items by significance

4 years agoConvert misleading while loop into an if condition
David Rowley [Fri, 14 May 2021 00:26:11 +0000 (12:26 +1200)]
Convert misleading while loop into an if condition

This seems to be leftover from ea15e1867 and from when we used to evaluate
SRFs at each node.

Since there is an unconditional "return" at the end of the loop body, only
1 loop is ever possible, so we can just change this into an if condition.

There is no actual bug being fixed here so no back-patch. It seems fine to
just fix this anomaly in master only.

Author: Greg Nancarrow
Discussion: https://postgr.es/m/CAJcOf-d7T1q0az-D8evWXnsuBZjigT04WkV5hCAOEJQZRWy28w@mail.gmail.com

4 years agoFix autovacuum log output heap truncation issue.
Peter Geoghegan [Thu, 13 May 2021 23:07:17 +0000 (16:07 -0700)]
Fix autovacuum log output heap truncation issue.

The percentage of blocks from the table value reported by autovacuum log
output (following commit 5100010ee4d) should never exceed 100% because
it describes the state of the table back when lazy_vacuum() was called.
The value could nevertheless exceed 100% in the event of heap relation
truncation.  We failed to compensate for how truncation affects
rel_pages.

Fix the faulty accounting by using the original rel_pages value instead
of the current/final rel_pages value.

Reported-By: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/20210423204306.5osfpkt2ggaedyvy@alap3.anarazel.de

4 years agodoc: PG 14 release notes, adjust updates/deletes on partitions
Bruce Momjian [Thu, 13 May 2021 15:45:43 +0000 (11:45 -0400)]
doc:  PG 14 release notes, adjust updates/deletes on partitions

4 years agoImprove documentation example for jsonpath like_regex operator
Alexander Korotkov [Thu, 13 May 2021 13:10:21 +0000 (16:10 +0300)]
Improve documentation example for jsonpath like_regex operator

Make sample like_regex match string values of the root object instead of the
whole document.  The corrected example seems to represent a more relevant
use case.

Backpatch to 12, when jsonpath was introduced.

Discussion: https://postgr.es/m/13440f8b-4c1f-5875-c8e3-f3f65606af2f%40xs4all.nl
Author: Erik Rijkers
Reviewed-by: Michael Paquier, Alexander Korotkov
Backpatch-through: 12

4 years agoPrevent asynchronous execution of direct foreign-table modifications.
Etsuro Fujita [Thu, 13 May 2021 11:00:00 +0000 (20:00 +0900)]
Prevent asynchronous execution of direct foreign-table modifications.

Commits 27e1f1456 and 86dc90056, which were independently discussed,
cause a crash when executing an inherited foreign UPDATE/DELETE query
with asynchronous execution enabled, where children of an Append node
that is the direct/indirect child of the ModifyTable node are rewritten
so as to modify foreign tables directly by postgresPlanDirectModify();
as in that case the direct modifications are executed asynchronously,
which is not currently supported by asynchronous execution.  Fix by
disabling asynchronous execution of the direct modifications in that
function.

Author: Etsuro Fujita
Reviewed-by: Amit Langote
Discussion: https://postgr.es/m/CAPmGK158e9sJOfuWxfn%2B0ynrspXQU3JhNjSCbaoeSzMvnga%2Bbw%40mail.gmail.com

4 years agopg_amcheck: Message style and formatting improvements
Peter Eisentraut [Thu, 13 May 2021 06:09:53 +0000 (08:09 +0200)]
pg_amcheck: Message style and formatting improvements

4 years agoFix tests for replication slots stats.
Amit Kapila [Thu, 13 May 2021 04:44:07 +0000 (10:14 +0530)]
Fix tests for replication slots stats.

Some of the tests were not considering that the slot's spill stats could be
received by the stats collector after we have reset the stats. Remove
those tests and don't check total bytes decoded and sent to output plugin
in the spilled stats test as we can send the spilled stats to the stats
collector before actually sending the changes to output plugin.

Reported-by: Tom Lane as per buildfarm
Author: Vignesh C, Sawada Masahiko
Reviewed-by: Amit Kapila
Discussion: https://postgr.es/m/20210319185247.ldebgpdaxsowiflw@alap3.anarazel.de

4 years agodoc: update PG 14 release notes based on current feedback
Bruce Momjian [Thu, 13 May 2021 03:34:35 +0000 (23:34 -0400)]
doc:  update PG 14 release notes based on current feedback

4 years agoMake saner the tab completion of INSERT and DELETE in psql
Michael Paquier [Thu, 13 May 2021 00:48:28 +0000 (09:48 +0900)]
Make saner the tab completion of INSERT and DELETE in psql

When specified directly as DML queries, INSERT was not getting always
completed to "INSERT INTO", same for DELETE with "DELETE FROM".  This
makes the completion behavior more consistent for both commands, saving
a few keystrokes.

Commands on policies, triggers, grant/revoke, etc. require only DELETE
as completion keyword.

Author: Haiying Tang
Reviewed-by: Dilip Kumar, Julien Rouhaud
Discussion: https://postgr.es/m/OS0PR01MB61135AE2B07CCD1AB8C6A0F6FB549@OS0PR01MB6113.jpnprd01.prod.outlook.com

4 years agoRename the logical replication global "wrconn"
Alvaro Herrera [Wed, 12 May 2021 23:13:54 +0000 (19:13 -0400)]
Rename the logical replication global "wrconn"

The worker.c global wrconn is only meant to be used by logical apply/
tablesync workers, but there are other variables with the same name. To
reduce future confusion rename the global from "wrconn" to
"LogRepWorkerWalRcvConn".

While this is just cosmetic, it seems better to backpatch it all the way
back to 10 where this code appeared, to avoid future backpatching
issues.

Author: Peter Smith <smithpb2250@gmail.com>
Discussion: https://postgr.es/m/CAHut+Pu7Jv9L2BOEx_Z0UtJxfDevQSAUW2mJqWU+CtmDrEZVAg@mail.gmail.com

4 years agoDouble-space commands in system_constraints.sql/system_functions.sql.
Tom Lane [Wed, 12 May 2021 22:41:39 +0000 (18:41 -0400)]
Double-space commands in system_constraints.sql/system_functions.sql.

Previously, any error reported by the backend while reading
system_constraints.sql would report the entire file, not just the
particular command it was working on.  (Ask me how I know.)  Likewise,
there were chunks of system_functions.sql that would be read as one
command, which would be annoying if anything failed there.

The issue for system_constraints.sql is an oversight in commit
dfb75e478.  I didn't try to trace down where the poor formatting
in system_functions.sql started, but it's certainly contrary to
the advice at the head of that file.

4 years agoDoc: update bki.sgml's statements about OID ranges.
Tom Lane [Wed, 12 May 2021 21:41:07 +0000 (17:41 -0400)]
Doc: update bki.sgml's statements about OID ranges.

Commit ab596105b neglected to make the docs match the code.

4 years agoDo pre-release housekeeping on catalog data.
Tom Lane [Wed, 12 May 2021 17:36:06 +0000 (13:36 -0400)]
Do pre-release housekeeping on catalog data.

Run renumber_oids.pl to move high-numbered OIDs down, as per pre-beta
tasks specified by RELEASE_CHANGES.  For reference, the command was
./renumber_oids.pl --first-mapped-oid 8000 --target-oid 6150

4 years agoInitial pgindent and pgperltidy run for v14.
Tom Lane [Wed, 12 May 2021 17:14:10 +0000 (13:14 -0400)]
Initial pgindent and pgperltidy run for v14.

Also "make reformat-dat-files".

The only change worthy of note is that pgindent messed up the formatting
of launcher.c's struct LogicalRepWorkerId, which led me to notice that
that struct wasn't used at all anymore, so I just took it out.

4 years agoSimplify one use of ScanKey in pg_subscription.c
Michael Paquier [Wed, 12 May 2021 05:54:02 +0000 (14:54 +0900)]
Simplify one use of ScanKey in pg_subscription.c

The section of the code in charge of returning all the relations
associated to a subscription only need one ScanKey, but allocated two of
them.  This code was introduced as a copy-paste from a different area on
the same file by 7c4f524, making the result confusing to follow.

Author: Peter Smith
Reviewed-by: Tom Lane, Julien Rouhaud, Bharath Rupireddy
Discussion: https://postgr.es/m/CAHut+PsLKe+rN3FjchoJsd76rx2aMsFTB7CTFxRgUP05p=kcpQ@mail.gmail.com

4 years agoRefactor some error messages for easier translation
Peter Eisentraut [Wed, 12 May 2021 05:20:10 +0000 (07:20 +0200)]
Refactor some error messages for easier translation

4 years agoFix EXPLAIN ANALYZE for async-capable nodes.
Etsuro Fujita [Wed, 12 May 2021 05:00:00 +0000 (14:00 +0900)]
Fix EXPLAIN ANALYZE for async-capable nodes.

EXPLAIN ANALYZE for an async-capable ForeignScan node associated with
postgres_fdw is done just by using instrumentation for ExecProcNode()
called from the node's callbacks, causing the following problems:

1) If the remote table to scan is empty, the node is incorrectly
   considered as "never executed" by the command even if the node is
   executed, as ExecProcNode() isn't called from the node's callbacks at
   all in that case.
2) The command fails to collect timings for things other than
   ExecProcNode() done in the node, such as creating a cursor for the
   node's remote query.

To fix these problems, add instrumentation for async-capable nodes, and
modify postgres_fdw accordingly.

My oversight in commit 27e1f1456.

While at it, update a comment for the AsyncRequest struct in execnodes.h
and the documentation for the ForeignAsyncRequest API in fdwhandler.sgml
to match the code in ExecAsyncAppendResponse() in nodeAppend.c, and fix
typos in comments in nodeAppend.c.

Per report from Andrey Lepikhov, though I didn't use his patch.

Reviewed-by: Andrey Lepikhov
Discussion: https://postgr.es/m/2eb662bb-105d-fc20-7412-2f027cc3ca72%40postgrespro.ru

4 years agoReduce runtime of privileges.sql test under CLOBBER_CACHE_ALWAYS.
Tom Lane [Wed, 12 May 2021 00:59:45 +0000 (20:59 -0400)]
Reduce runtime of privileges.sql test under CLOBBER_CACHE_ALWAYS.

Several queries in the privileges regression test cause the planner
to apply the plpgsql function "leak()" to every element of the
histogram for atest12.b.  Since commit 0c882e52a increased the size
of that histogram to 10000 entries, the test invokes that function
over 100000 times, which takes an absolutely unreasonable amount of
time in clobber-cache-always mode.

However, there's no real reason why that has to be a plpgsql
function: for the purposes of this test, all that matters is that
it not be marked leakproof.  So we can replace the plpgsql
implementation with a direct call of int4lt, which has the same
behavior and is orders of magnitude faster.  This is expected to
cut several hours off the buildfarm cycle time for CCA animals.
It has some positive impact in normal builds too, though that's
probably lost in the noise.

Back-patch to v13 where 0c882e52a came in.

Discussion: https://postgr.es/m/575884.1620626638@sss.pgh.pa.us

4 years agoChange data type of counters in BufferUsage and WalUsage from long to int64.
Fujii Masao [Wed, 12 May 2021 00:56:34 +0000 (09:56 +0900)]
Change data type of counters in BufferUsage and WalUsage from long to int64.

Previously long was used as the data type for some counters in BufferUsage
and WalUsage. But long is only four byte, e.g., on Windows, and it's entirely
possible to wrap a four byte counter. For example, emitting more than
four billion WAL records in one transaction isn't actually particularly rare.

To avoid the overflows of those counters, this commit changes the data type
of them from long to int64.

Suggested-by: Andres Freund
Author: Masahiro Ikeda
Reviewed-by: Fujii Masao
Discussion: https://postgr.es/m/20201221211650.k7b53tcnadrciqjo@alap3.anarazel.de
Discussion: https://postgr.es/m/af0964ac-7080-1984-dc23-513754987716@oss.nttdata.com

4 years agoTweak generation of Gen_dummy_probes.pl
Andrew Dunstan [Wed, 12 May 2021 00:02:02 +0000 (20:02 -0400)]
Tweak generation of Gen_dummy_probes.pl

Use a static prolog file instead of generating the prolog from the
existing perl script. Also, support generation of the file in a vpath
build.

Discussion: https://postgr.es/m/700620.1620662868@sss.pgh.pa.us

4 years agoFix vcregress.pl's ancient misspelling of --max-connections.
Tom Lane [Tue, 11 May 2021 23:17:07 +0000 (19:17 -0400)]
Fix vcregress.pl's ancient misspelling of --max-connections.

I copied the existing spelling of "--max_connections", but
that's just wrong :-(.  Evidently setting $ENV{MAX_CONNECTIONS}
has never actually worked in this script.  Given the lack of
complaints, it's probably not worth back-patching a fix.

Per buildfarm.

Discussion: https://postgr.es/m/899209.1620759506@sss.pgh.pa.us

4 years agoGet rid of the separate serial_schedule list of tests.
Tom Lane [Tue, 11 May 2021 21:52:04 +0000 (17:52 -0400)]
Get rid of the separate serial_schedule list of tests.

Having to maintain two lists of regression test scripts has proven
annoyingly error-prone.  We can achieve the effect of the
serial_schedule by running the parallel_schedule with
"--max_connections=1"; so do that and remove serial_schedule.

This causes cosmetic differences in the progress output, but it
doesn't seem worth restructuring pg_regress to avoid that.

Discussion: https://postgr.es/m/899209.1620759506@sss.pgh.pa.us

4 years agodoc: update PG 14 release notes based on feedback
Bruce Momjian [Tue, 11 May 2021 21:40:44 +0000 (17:40 -0400)]
doc:  update PG 14 release notes based on feedback

4 years agoReplace opr_sanity test's binary_coercible() function with C code.
Tom Lane [Tue, 11 May 2021 18:28:11 +0000 (14:28 -0400)]
Replace opr_sanity test's binary_coercible() function with C code.

opr_sanity's binary_coercible() function has always been meant
to match the parser's notion of binary coercibility, but it also
has always been a rather poor approximation of the parser's
real rules (as embodied in IsBinaryCoercible()).  That hasn't
bit us so far, but it's predictable that it will eventually.

It also now emerges that implementing this check in plpgsql
performs absolutely horribly in clobber-cache-always testing.
(Perhaps we could do something about that, but I suspect it just
means that plpgsql is exploiting catalog caching to the hilt.)

Hence, let's replace binary_coercible() with a C shim that directly
invokes IsBinaryCoercible(), eliminating both the semantic hazard
and the performance issue.

Most of regress.c's C functions are declared in create_function_1,
but we can't simply move that to before opr_sanity/type_sanity
since those tests would complain about the resulting shell types.
I chose to split it into create_function_0 and create_function_1.
Since create_function_0 now runs as part of a parallel group while
create_function_1 doesn't, reduce the latter to create just those
functions that opr_sanity and type_sanity would whine about.

To make room for create_function_0 in the second parallel group
of tests, move tstypes to the third parallel group.

In passing, clean up some ordering deviations between
parallel_schedule and serial_schedule.

Discussion: https://postgr.es/m/292305.1620503097@sss.pgh.pa.us

4 years agoFix typo
Peter Eisentraut [Tue, 11 May 2021 07:06:49 +0000 (09:06 +0200)]
Fix typo

4 years agodoc: update PG 14 release notes based on feedback so far
Bruce Momjian [Tue, 11 May 2021 03:56:32 +0000 (23:56 -0400)]
doc:  update PG 14 release notes based on feedback so far

4 years agoDoc: Remove outdated note about run-time partition pruning
David Rowley [Tue, 11 May 2021 03:55:33 +0000 (15:55 +1200)]
Doc: Remove outdated note about run-time partition pruning

The note is no longer true as of 86dc90056, so remove it.

Author: Amit Langote
Discussion: https://postgr.es/m/CA+HiwqFxQn7Hz1wT+wYgnf_9SK0c4BwOOwFFT8jcSZwJrd8HEA@mail.gmail.com

4 years agoAdd support for LZ4 build in MSVC scripts
Michael Paquier [Tue, 11 May 2021 01:43:05 +0000 (10:43 +0900)]
Add support for LZ4 build in MSVC scripts

Since its introduction in bbe0a81, compression of table data supports
LZ4, but nothing had been done within the MSVC scripts to allow users to
build the code with this library.

This commit closes the gap by extending the MSVC scripts to be able to
build optionally with LZ4.  Getting libraries that can be used for
compilation and execution is possible as LZ4 can be compiled down to
MSVC 2010 using its source tarball.  MinGW may require extra efforts to
be able to work, and I have been able to test this only with MSVC, still
this is better than nothing to give users a way to test the feature on
Windows.

Author: Dilip Kumar
Reviewed-by: Michael Paquier
Discussion: https://postgr.es/m/YJPdNeF68XpwDDki@paquier.xyz

4 years agoFix mishandling of resjunk columns in ON CONFLICT ... UPDATE tlists.
Tom Lane [Mon, 10 May 2021 15:02:29 +0000 (11:02 -0400)]
Fix mishandling of resjunk columns in ON CONFLICT ... UPDATE tlists.

It's unusual to have any resjunk columns in an ON CONFLICT ... UPDATE
list, but it can happen when MULTIEXPR_SUBLINK SubPlans are present.
If it happens, the ON CONFLICT UPDATE code path would end up storing
tuples that include the values of the extra resjunk columns.  That's
fairly harmless in the short run, but if new columns are added to
the table then the values would become accessible, possibly leading
to malfunctions if they don't match the datatypes of the new columns.

This had escaped notice through a confluence of missing sanity checks,
including

* There's no cross-check that a tuple presented to heap_insert or
heap_update matches the table rowtype.  While it's difficult to
check that fully at reasonable cost, we can easily add assertions
that there aren't too many columns.

* The output-column-assignment cases in execExprInterp.c lacked
any sanity checks on the output column numbers, which seems like
an oversight considering there are plenty of assertion checks on
input column numbers.  Add assertions there too.

* We failed to apply nodeModifyTable's ExecCheckPlanOutput() to
the ON CONFLICT UPDATE tlist.  That wouldn't have caught this
specific error, since that function is chartered to ignore resjunk
columns; but it sure seems like a bad omission now that we've seen
this bug.

In HEAD, the right way to fix this is to make the processing of
ON CONFLICT UPDATE tlists work the same as regular UPDATE tlists
now do, that is don't add "SET x = x" entries, and use
ExecBuildUpdateProjection to evaluate the tlist and combine it with
old values of the not-set columns.  This adds a little complication
to ExecBuildUpdateProjection, but allows removal of a comparable
amount of now-dead code from the planner.

In the back branches, the most expedient solution seems to be to
(a) use an output slot for the ON CONFLICT UPDATE projection that
actually matches the target table, and then (b) invent a variant of
ExecBuildProjectionInfo that can be told to not store values resulting
from resjunk columns, so it doesn't try to store into nonexistent
columns of the output slot.  (We can't simply ignore the resjunk columns
altogether; they have to be evaluated for MULTIEXPR_SUBLINK to work.)
This works back to v10.  In 9.6, projections work much differently and
we can't cheaply give them such an option.  The 9.6 version of this
patch works by inserting a JunkFilter when it's necessary to get rid
of resjunk columns.

In addition, v11 and up have the reverse problem when trying to
perform ON CONFLICT UPDATE on a partitioned table.  Through a
further oversight, adjust_partition_tlist() discarded resjunk columns
when re-ordering the ON CONFLICT UPDATE tlist to match a partition.
This accidentally prevented the storing-bogus-tuples problem, but
at the cost that MULTIEXPR_SUBLINK cases didn't work, typically
crashing if more than one row has to be updated.  Fix by preserving
resjunk columns in that routine.  (I failed to resist the temptation
to add more assertions there too, and to do some minor code
beautification.)

Per report from Andres Freund.  Back-patch to all supported branches.

Security: CVE-2021-32028

4 years agoPrevent integer overflows in array subscripting calculations.
Tom Lane [Mon, 10 May 2021 14:44:38 +0000 (10:44 -0400)]
Prevent integer overflows in array subscripting calculations.

While we were (mostly) careful about ensuring that the dimensions of
arrays aren't large enough to cause integer overflow, the lower bound
values were generally not checked.  This allows situations where
lower_bound + dimension overflows an integer.  It seems that that's
harmless so far as array reading is concerned, except that array
elements with subscripts notionally exceeding INT_MAX are inaccessible.
However, it confuses various array-assignment logic, resulting in a
potential for memory stomps.

Fix by adding checks that array lower bounds aren't large enough to
cause lower_bound + dimension to overflow.  (Note: this results in
disallowing cases where the last subscript position would be exactly
INT_MAX.  In principle we could probably allow that, but there's a lot
of code that computes lower_bound + dimension and would need adjustment.
It seems doubtful that it's worth the trouble/risk to allow it.)

Somewhat independently of that, array_set_element() was careless
about possible overflow when checking the subscript of a fixed-length
array, creating a different route to memory stomps.  Fix that too.

Security: CVE-2021-32027

4 years agoTranslation updates
Peter Eisentraut [Mon, 10 May 2021 12:36:21 +0000 (14:36 +0200)]
Translation updates

Source-Git-URL: git://git.postgresql.org/git/pgtranslation/messages.git
Source-Git-Hash: 1c361d3ac016b61715d99f2055dee050397e3f13

4 years agoEmit dummy statements for probes.d probes when disabled
Peter Eisentraut [Mon, 10 May 2021 09:36:26 +0000 (11:36 +0200)]
Emit dummy statements for probes.d probes when disabled

When building without --enable-dtrace, emit dummy

    do {} while (0)

statements for the stubbed-out TRACE_POSTGRESQL_foo() macros
instead of empty macros that totally elide the original probe
statement.

This fixes the

    warning: suggest braces around empty body in an ‘if’ statement [-Wempty-body]

introduced by b94409a02f.

Author: Craig Ringer <craig.ringer@2ndquadrant.com>
Discussion: https://www.postgresql.org/message-id/flat/20210504221531.cfvpmmdfsou6eitb%40alap3.anarazel.de

4 years agoRemove unused function arguments
Peter Eisentraut [Mon, 10 May 2021 08:02:33 +0000 (10:02 +0200)]
Remove unused function arguments

Was present in original commit
198b3716dba68544b55cb97bd120738a86d5df2d but apparently never used.

4 years agoFix typos in operatorcmds.c
Michael Paquier [Mon, 10 May 2021 06:45:54 +0000 (15:45 +0900)]
Fix typos in operatorcmds.c

Author: Kyotaro Horiguchi, Justin Pryzby
Discussion: https://postgr.es/m/20210428.173633.1525059946206239295.horikyota.ntt@gmail.com

4 years agodoc: first draft of the PG 14 release notes
Bruce Momjian [Mon, 10 May 2021 05:58:59 +0000 (01:58 -0400)]
doc:  first draft of the PG 14 release notes

4 years agoFix generation of ./INSTALL for the distribution tarball
Michael Paquier [Mon, 10 May 2021 05:34:07 +0000 (14:34 +0900)]
Fix generation of ./INSTALL for the distribution tarball

"make dist", in charge of creating a distribution tarball, failed when
attempting to generate ./INSTALL as a new reference added to
guc-default-toast-compression on the documentation for the installation
details was not getting translated properly to plain text.  Like all the
other link references on this page, this adds a new entry to
standalone-profile.xsl to allow the generation of ./INSTALL to finish
properly.

Oversight in 02a93e7, per buildfarm member guaibasaurus.

4 years agoRevert recovery prefetching feature.
Thomas Munro [Mon, 10 May 2021 04:00:53 +0000 (16:00 +1200)]
Revert recovery prefetching feature.

This set of commits has some bugs with known fixes, but at this late
stage in the release cycle it seems best to revert and resubmit next
time, along with some new automated test coverage for this whole area.

Commits reverted:

dc88460c: Doc: Review for "Optionally prefetch referenced data in recovery."
1d257577: Optionally prefetch referenced data in recovery.
f003d9f8: Add circular WAL decoding buffer.
323cbe7c: Remove read_page callback from XLogReader.

Remove the new GUC group WAL_RECOVERY recently added by a55a9847, as the
corresponding section of config.sgml is now reverted.

Discussion: https://postgr.es/m/CAOuzzgrn7iKnFRsB4MHp3UisEQAGgZMbk_ViTN4HV4-Ksq8zCg%40mail.gmail.com

4 years agoAdd more TAP tests for pg_dump with attribute compression
Michael Paquier [Mon, 10 May 2021 02:12:07 +0000 (11:12 +0900)]
Add more TAP tests for pg_dump with attribute compression

Some relations with LZ4 used as the toast compression methods have been
left around in the main regression test suite to stress pg_upgrade, but
pg_dump, that includes tests much more picky in terms of output
generated, had no actual coverage with this feature.

Similarly to collations, tests only working with LZ4 are tracked with an
additional flag, and this uses TestLib::check_pg_config() to check if
the build supports LZ4 or not.  This stresses more scenarios with
tables, materialized views and pg_dump --no-toast-compression.

Author: Dilip Kumar
Reviewed-by: Michael Paquier
Discussion: https://postgr.es/m/CAFiTN-twgPmohG7qj1HXhySq16h123y5OowsQR+5h1YeZE9fmQ@mail.gmail.com

4 years agodoc: Fix some gaps with the documentation related to LZ4
Michael Paquier [Mon, 10 May 2021 00:30:35 +0000 (09:30 +0900)]
doc: Fix some gaps with the documentation related to LZ4

The upstream project is officially named "LZ4", and the documentation
was confused with the option value that can be used with DDLs supporting
this option, and the project name.

Documentation related to the configure option --with-lz4 was missing, so
add something for that.

Author: Dilip Kumar, Michael Paquier
Reviewed-by: Justin Pryzby
Discussion: https://postgr.es/m/YJaOZQDXBVySq+Cc@paquier.xyz

4 years agoImprove comments about USE_VALGRIND in pg_config_manual.h.
Tom Lane [Sun, 9 May 2021 23:33:24 +0000 (19:33 -0400)]
Improve comments about USE_VALGRIND in pg_config_manual.h.

These comments left the impression that USE_VALGRIND isn't really
essential for valgrind testing.  But that's wrong, as I learned
the hard way today.

Discussion: https://postgr.es/m/512778.1620588546@sss.pgh.pa.us

4 years agoMove memory accounting Asserts for Result Cache code
David Rowley [Sat, 8 May 2021 23:37:18 +0000 (11:37 +1200)]
Move memory accounting Asserts for Result Cache code

In 9eacee2e6, I included some code to verify the cache's memory tracking
is correct by counting up the number of entries and the memory they use
each time we evict something from the cache.  Those values are then
compared to the expected values using Assert.  The problem is that this
requires looping over the entire cache hash table each time we evict an
entry from the cache.  That can be pretty expensive, as noted by Pavel
Stehule.

Here we move this memory accounting checking code so that we only verify
it on cassert builds once when shutting down the Result Cache node.

Aside from the performance increase, this has two distinct advantages:

1) We do the memory checks at the last possible moment before destroying
   the cache.  This means we'll now catch accounting problems that might
   sneak in after a cache eviction.

2) We now do the memory Assert checks when there were no cache evictions.
   This increases the coverage.

One small disadvantage is that we'll now miss any memory tracking issues
that somehow managed to resolve themselves by the end of execution.
However, it seems to me that such a memory tracking problem would be quite
unlikely, and likely somewhat less harmful if one were to exist.

In passing, adjust the loop over the hash table to use the standard
simplehash.h method of iteration.

Reported-by: Pavel Stehule
Discussion: https://postgr.es/m/CAFj8pRAzgoSkdEiqrKbT=7yG9FA5fjUAP3jmJywuDqYq6Ki5ug@mail.gmail.com

4 years agoSync guc.c and postgresql.conf.sample with the SGML docs.
Tom Lane [Sat, 8 May 2021 16:13:33 +0000 (12:13 -0400)]
Sync guc.c and postgresql.conf.sample with the SGML docs.

It seems that various people have moved GUCs around in the config.sgml
listing without bothering to make the code agree.  Ensure that the
config_group codes assigned to GUCs match where they are listed in
config.sgml.  Likewise ensure that postgresql.conf.sample lists GUCs
in the same sub-section and same ordering as they appear in config.sgml.

(I've got some doubts about some of these choices, but for the purposes
of this patch, we'll treat config.sgml as gospel.)

Notably, this requires adding a WAL_RECOVERY config_group value,
because 1d257577e didn't.  As long as we're renumbering that enum
anyway, let's take out the values corresponding to major groups
that are divided into sub-groups.  No GUC should be assigned to the
major group itself, so those values just create a temptation to
do the wrong thing, while adding work for translators.

In passing, adjust the short_desc strings for PRESET_OPTIONS GUCs
to uniformly use the phrasing "Shows XYZ.", removing the impression
some of these strings left that you can set the value.

While some of these errors are old, no back-patch, as changing the
contents of the pg_settings view in stable branches seems more likely
to be seen as a compatibility break than anything helpful.

Bharath Rupireddy, Justin Pryzby, Tom Lane

Discussion: https://postgr.es/m/16997-ff16127f6e0d1390@postgresql.org
Discussion: https://postgr.es/m/20210413123139.GE6091@telsasoft.com

4 years agoDoc: copy-editing for debug_invalidate_system_caches_always description.
Tom Lane [Sat, 8 May 2021 15:33:13 +0000 (11:33 -0400)]
Doc: copy-editing for debug_invalidate_system_caches_always description.

I came to fix "useful only useful", but the more I looked at the text
the more things I thought could be improved.

4 years agoFix incorrect error code for CREATE/ALTER TABLE COMPRESSION
Michael Paquier [Sat, 8 May 2021 01:18:05 +0000 (10:18 +0900)]
Fix incorrect error code for CREATE/ALTER TABLE COMPRESSION

Specifying an incorrect value for the compression method of an attribute
caused ERRCODE_FEATURE_NOT_SUPPORTED to be raised as error.  Use instead
ERRCODE_INVALID_PARAMETER_VALUE to be more consistent.

Author: Dilip Kumar
Discussion: https://postgr.es/m/CAFiTN-vH84fE-8C4zGZw4v0Wyh4Y2v=5JWg2fGE5+LPaDvz1GQ@mail.gmail.com

4 years agoCopy the INSERT query in postgres_fdw
Tomas Vondra [Fri, 7 May 2021 20:29:43 +0000 (22:29 +0200)]
Copy the INSERT query in postgres_fdw

When executing the INSERT with batching, we may need to rebuild the
query when the batch size changes, in which case we pfree the current
string. We must not release the original string, stored in fdw_private,
because that may be needed in EXPLAIN ANALYZE. So make copy of the SQL,
but only for INSERT queries.

Reported-by: Pavel Stehule
Discussion: https://postgr.es/m/CAFj8pRCL_Rjw-MCR6J7VX9OF7MR6PA5K8qUbrMvprW_e-aHkfQ%40mail.gmail.com

4 years agoAdd a README and Makefile recipe for Gen_dummy_probes.pl
Andrew Dunstan [Fri, 7 May 2021 18:27:18 +0000 (14:27 -0400)]
Add a README and Makefile recipe for Gen_dummy_probes.pl

Discussion: https://postgr.es/m/20210506035602.3akutfvvojngj3nb@alap3.anarazel.de

4 years agoFix typo
Peter Eisentraut [Fri, 7 May 2021 15:47:22 +0000 (17:47 +0200)]
Fix typo

4 years agoAlterSubscription_refresh: avoid stomping on global variable
Alvaro Herrera [Fri, 7 May 2021 15:46:37 +0000 (11:46 -0400)]
AlterSubscription_refresh: avoid stomping on global variable

This patch replaces use of the global "wrconn" variable in
AlterSubscription_refresh with a local variable of the same name, making
it consistent with other functions in subscriptioncmds.c (e.g.
DropSubscription).

The global wrconn is only meant to be used for logical apply/tablesync worker.
Abusing it this way is known to cause trouble if an apply worker
manages to do a subscription refresh, such as reported by Jeremy Finzel
and diagnosed by Andres Freund back in November 2020, at
https://www.postgresql.org/message-id/20201111215820.qihhrz7fayu6myfi@alap3.anarazel.de

Backpatch to 10.  In branch master, also move the connection establishment
to occur outside the PG_TRY block; this way we can remove a test for NULL in
PG_FINALLY, and it also makes the code more consistent with similar code in
the same file.

Author: Peter Smith <peter.b.smith@fujitsu.com>
Reviewed-by: Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>
Reviewed-by: Japin Li <japinli@hotmail.com>
Discussion: https://postgr.es/m/CAHut+Pu7Jv9L2BOEx_Z0UtJxfDevQSAUW2mJqWU+CtmDrEZVAg@mail.gmail.com

4 years agoRemove extraneous newlines added by perl copyright patch
Andrew Dunstan [Fri, 7 May 2021 15:37:37 +0000 (11:37 -0400)]
Remove extraneous newlines added by perl copyright patch

4 years agoAdd a copyright notice to perl files lacking one.
Andrew Dunstan [Fri, 7 May 2021 14:56:14 +0000 (10:56 -0400)]
Add a copyright notice to perl files lacking one.

4 years agoMention statistics objects in maintenance.sgml
Tomas Vondra [Fri, 7 May 2021 12:02:22 +0000 (14:02 +0200)]
Mention statistics objects in maintenance.sgml

The docs mentioned expression indexes as a way to improve selectivity
estimates for functions, but we have a second option to improve that by
creating extended statistics. So mention that too.

Reported-by: Justin Pryzby
Discussion: https://postgr.es/m/20210505210947.GA27406%40telsasoft.com

4 years agoFix typos in comments about extended statistics
Tomas Vondra [Fri, 7 May 2021 11:57:29 +0000 (13:57 +0200)]
Fix typos in comments about extended statistics

Reported-by: Justin Pryzby
Discussion: https://postgr.es/m/20210505210947.GA27406%40telsasoft.com

4 years agoMake pg_get_statisticsobjdef_expressions return NULL
Tomas Vondra [Fri, 7 May 2021 11:56:32 +0000 (13:56 +0200)]
Make pg_get_statisticsobjdef_expressions return NULL

The usual behavior for functions in ruleutils.c is to return NULL when
the object does not exist. pg_get_statisticsobjdef_expressions raised an
error instead, so correct that.

Reported-by: Justin Pryzby
Discussion: https://postgr.es/m/20210505210947.GA27406%40telsasoft.com

4 years agoDoc: Update notes about libc collation versions.
Thomas Munro [Fri, 7 May 2021 09:47:08 +0000 (21:47 +1200)]
Doc: Update notes about libc collation versions.

The per-index collation version tracking feature was reverted, but we
still have the ability to ask Windows (352f6f2d) and FreeBSD
(ca051d8b) for collation versions to store in pg_collation.collversion.
So, from the reverted patch, take a few words of documentation about
libc on all three supported OSes to replace the pre-existing note that
mentioned only glibc.

Discussion: https://postgr.es/m/CA%2BhUKGLhj5t1fcjqAu8iD9B3ixJtsTNqyCCD4V0aTO9kAKAjjA%40mail.gmail.com

4 years agoRevert per-index collation version tracking feature.
Thomas Munro [Fri, 7 May 2021 08:17:42 +0000 (20:17 +1200)]
Revert per-index collation version tracking feature.

Design problems were discovered in the handling of composite types and
record types that would cause some relevant versions not to be recorded.
Misgivings were also expressed about the use of the pg_depend catalog
for this purpose.  We're out of time for this release so we'll revert
and try again.

Commits reverted:

1bf946bd: Doc: Document known problem with Windows collation versions.
cf002008: Remove no-longer-relevant test case.
ef387bed: Fix bogus collation-version-recording logic.
0fb0a050: Hide internal error for pg_collation_actual_version(<bad OID>).
ff942057: Suppress "warning: variable 'collcollate' set but not used".
d50e3b1f: Fix assertion in collation version lookup.
f24b1569: Rethink extraction of collation dependencies.
257836a7: Track collation versions for indexes.
cd6f479e: Add pg_depend.refobjversion.
7d1297df: Remove pg_collation.collversion.

Discussion: https://postgr.es/m/CA%2BhUKGLhj5t1fcjqAu8iD9B3ixJtsTNqyCCD4V0aTO9kAKAjjA%40mail.gmail.com

4 years agoRemove redundant variable
Alvaro Herrera [Thu, 6 May 2021 21:28:36 +0000 (17:28 -0400)]
Remove redundant variable

Author: Amul Sul <sulamul@gmail.com>
Reviewed-by: Jeevan Ladhe <jeevan.ladhe@enterprisedb.com>
Reviewed-by: Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>
Reviewed-by: Justin Pryzby <pryzby@telsasoft.com>
Discussion: https://postgr.es/m/CAAJ_b94HaNcrPVREUuB9-qUn2uB+gfcoX3FG_Vx0S6aFse+yhw@mail.gmail.com

4 years agoDocument lock level used by ALTER TABLE VALIDATE CONSTRAINT
Alvaro Herrera [Thu, 6 May 2021 21:17:57 +0000 (17:17 -0400)]
Document lock level used by ALTER TABLE VALIDATE CONSTRAINT

Backpatch all the way back to 9.6.

Author: Simon Riggs <simon.riggs@enterprisedb.com>
Discussion: https://postgr.es/m/CANbhV-EwxvdhHuOLdfG2ciYrHOHXV=mm6=fD5aMhqcH09Li3Tg@mail.gmail.com

4 years agoImprove documentation on DETACH PARTITION lock levels
Alvaro Herrera [Thu, 6 May 2021 20:42:30 +0000 (16:42 -0400)]
Improve documentation on DETACH PARTITION lock levels

This was forgotten in 71f4c8c6f74b.

Reported-by: Pavel Luzanov <p.luzanov@postgrespro.ru>
Author: Amit Langote <amitlangote09@gmail.com>
Discussion: https://postgr.es/m/0688e7c3-8bc8-a3e4-9d8e-3bcbbf3e1f4d@postgrespro.ru

4 years agoRemove overzealous VACUUM visibility map assertion.
Peter Geoghegan [Thu, 6 May 2021 20:17:39 +0000 (13:17 -0700)]
Remove overzealous VACUUM visibility map assertion.

The all_visible_according_to_vm variable's value is inherently prone to
becoming invalidated concurrently, since it is set before we even
acquire a lock on a related heap page buffer.

Oversight in commit 7136bf34, which added the assertion in passing.

Author: Masahiko Sawada <sawada.mshk@gmail.com>
Reported-By: Tang <tanghy.fnst@fujitsu.com>
Diagnosed-By:: Masahiko Sawada <sawada.mshk@gmail.com>
Discussion: https://postgr.es/m/CAD21AoDzgc8_MYrA5m1fyydomw_eVKtQiYh7sfDK4KEhdMsf_g@mail.gmail.com

4 years agoTrack detached partitions more accurately in partdescs
Alvaro Herrera [Thu, 6 May 2021 16:47:30 +0000 (12:47 -0400)]
Track detached partitions more accurately in partdescs

In d6b8d29419df I (Álvaro) was sloppy about recording whether a
partition descripor does or does not include detached partitions, when
the snapshot checking does not see the pg_inherits row marked detached.
In that case no partition was omitted, yet in the relcache entry we were
saving the partdesc as omitting partitions.  Flip that (so we save it as
a partdesc not omitting partitions, which indeed it doesn't), which
hopefully makes the code easier to reason about.

Author: Amit Langote <amitlangote09@gmail.com>
Discussion: https://postgr.es/m/CA+HiwqE7GxGU4VdzwZzfiz+Ont5SsopoFkgtrZGEdPqWRL+biA@mail.gmail.com

4 years agoDoc: trivial wording adjustment.
Tom Lane [Thu, 6 May 2021 13:59:11 +0000 (09:59 -0400)]
Doc: trivial wording adjustment.

Improve self-referential foreign key example, per suggestion
from David Johnston.

Discussion: https://postgr.es/m/CAKFQuwZTke7+HUn4YUGqu2+gAPi4Cy18TXMrg_Z5nADkxfPNMw@mail.gmail.com