postgresql.git
3 years agoFix typo in heapam.c
Michael Paquier [Wed, 26 May 2021 10:53:03 +0000 (19:53 +0900)]
Fix typo in heapam.c

Author: Hou Zhijie
Discussion: https://postgr.es/m/OS0PR01MB571612191738540B27A8DE5894249@OS0PR01MB5716.jpnprd01.prod.outlook.com

3 years agoMake detach-partition-concurrently-4 less timing sensitive
Alvaro Herrera [Tue, 25 May 2021 23:32:22 +0000 (19:32 -0400)]
Make detach-partition-concurrently-4 less timing sensitive

Same as 5e0b1aeb2dfe, for the companion test file.

This one seems lower probability (only two failures in a month of runs);
I was hardly able to reproduce a failure without a patch, so the fact
that I was also unable to reproduce one with it doesn't say anything.
We'll have to wait for further buildfarm results to see if we need any
further adjustments.

Discussion: https://postgr.es/m/20210524090712.GA3771394@rfd.leadboat.com

3 years agoFix use of uninitialized variable in inline_function().
Tom Lane [Tue, 25 May 2021 16:55:52 +0000 (12:55 -0400)]
Fix use of uninitialized variable in inline_function().

Commit e717a9a18 introduced a code path that bypassed the call of
get_expr_result_type, which is not good because we need its rettupdesc
result to pass to check_sql_fn_retval.  We'd failed to notice right
away because the code path in which check_sql_fn_retval uses that
argument is fairly hard to reach in this context.  It's not impossible
though, and in any case inline_function would have no business
assuming that check_sql_fn_retval doesn't need that value.

To fix, move get_expr_result_type out of the if-block, which in
turn requires moving the construction of the dummy FuncExpr
out of it.

Per report from Ranier Vilela.  (I'm bemused by the lack of any
compiler complaints...)

Discussion: https://postgr.es/m/CAEudQAqBqQpQ3HruWAGU_7WaMJ7tntpk0T8k_dVtNB46DqdBgw@mail.gmail.com

3 years agoMake detach-partition-concurrently-3 less timing-sensitive
Alvaro Herrera [Tue, 25 May 2021 16:53:29 +0000 (12:53 -0400)]
Make detach-partition-concurrently-3 less timing-sensitive

This recently added test has shown to be too sensitive to timing when
sending a cancel to a session waiting for a lock.

We fix this by running a no-op query in the blocked session immediately
after the cancel; this avoids the session that sent the cancel sending
another query immediately before the cancel has been reported.
Idea by Noah Misch.

With that fix, we sometimes see that the cancel error report is shown
only relative to the step that is cancelled, instead of together with
the step that sends the cancel.  To increase the probability that both
steps are shown togeter, add a 0.1s sleep to the cancel.  In normal
conditions this appears sufficient to silence most failures, but we'll
see that the slower buildfarm members say about it.

Reported-by: Takamichi Osumi <osumi.takamichi@fujitsu.com>
Discussion: https://postgr.es/m/OSBPR01MB4888C4ABA361C7E81094AC66ED269@OSBPR01MB4888.jpnprd01.prod.outlook.com

3 years agopostgresql.conf.sample: Make vertical spacing consistent
Peter Eisentraut [Tue, 25 May 2021 09:49:54 +0000 (11:49 +0200)]
postgresql.conf.sample: Make vertical spacing consistent

3 years agoFix memory leak when de-toasting compressed values in VACUUM FULL/CLUSTER
Michael Paquier [Tue, 25 May 2021 05:27:18 +0000 (14:27 +0900)]
Fix memory leak when de-toasting compressed values in VACUUM FULL/CLUSTER

VACUUM FULL and CLUSTER can be used to enforce the use of the existing
compression method of a toastable column if a value currently stored is
compressed with a method that does not match the column's defined
method.  The code in charge of decompressing and recompressing toast
values at rewrite left around the detoasted values, causing an
accumulation of memory allocated in TopTransactionContext.

When processing large relations, this could cause the system to run out
of memory.  The detoasted values are not needed once their tuple is
rewritten, and this commit ensures that the necessary cleanup happens.

Issue introduced by bbe0a81d.  The comments of the area are reordered a
bit while on it.

Reported-by: Andres Freund
Analyzed-by: Andres Freund
Author: Michael Paquier
Reviewed-by: Dilip Kumar
Discussion: https://postgr.es/m/20210521211929.pcehg6f23icwstdb@alap3.anarazel.de

3 years agoDoc: Update logical decoding stats information.
Amit Kapila [Tue, 25 May 2021 05:21:45 +0000 (10:51 +0530)]
Doc: Update logical decoding stats information.

