За первую неделю января в сообществе появились следующие новости:
Ближайшие мероприятия по PostgreSQL
- PG conf в России: https://pgconf.ru/2020
- Postgres(at)CERN will be on January 17, 2020.
- PGDay SF will take place on January 21, 2020 at the Swedish American Hall in San Francisco.
- pgDay Israel 2020 will take place on March 19, 2020 in Tel Aviv.
The CfP is open through January 15, 2020.
- pgDay Paris 2020 will be held in Paris, France on March 26, 2020 at Espace
Saint-Martin.
- Nordic PGDay 2020 will be held in Helsinki, Finland at the Hilton Helsinki
Strand Hotel on March 24, 2020.
- PGConf India 2020 will be on February 26-28, 2020 in Bengaluru, Karnataka.
- PostgreSQL(at)SCaLE is a two day, two track event which takes place on
March 5-6, 2020, at Pasadena Convention Center, as part of SCaLE 18X.
https://www.socallinuxexpo.org/scale/18x/postgresscale
- The German-speaking PostgreSQL Conference 2020 will take place on May 15, 2019
in Stuttgart.
- PGCon 2019 will take place in Ottawa on May 26-29, 2020. The CfP is open
through January 19, 2020 at http://www.pgcon.org/2020/papers.php
https://www.pgcon.org/2020/
За новостями мира PostgreSQL можно следить на следующих ресурсах:
Planet PostgreSQL: http://planet.postgresql.org/
В проекте были приняты следующие патчи:
– Remove redundant incomplete split assertion. The fastpath insert
optimization’s incomplete split flag Assert() is redundant. We’ll reach the
more general Assert() within _bt_findinsertloc() in all cases. (Besides,
Assert()’ing that the rightmost page doesn’t have the flag set never made much
sense.)
https://git.postgresql.org/pg/commitdiff/fc3100112395485f1c65848b273b3235de4aad07
Michaël Paquier pushed:
– Remove support for OpenSSL 0.9.8 and 1.0.0. Support is out of scope from all
the major vendors for these versions (for example RHEL5 uses a version based
on 0.9.8, and RHEL6 uses 1.0.1), and it created some extra maintenance work.
Upstream has stopped support of 0.9.8 in December 2015 and of 1.0.0 in
February 2016. Since b1abfec, note that the default SSL protocol version set
with ssl_min_protocol_version is TLSv1.2, whose support was added in OpenSSL
1.0.1, so there is no point to enforce ssl_min_protocol_version to TLSv1 in
the SSL tests. Author: Michael Paquier Reviewed-by: Daniel Gustafsson, Tom
Lane Discussion: https://postgr.es/m/20191205083252.GE5064@paquier.xyz
https://git.postgresql.org/pg/commitdiff/7b283d0e1d1d79bf1c962d790c94d2a53f3bb38a
– Remove dependency to system calls for memory allocation in refint. Failures in
allocations could lead to crashes with NULL pointer dereferences . Memory
context TopMemoryContext is used instead to keep alive the plans allocated in
the session. A more specific context could be used here, but this is left for
later. Reported-by: Jian Zhang Author: Michael Paquier Reviewed-by: Tom Lane,
Andres Freund Discussion:
https://postgr.es/m/16190-70181c803641c3dc@postgresql.org
https://git.postgresql.org/pg/commitdiff/b0b6196386681383b8f0cb76df4fd35178a7371e
– Revert “Forbid DROP SCHEMA on temporary namespaces”. This reverts commit
a052f6c, following complains from Robert Haas and Tom Lane. Backpatch down to
9.4, like the previous commit. Discussion:
https://postgr.es/m/CA+TgmobL4npEX5=E5h=5Jm_9mZun3MT39Kq2suJFVeamc9skSQ@mail.gmail.com
Backpatch-through: 9.4
https://git.postgresql.org/pg/commitdiff/65192e02441cedd106b6abebe0036fb8cc124fb3
– pgbench: Make more debug messages use common logging API. This is a follow-up
of 30a3e772, making the output more consistent when using –debug for
meta-command execution. Author: Michael Paquier Reviewed-by: Fabien Coelho
Discussion: https://postgr.es/m/alpine.DEB.2.21.1912241100390.3339@pseudo
https://git.postgresql.org/pg/commitdiff/39a5f2a94f8a3bcfdb3da7391427a63f8f88b210
– doc: Fix naming of SELinux. Reported-by: Tham Nguyen Discussion:
https://postgr.es/m/157851402876.29175.12977878383183540468@wrigleys.postgresql.org
Backpatch-through: 9.4
https://git.postgresql.org/pg/commitdiff/00b047fa67e9f4428a682bd90d5e6b08d2f8a87b
– Remove incorrect assertion for INSERT in logical replication’s publisher. On
the publisher, it was assumed that an INSERT change cannot happen for a
relation with no replica identity. However this is true only for a change
that needs references to old rows, aka UPDATE or DELETE, so trying to use
logical replication with a relation that has no replica identity led to an
assertion failure in the publisher when issuing an INSERT. This commit
removes the incorrect assertion, and adds more regression tests to provide
coverage for relations without replica identity. Reported-by: Neha Sharma
Author: Dilip Kumar, Michael Paquier Reviewed-by: Andres Freund Discussion:
https://postgr.es/m/CANiYTQsL1Hb8_Km08qd32svrqNumXLJeoGo014O7VZymgOhZEA@mail.gmail.com
Backpatch-through: 10
https://git.postgresql.org/pg/commitdiff/1088729e84cc382270c592ac8c57c323836f40ca
Peter Eisentraut pushed:
– Have logical replication subscriber fire column triggers. The logical
replication apply worker did not fire per-column update triggers because the
updatedCols bitmap in the RTE was not populated. This fixes that.
Reviewed-by: Euler Taveira <euler(at)timbira(dot)com(dot)br> Discussion:
https://www.postgresql.org/message-id/flat/21673e2d-597c-6afe-637e-e8b10425b240%402ndquadrant.com
https://git.postgresql.org/pg/commitdiff/b9c130a1fdf16cd99afb390c186d19acaea7d132
– pgbench: Use common logging API. Author: Fabien COELHO <coelho(at)cri(dot)ensmp(dot)fr>
Reviewed-by: Michael Paquier <michael(at)paquier(dot)xyz> Reviewed-by: Peter
Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com> Discussion:
https://www.postgresql.org/message-id/flat/alpine(dot)DEB(dot)2(dot)21(dot)1912241100390(dot)3339(at)pseudo
https://git.postgresql.org/pg/commitdiff/30a3e772b4013d6593e4141cebd5ebfaff4d71a8
– Remove support for Python older than 2.6. Supporting very old Python versions
is a maintenance burden, especially with the several variant test files to
maintain for Python <2.6. Since we have dropped support for older OpenSSL
versions in 7b283d0e1d1d79bf1c962d790c94d2a53f3bb38a, RHEL 5 is now
effectively desupported, and that was also the only mainstream operating
system still using Python versions before 2.6, so it’s a good time to drop
those as well. Reviewed-by: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> Discussion:
https://www.postgresql.org/message-id/flat/98b69261-298c-13d2-f34d-836fd9c29b21%402ndquadrant.com
https://git.postgresql.org/pg/commitdiff/37f21ed132d1c5aee88e81fee0a0b7e735673d35
– Modernize Python exception syntax in tests. Change the exception syntax used
in the tests to use the more current except Exception as ex: rather than
the old except Exception, ex: Since support for Python <2.6 has been
removed, all supported versions now support the new style, and we can save one
step in the Python 3 compatibility conversion. Reviewed-by: Tom Lane
<tgl(at)sss(dot)pgh(dot)pa(dot)us> Discussion:
https://www.postgresql.org/message-id/flat/98b69261-298c-13d2-f34d-836fd9c29b21%402ndquadrant.com
https://git.postgresql.org/pg/commitdiff/45223fd9cefe483daa4af7740f15c004486636eb
– Add support for automatically updating Unicode derived files. We currently
have several sets of files generated from data provided by Unicode. These all
have ad hoc rules and instructions for updating when new Unicode versions
appear, and it’s not done consistently. This patch centralizes and automates
the process and makes it part of the release checklist. The Unicode and CLDR
versions are specified in Makefile.global.in. There is a new make target
“update-unicode” that downloads all the relevant files and runs the generation
script. There is also a new script for generating the table of combining
characters for ucs_wcwidth(). That table is now in a separate include file
rather than hardcoded into the middle of other code. This is based on the
script that was used for generating d8594d123c155aeecd47fc2450f62f5100b2fbf0,
but the script itself wasn’t committed at that time. Reviewed-by: John Naylor
<john(dot)naylor(at)2ndquadrant(dot)com> Discussion:
https://www.postgresql.org/message-id/flat/c8d05f42-443e-6c23-819b-05b31759a37c(at)2ndquadrant(dot)com
https://git.postgresql.org/pg/commitdiff/f85a485f89e2eb38499558c7489f108994410952
– Remove STATUS_FOUND. Replace the solitary use with a bool. Reviewed-by:
Michael Paquier <michael(at)paquier(dot)xyz> Discussion:
https://www.postgresql.org/message-id/flat/a6f91ead-0ce4-2a34-062b-7ab9813ea308%402ndquadrant.com
https://git.postgresql.org/pg/commitdiff/c096a804d9dcc46f1a8ebf2742696aca90b2dfcf
– Make lsn argument of walrcv_create_slot() optional. Some callers are not using
it, so it’s wasteful to have to specify it. Reviewed-by: Masahiko Sawada
<masahiko(dot)sawada(at)2ndquadrant(dot)com> Discussion:
https://www.postgresql.org/message-id/CA+fd4k4BcYrYucNfTnK-CQX3+jsG+PRPEhHAUSo-W4P0Lec57A@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/c67a55da4ea0caa18547fd1533110e9126ba8d47
Tom Lane pushed:
– Add functions min_scale(numeric) and trim_scale(numeric). These allow better
control of trailing zeroes in numeric values. Pavel Stehule, based on an old
proposal of Marko Tiikkaja’s; review by Karl Pinc Discussion:
https://postgr.es/m/CAFj8pRDjs-navGASeF0Wk74N36YGFJ+v=Ok9_knRa7vDc-qugg@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/20d6225d1656102534a73d9675bc531ff0e5203b
– Reduce the number of GetFlushRecPtr() calls done by walsenders. Since the WAL
flush position only moves forward, it’s safe to cache its previous value
within each walsender process, and update from shared memory only once we’ve
caught up to the previously-seen value. When there are many active walsenders,
this makes for a very significant reduction in the amount of contention on the
XLogCtl->info_lck spinlock. This patch also adjusts the logic so that we
update our idea of the flush position after processing a WAL record, rather
than beforehand. This may cause us to realize we’re not caught up when the
preceding coding would’ve thought that we were, but that seems all to the
good; it may avoid a useless sleep-and-wakeup cycle. Back-patch to v12. The
contention problem exists in prior branches, but it’s much less severe (due to
inefficiencies elsewhere) so there seems no need to take any risk of
back-patching further. Pierre Ducroquet, reviewed by Julien Rouhaud
Discussion: https://postgr.es/m/2931018.Vxl9zapr77@pierred-pdoc
https://git.postgresql.org/pg/commitdiff/e369f3708636c66718796fc8269d253432410392
– Clean up management of IP addresses in our SSL tests. Instead of hard-wiring
the netmask as /32, allow it to be specified where we specify the server
address. This will ease changing the test to use IPv6, when/if somebody wants
to do that. Also remove the hard-wired pg_hba.conf entries for IPv6
(::1/128). These have never had any usefulness, because the client side of the
tests has always explicitly connected to $SERVERHOSTADDR which has always been
set to IPv4 (127.0.0.1). All they accomplish is to break the test on
non-IPv6-supporting hosts, and besides that they violate the express intent of
the code to minimize the server’s range of allowed connections. This could be
back-patched, perhaps, but for now I don’t see a need to. Discussion:
https://postgr.es/m/1899.1578356089@sss.pgh.pa.us
https://git.postgresql.org/pg/commitdiff/2bd0735b954b14dcfab85d57fc4a0c7f9826fbb1
– Fix handling of generated columns in ALTER TABLE. ALTER TABLE failed if a
column referenced in a GENERATED expression had been added or changed in type
earlier in the ALTER command. That’s because the GENERATED expression needs to
be evaluated against the table’s updated tuples, but it was being evaluated
against the original tuples. (Fortunately the executor has adequate
cross-checks to notice the mismatch, so we just got an obscure error message
and not anything more dangerous.) Per report from Andreas Joseph Krogh.
Back-patch to v12 where GENERATED was added. Discussion:
https://postgr.es/m/VisenaEmail.200.231b0a41523275d0.16ea7f800c7@tc7-visena
https://git.postgresql.org/pg/commitdiff/4ac8aaa36fa24639989849c8109f8b52e9544fd1
– Improve the handling of result type coercions in SQL functions. Use the
parser’s standard type coercion machinery to convert the output column(s) of a
SQL function’s final SELECT or RETURNING to the type(s) they should have
according to the function’s declared result type. We’ll allow any case where
an assignment-level coercion is available. Previously, we failed unless the
required coercion was a binary-compatible one (and the documentation ignored
this, falsely claiming that the types must match exactly). Notably, the
coercion now accounts for typmods, so that cases where a SQL function is
declared to return a composite type whose columns are typmod-constrained now
behave as one would expect. Arguably this aspect is a bug fix, but the
overall behavioral change here seems too large to consider back-patching. A
nice side-effect is that functions can now be inlined in a few cases where we
previously failed to do so because of type mismatches. Discussion:
https://postgr.es/m/18929.1574895430@sss.pgh.pa.us
https://git.postgresql.org/pg/commitdiff/913bbd88dc6b859c70ebb48107b38d693c4c6673
– Reconsider the representation of join alias Vars. The core idea of this patch
is to make the parser generate join alias Vars (that is, ones with varno
pointing to a JOIN RTE) only when the alias Var is actually different from any
raw join input, that is a type coercion and/or COALESCE is necessary to
generate the join output value. Otherwise just generate varno/varattno
pointing to the relevant join input column. In effect, this means that the
planner’s flatten_join_alias_vars() transformation is already done in the
parser, for all cases except (a) columns that are merged by JOIN USING and are
transformed in the process, and (b) whole-row join Vars. In principle that
would allow us to skip doing flatten_join_alias_vars() in many more queries
than we do now, but we don’t have quite enough infrastructure to know that we
can do so — in particular there’s no cheap way to know whether there are any
whole-row join Vars. I’m not sure if it’s worth the trouble to add a
Query-level flag for that, and in any case it seems like fit material for a
separate patch. But even without skipping the work entirely, this should make
flatten_join_alias_vars() faster, particularly where there are nested joins
that it previously had to flatten recursively. An essential part of this
change is to replace Var nodes’ varnoold/varoattno fields with
varnosyn/varattnosyn, which have considerably more tightly-defined meanings
than the old fields: when they differ from varno/varattno, they identify the
Var’s position in an aliased JOIN RTE, and the join alias is what ruleutils.c
should print for the Var. This is necessary because the varno change
destroyed ruleutils.c’s ability to find the JOIN RTE from the Var’s varno.
Another way in which this change broke ruleutils.c is that it’s no longer
feasible to determine, from a JOIN RTE’s joinaliasvars list, which join
columns correspond to which columns of the join’s immediate input relations.
(If those are sub-joins, the joinaliasvars entries may point to columns of
their base relations, not the sub-joins.) But that was a horrid mess requiring
a lot of fragile assumptions already, so let’s just bite the bullet and add
some more JOIN RTE fields to make it more straightforward to figure that out.
I added two integer-List fields containing the relevant column numbers from
the left and right input rels, plus a count of how many merged columns there
are. This patch depends on the ParseNamespaceColumn infrastructure that I
added in commit 5815696bc. The biggest bit of code change is restructuring
transformFromClauseItem’s handling of JOINs so that the ParseNamespaceColumn
data is propagated upward correctly. Other than that and the ruleutils fixes,
everything pretty much just works, though some processing is now inessential.
I grabbed two pieces of low-hanging fruit in that line: 1. In
find_expr_references, we don’t need to recurse into join alias Vars anymore.
There aren’t any except for references to merged USING columns, which are more
properly handled when we scan the join’s RTE. This change actually fixes an
edge-case issue: we will now record a dependency on any type-coercion function
present in a USING column’s joinaliasvar, even if that join column has no
references in the query text. The odds of the missing dependency causing a
problem seem quite small: you’d have to posit somebody dropping an implicit
cast between two data types, without removing the types themselves, and then
having a stored rule containing a whole-row Var for a join whose USING merge
depends on that cast. So I don’t feel a great need to change this in the back
branches. But in theory this way is more correct. 2. markRTEForSelectPriv
and markTargetListOrigin don’t need to recurse into join alias Vars either,
because the cases they care about don’t apply to alias Vars for USING columns
that are semantically distinct from the underlying columns. This removes the
only case in which markVarForSelectPriv could be called with NULL for the RTE,
so adjust the comments to describe that hack as being strictly internal to
markRTEForSelectPriv. catversion bump required due to changes in stored
rules. Discussion: https://postgr.es/m/7115.1577986646@sss.pgh.pa.us
https://git.postgresql.org/pg/commitdiff/9ce77d75c5ab094637cc4a446296dc3be6e3c221
– Skip tab-completion tests if envar SKIP_READLINE_TESTS is defined. Experience
so far suggests that getting these tests to pass on all libedit versions that
are out there may be impossible, or require dumbing down the tests to the
point of uselessness. So we need to provide a way to skip them when the user
knows they’ll fail. An environment variable is probably the most convenient
way to deal with this; it’s easy for, e.g., a buildfarm animal’s configuration
to set up. Discussion: https://postgr.es/m/9594.1578586797@sss.pgh.pa.us
https://git.postgresql.org/pg/commitdiff/e7ee433137b6eb3678deeebc68be53d58aa1e5d3
– Extensive code review for GSSAPI encryption mechanism. Fix assorted bugs in
handling of non-blocking I/O when using GSSAPI encryption. The encryption
layer could return the wrong status information to its caller, resulting in
effectively dropping some data (or possibly in aborting a not-broken
connection), or in a “livelock” situation where data remains to be sent but
the upper layers think transmission is done and just go to sleep. There were
multiple small thinkos contributing to that, as well as one big one (failure
to think through what to do when a send fails after having already transmitted
data). Note that these errors could cause failures whether the client
application asked for non-blocking I/O or not, since both libpq and the
backend always run things in non-block mode at this level. Also get rid of
use of static variables for GSSAPI inside libpq; that’s entirely not okay
given that multiple connections could be open at once inside a single client
process. Also adjust a bunch of random small discrepancies between the
frontend and backend versions of the send/receive functions — except for
error handling, they should be identical, and now they are. Also extend the
Kerberos TAP tests to exercise cases where nontrivial amounts of data need to
be pushed through encryption. Before, those tests didn’t provide any useful
coverage at all for the cases of interest here. (They still might not,
depending on timing, but at least there’s a chance.) Per complaint from
pmc(at)citylink and subsequent investigation. Back-patch to v12 where this code
was introduced. Discussion:
https://postgr.es/m/20200109181822.GA74698@gate.oper.dinoex.org
https://git.postgresql.org/pg/commitdiff/2c0cdc8183654c090c9a1e2f1b5e96ba4634e16a
Robert Haas pushed:
– Increase the maximum value of track_activity_query_size. This one-line change
provoked a lot of discussion, but ultimately the consensus seems to be that
allowing a larger value might be useful to somebody, and probably won’t hurt
anyone who chooses not to take advantage of the higher maximum limit.
Vyacheslav Makarov, reviewed by many people. Discussion:
http://postgr.es/m/7b5ecc5a9991045e2f13c84e3047541d@postgrespro.ru
https://git.postgresql.org/pg/commitdiff/814727858918154bdde9dbdfb99c544b52eb8818
– tableam: Allow choice of toast AM. Previously, the toast table had to be
implemented by the same AM that was used for the main table, which was bad,
because the detoasting code won’t work with anything but heap. This commit
doesn’t fix the latter problem, although there’s another patch coming which
does, but it does let you pick something that works (i.e. heap, right now).
Patch by me, reviewed by Andres Freund. Discussion:
http://postgr.es/m/CA+TgmoZv-=2iWM4jcw5ZhJeL18HF96+W1yJeYrnGMYdkFFnEpQ@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/83322e38da1aa054e1b144cb37e6074a86854199
– tableam: New callback relation_fetch_toast_slice. Instead of always calling
heap_fetch_toast_slice during detoasting, invoke a table AM callback which,
when the toast table is a heap table, will be heap_fetch_toast_slice. This
makes it possible for a table AM other than heap to be used as a TOAST table.
It also completes the series of commits intended to improve the interaction of
tableam with TOAST that began with commit
8b94dab06617ef80a0901ab103ebd8754427ef5a; detoast.c is now, hopefully, fully
AM-independent. Patch by me, reviewed by Andres Freund and Peter Eisentraut.
Discussion:
http://postgr.es/m/CA+TgmoZv-=2iWM4jcw5ZhJeL18HF96+W1yJeYrnGMYdkFFnEpQ@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/ce242ae154dde3217971c6f262705d80999f4e00
– Remove bogus ‘return’. Per the buildfarm, via Michael Paquier. Discussion:
http://postgr.es/m/20200108032648.GE3413@paquier.xyz
https://git.postgresql.org/pg/commitdiff/5acf6d8bb4ec23349604c7c15111959e657ff294
– Add pg_shmem_allocations view. This tells you about allocations that have been
made from the main shared memory segment. The original patch also tried to
show information about dynamic shared memory allocation as well, but I decided
to leave that problem for another time. Andres Freund and Robert Haas,
reviewed by Michael Paquier, Marti Raudsepp, Tom Lane, Álvaro Herrera, and
Kyotaro Horiguchi. Discussion:
http://postgr.es/m/20140504114417.GM12715@awork2.anarazel.de
https://git.postgresql.org/pg/commitdiff/ed10f32e37e9a16814c25e400d7826745ae3c797
Álvaro Herrera pushed:
– pg_stat_activity: show NULL stmt start time for walsenders. Returning a
non-NULL time is pointless, sinc a walsender is not a process that would be
running normal transactions anyway, but the code was unintentionally exposing
the process start time intermittently, which was not only bogus but it also
confused monitoring systems looking for idle transactions. Fix by avoiding
all updates in walsenders. Backpatch to 11, where walsenders started
appearing in pg_stat_activity. Reported-by: Tomas Vondra Discussion:
https://postgr.es/m/20191209234409.exe7osmyalwkt5j4@development
https://git.postgresql.org/pg/commitdiff/b175bd59fa54a90d21bc541f812643ac45281b98
– Reimplement nullification of walsender timestamp. Make the value null only at
pg_stat_activity-output time, as suggested by Tom Lane, instead of messing
with the internal state. This should appease buildfarm members with
force_parallel_mode=regress, which are running parallel queries on logical
replication walsenders. The fact that walsenders can run parallel queries
should perhaps be studied more carefully, but for the moment let’s get rid of
the red blots in buildfarm. Backpatch to pg10, like the previous commit.
Discussion: https://postgr.es/m/30804.1578438763@sss.pgh.pa.us
https://git.postgresql.org/pg/commitdiff/f5d28710c707ad602cd869602e092cc9d538cbb9
– Clean up representation of flags in struct ReorderBufferTXN. This simplifies
addition of further flags. Author: Nikhil Sontakke Discussion:
https://postgr.es/m/CAMGcDxeViP+R-OL7QhzUV9eKCVjURobuY1Zijik4Ay_Ddwo4Cg@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/a7b6ab5db1d35438112f74f3531354ddd61970b5
Stephen Frost pushed:
– Improve GSSAPI Encryption startup comment in libpq. The original comment was a
bit confusing, pointed out by Alvaro Herrera. Thread:
https://postgr.es/m/20191224151520.GA16435%40alvherre.pgsql
https://git.postgresql.org/pg/commitdiff/8dd1511e39acd729020e151deb15a958300ebff5
Andrew Dunstan pushed:
– Allow ‘sslkey’ and ‘sslcert’ in postgres_fdw user mappings. This allows
different users to authenticate with different certificates. Author: Craig
Ringer
https://git.postgresql.org/pg/commitdiff/f5fd995a1a24e6571d26b1e29c4dc179112b1003
Magnus Hagander pushed:
– Clarify that pg_trgm is used in example. Reported-by: Octopus ZHANG Author:
Daniel Gustafsson
https://git.postgresql.org/pg/commitdiff/e3019f631d1f2e21667ad05f903c52d904b9048c
Noah Misch pushed:
– Maintain valid md.c state when FileClose() fails. FileClose() failure
ordinarily causes a PANIC. Suppose the user disables that PANIC via
data_sync_retry=on. After mdclose() issued a FileClose() that failed, calls
into md.c raised SIGSEGV. This fix adds repalloc() calls during mdclose();
update a comment about ignoring repalloc() cost. The rate of relation segment
count change is a minor factor; more relevant to overall performance is the
rate of mdclose() and subsequent re-opening of segments. Back-patch to v10,
where commit 45e191e3aa62d47a8bc1a33f784286b2051f45cb introduced the bug.
Reviewed by Kyotaro Horiguchi. Discussion:
https://postgr.es/m/20191222091930.GA1280238@rfd.leadboat.com
https://git.postgresql.org/pg/commitdiff/38fc056074e034087af8a1589507631682a279d1