Add the information of pg_stat_replication_slots view along with other
system catalogs related to logical decoding.

Author: Vignesh C
Reviewed-by: Amit Kapila
Discussion: https://postgr.es/m/20210319185247.ldebgpdaxsowiflw@alap3.anarazel.de

3 years agoImprove docs and error messages for parallel vacuum.
Amit Kapila [Tue, 25 May 2021 03:56:53 +0000 (09:26 +0530)]
Improve docs and error messages for parallel vacuum.

The error messages, docs, and one of the options were using
'parallel degree' to indicate parallelism used by vacuum command. We
normally use 'parallel workers' at other places so change it for parallel
vacuum accordingly.

Author: Bharath Rupireddy
Reviewed-by: Dilip Kumar, Amit Kapila
Backpatch-through: 13
Discussion: https://postgr.es/m/CALj2ACWz=PYrrFXVsEKb9J1aiX4raA+UBe02hdRp_zqDkrWUiw@mail.gmail.com

3 years agoDisallow SSL renegotiation
Michael Paquier [Tue, 25 May 2021 01:10:09 +0000 (10:10 +0900)]
Disallow SSL renegotiation

SSL renegotiation is already disabled as of 48d23c72, however this does
not prevent the server to comply with a client willing to use
renegotiation.  In the last couple of years, renegotiation had its set
of security issues and flaws (like the recent CVE-2021-3449), and it
could be possible to crash the backend with a client attempting
renegotiation.

This commit takes one extra step by disabling renegotiation in the
backend in the same way as SSL compression (f9264d15) or tickets
(97d3a0b0).  OpenSSL 1.1.0h has added an option named
SSL_OP_NO_RENEGOTIATION able to achieve that.  In older versions
there is an option called SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS that
was undocumented, and could be set within the SSL object created when
the TLS connection opens, but I have decided not to use it, as it feels
trickier to rely on, and it is not official.  Note that this option is
not usable in OpenSSL < 1.1.0h as the internal contents of the *SSL
object are hidden to applications.

SSL renegotiation concerns protocols up to TLSv1.2.

Per original report from Robert Haas, with a patch based on a suggestion
by Andres Freund.

Author: Michael Paquier
Reviewed-by: Daniel Gustafsson
Discussion: https://postgr.es/m/YKZBXx7RhU74FlTE@paquier.xyz
Backpatch-through: 9.6

3 years agoFix setrefs.c code for Result Cache nodes
David Rowley [Tue, 25 May 2021 00:50:22 +0000 (12:50 +1200)]
Fix setrefs.c code for Result Cache nodes

Result Cache, added in 9eacee2e6 neglected to properly adjust the plan
references in setrefs.c.  This could lead to the following error during
EXPLAIN:

ERROR:  cannot decompile join alias var in plan tree

Fix that.

Bug: 17030
Reported-by: Hans Buschmann
Discussion: https://postgr.es/m/17030-5844aecae42fe223@postgresql.org

3 years agoConsider triggering VACUUM failsafe during scan.
Peter Geoghegan [Tue, 25 May 2021 00:14:02 +0000 (17:14 -0700)]
Consider triggering VACUUM failsafe during scan.

The wraparound failsafe mechanism added by commit 1e55e7d1 handled the
one-pass strategy case (i.e. the "table has no indexes" case) by adding
a dedicated failsafe check.  This made up for the fact that the usual
one-pass checks inside lazy_vacuum_all_indexes() cannot ever be reached
during a one-pass strategy VACUUM.

This approach failed to account for two-pass VACUUMs that opt out of
index vacuuming up-front.  The INDEX_CLEANUP off case in the only case
that works like that.

Fix this by performing a failsafe check every 4GB during the first scan
of the heap, regardless of the details of the VACUUM.  This eliminates
the special case, and will make the failsafe trigger more reliably.

Author: Peter Geoghegan <pg@bowt.ie>
Reported-By: Andres Freund <andres@anarazel.de>
Reviewed-By: Masahiko Sawada <sawada.mshk@gmail.com>
Discussion: https://postgr.es/m/20210424002921.pb3t7h6frupdqnkp@alap3.anarazel.de

3 years agoDoc: move some catalogs.sgml entries to the right place.
Tom Lane [Mon, 24 May 2021 22:03:47 +0000 (18:03 -0400)]
Doc: move some catalogs.sgml entries to the right place.

pg_statistic_ext_data.stxdexpr was listed under the wrong catalog,
as was pg_stats_ext.exprs.  Also there was a bogus entry for
pg_statistic_ext_data.stxexprs.  Apparently a merge failure in
commit a4d75c86b.

Guillaume Lelarge and Tom Lane

Discussion: https://postgr.es/m/CAECtzeUHw+w64eUFVeV_2FJviAw6oZ0wNLkmU843ZH4hAQfiWg@mail.gmail.com

3 years agoAdd missing NULL check when building Result Cache paths
David Rowley [Mon, 24 May 2021 00:37:11 +0000 (12:37 +1200)]
Add missing NULL check when building Result Cache paths

Code added in 9e215378d to disable building of Result Cache paths when
not all join conditions are part of the parameterization of a unique
join failed to first check if the inner path's param_info was set before
checking the param_info's ppi_clauses.

Add a check for NULL values here and just bail on trying to build the
path if param_info is NULL. lateral_vars are not considered when
deciding if the join is unique, so we're not missing out on doing the
optimization when there are lateral_vars and no param_info.

Reported-by: Coverity, via Tom Lane
Discussion: https://postgr.es/m/457998.1621779290@sss.pgh.pa.us

3 years agoRe-order pg_attribute columns to eliminate some padding space.
Tom Lane [Sun, 23 May 2021 16:12:09 +0000 (12:12 -0400)]
Re-order pg_attribute columns to eliminate some padding space.

Now that attcompression is just a char, there's a lot of wasted
padding space after it.  Move it into the group of char-wide
columns to save a net of 4 bytes per pg_attribute entry.  While
we're at it, swap the order of attstorage and attalign to make for
a more logical grouping of these columns.

Also re-order actions in related code to match the new field ordering.

This patch also fixes one outright bug: equalTupleDescs() failed to
compare attcompression.  That could, for example, cause relcache
reload to fail to adopt a new value following a change.

Michael Paquier and Tom Lane, per a gripe from Andres Freund.

Discussion: https://postgr.es/m/20210517204803.iyk5wwvwgtjcmc5w@alap3.anarazel.de

3 years agoBe more verbose when the postmaster unexpectedly quits.
Tom Lane [Sun, 23 May 2021 14:50:21 +0000 (10:50 -0400)]
Be more verbose when the postmaster unexpectedly quits.

Emit a LOG message when the postmaster stops because of a failure in
the startup process.  There already is a similar message if we exit
for that reason during PM_STARTUP phase, so it seems inconsistent
that there was none if the startup process fails later on.

Also emit a LOG message when the postmaster stops after a crash
because restart_after_crash is disabled.  This seems potentially
helpful in case DBAs (or developers) forget that that's set.
Also, it was the only remaining place where the postmaster would
do an abnormal exit without any comment as to why.

In passing, remove an unreachable call of ExitPostmaster(0).

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

3 years agodoc: word-wrap and indent PG 14 relnotes
Bruce Momjian [Sun, 23 May 2021 02:25:05 +0000 (22:25 -0400)]
doc:  word-wrap and indent PG 14 relnotes

3 years agoFix access to no-longer-open relcache entry in logical-rep worker.
Tom Lane [Sun, 23 May 2021 01:24:48 +0000 (21:24 -0400)]
Fix access to no-longer-open relcache entry in logical-rep worker.

If we redirected a replicated tuple operation into a partition child
table, and then tried to fire AFTER triggers for that event, the
relation cache entry for the child table was already closed.  This has
no visible ill effects as long as the entry is still there and still
valid, but an unluckily-timed cache flush could result in a crash or
other misbehavior.

To fix, postpone the ExecCleanupTupleRouting call (which is what
closes the child table) until after we've fired triggers.  This
requires a bit of refactoring so that the cleanup function can
have access to the necessary state.

In HEAD, I took the opportunity to simplify some of worker.c's
function APIs based on use of the new ApplyExecutionData struct.
However, it doesn't seem safe/practical to back-patch that aspect,
at least not without a lot of analysis of possible interactions
with a04daa97a.

In passing, add an Assert to afterTriggerInvokeEvents to catch
such cases.  This seems worthwhile because we've grown a number
of fairly unstructured ways of calling AfterTriggerEndQuery.

Back-patch to v13, where worker.c grew the ability to deal with
partitioned target tables.

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

3 years agodoc: PG 14 relnotes, adjust pg_{read|write}_all_data entry
Bruce Momjian [Sun, 23 May 2021 00:17:58 +0000 (20:17 -0400)]
doc:  PG 14 relnotes, adjust pg_{read|write}_all_data entry

Reported-by: Stephen Frost
Discussion: https://postgr.es/m/20210522232945.GO20766@tamriel.snowman.net

3 years agoUpdate PG 14 relnotes for vacuum_cost_page_miss
Bruce Momjian [Sat, 22 May 2021 23:24:23 +0000 (19:24 -0400)]
Update PG 14 relnotes for vacuum_cost_page_miss

Reported-by: Peter Geoghegan
Discussion: https://postgr.es/m/CAH2-WzmgSnDX9WVoxRZxuKeCy2MzLO9Dmo4+go0RzNW0VBdhmw@mail.gmail.com

3 years agoRemove plpgsql's special-case code paths for SET/RESET.
Tom Lane [Sat, 22 May 2021 14:25:36 +0000 (10:25 -0400)]
Remove plpgsql's special-case code paths for SET/RESET.

In the wake of 84f5c2908, it's no longer necessary for plpgsql to
handle SET/RESET specially.  The point of that was just to avoid
taking a new transaction snapshot prematurely, which the regular code
path through _SPI_execute_plan() now does just fine (in fact better,
since it now does the right thing for LOCK too).  Hence, rip out a
few lines of code, going back to the old way of treating SET/RESET
as a generic SQL command.  This essentially reverts all but the
test cases from b981275b6.

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

3 years agoFix planner's use of Result Cache with unique joins
David Rowley [Sat, 22 May 2021 04:22:27 +0000 (16:22 +1200)]
Fix planner's use of Result Cache with unique joins

When the planner considered using a Result Cache node to cache results
from the inner side of a Nested Loop Join, it failed to consider that the
inner path's parameterization may not be the entire join condition.  If
the join was marked as inner_unique then we may accidentally put the cache
in singlerow mode.  This meant that entries would be marked as complete
after caching the first row.  That was wrong as if only part of the join
condition was parameterized then the uniqueness of the unique join was not
guaranteed at the Result Cache's level.  The uniqueness is only guaranteed
after Nested Loop applies the join filter.  If subsequent rows were found,
this would lead to:

ERROR: cache entry already complete

This could have been fixed by only putting the cache in singlerow mode if
the entire join condition was parameterized.  However, Nested Loop will
only read its inner side so far as the first matching row when the join is
unique, so that might mean we never get an opportunity to mark cache
entries as complete.  Since non-complete cache entries are useless for
subsequent lookups, we just don't bother considering a Result Cache path
in this case.

In passing, remove the XXX comment that claimed the above ERROR might be
better suited to be an Assert.  After there being an actual case which
triggered it, it seems better to keep it an ERROR.

Reported-by: David Christensen
Discussion: https://postgr.es/m/CAOxo6X+dy-V58iEPFgst8ahPKEU+38NZzUuc+a7wDBZd4TrHMQ@mail.gmail.com

3 years agodoc: complete adding XML markup to PG 14 relnotes
Bruce Momjian [Sat, 22 May 2021 00:51:53 +0000 (20:51 -0400)]
doc:  complete adding XML markup to PG 14 relnotes

3 years agodoc: more XML markup for PG 14 release notes
Bruce Momjian [Fri, 21 May 2021 20:16:56 +0000 (16:16 -0400)]
doc:  more XML markup for PG 14 release notes

3 years agoDisallow whole-row variables in GENERATED expressions.
Tom Lane [Fri, 21 May 2021 19:12:08 +0000 (15:12 -0400)]
Disallow whole-row variables in GENERATED expressions.

This was previously allowed, but I think that was just an oversight.
It's a clear violation of the rule that a generated column cannot
depend on itself or other generated columns.  Moreover, because the
code was relying on the assumption that no such cross-references
exist, it was pretty easy to crash ALTER TABLE and perhaps other
places.  Even if you managed not to crash, you got quite unstable,
implementation-dependent results.

Per report from Vitaly Ustinov.
Back-patch to v12 where GENERATED came in.

Discussion: https://postgr.es/m/CAM_DEiWR2DPT6U4xb-Ehigozzd3n3G37ZB1+867zbsEVtYoJww@mail.gmail.com

3 years agoFix usage of "tableoid" in GENERATED expressions.
Tom Lane [Fri, 21 May 2021 19:02:06 +0000 (15:02 -0400)]
Fix usage of "tableoid" in GENERATED expressions.

We consider this supported (though I've got my doubts that it's a
good idea, because tableoid is not immutable).  However, several
code paths failed to fill the field in soon enough, causing such
a GENERATED expression to see zero or the wrong value.  This
occurred when ALTER TABLE adds a new GENERATED column to a table
with existing rows, and during regular INSERT or UPDATE on a
foreign table with GENERATED columns.

Noted during investigation of a report from Vitaly Ustinov.
Back-patch to v12 where GENERATED came in.

Discussion: https://postgr.es/m/CAM_DEiWR2DPT6U4xb-Ehigozzd3n3G37ZB1+867zbsEVtYoJww@mail.gmail.com

3 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

3 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

3 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

3 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

3 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

3 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.

3 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.)

3 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.

3 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. REL_14_BETA1
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.