Person of the week: https://postgresql.life/post/markus_wanner/
PGroonga 2.2.7 a full text search platform for all languages, released. https://pgroonga.github.io/
PostGIS 3.0.3, the industry standard geographic information system package for PostgreSQL, released. http://postgis.net/2020/11/20/postgis-3.0.3/
pgtt 2.2, an extension to implement global temporary tables, released. https://github.com/darold/pgtt/releases/tag/v2.2
pgAdmin4 4.28, a web- and native GUI control center for PostgreSQL, released. https://www.pgadmin.org/docs/pgadmin4/dev/release_notes_4_28.html
pgbouncer 1.15.0, a connection pooler and more for PostgreSQL, released. https://www.pgbouncer.org/2020/11/pgbouncer-1-15-0
pitrery 3.2, a set of Bash scripts to manage PITR backups for PostgreSQL, released. http://dalibo.github.io/pitrery/
pg_statement_rollback v1.1, an extension that adds server side transaction with rollback at statement level, released. https://github.com/lzlabs/pg_statement_rollback/releases/tag/v1.1
http://archives.postgresql.org/pgsql-jobs/2020-11/
Planet PostgreSQL: http://planet.postgresql.org/
PostgreSQL Weekly News is brought to you this week by David Fetter
Submit news and announcements by Sunday at 3:00pm PST8PDT to david@fetter.org.
Tom Lane pushed:
Fix fuzzy thinking about amcanmulticol versus amcaninclude. These flags should be independent: in particular an index AM should be able to say that it supports include columns without necessarily supporting multiple key columns. The included-columns patch got this wrong, possibly aided by the fact that it didn't bother to update the documentation. While here, clarify some text about amcanreturn, which was a little vague about what should happen when amcanreturn reports that only some of the index columns are returnable. Noted while reviewing the SP-GiST included-columns patch, which quite incorrectly (and unsafely) changed SP-GiST to claim amcanmulticol = true as a workaround for this bug. Backpatch to v11 where included columns were introduced. https://git.postgresql.org/pg/commitdiff/29d29d652f0be47dc42fa9d667dee5b8e1baa18a
Use "true" not "TRUE" in one ICU function call. This was evidently missed in commit 6337865f3, which generally did s/TRUE/true/ everywhere. It escaped notice up to now because ICU versions before ICU 68 provided definitions of "TRUE" and "FALSE" regardless. With ICU 68, it fails to compile. Per report from Condor. Back-patch to v11 where 6337865f3 came in. (I've not tested v10, where this call originated, but I imagine it's fine since we defined TRUE in c.h back then.) Discussion: https://postgr.es/m/7a6f3336165bfe3ca66abcda7966f9d0@stz-bg.com https://git.postgresql.org/pg/commitdiff/ad84ecc98d7e2ad81567094b8a6910b5078927a7
Do not return NULL for error cases in satisfies_hash_partition(). Since this function is used as a CHECK constraint condition, returning NULL is tantamount to returning TRUE, which would have the effect of letting in a row that doesn't satisfy the hash condition. Admittedly, the cases for which this is done should be unreachable in practice, but that doesn't make it any less a bad idea. It also seems like a dartboard was used to decide which error cases should throw errors as opposed to returning NULL. For the checks for NULL input values, I just switched it to returning false. There's some argument that an error would be better; but the case really should be can't-happen in a generated hash constraint, so it's likely not worth more code for. For the parent-relation-open-failure case, it seems like we might as well let relation_open throw an error, instead of having an impossible-to-diagnose constraint failure. Back-patch to v11 where this code came in. Discussion: https://postgr.es/m/24067.1605134819@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/4025e6c46620048804467d2ad29d31aa9ba50387
Don't Insert() a VFD entry until it's fully built. Otherwise, if FDDEBUG is enabled, the debugging output fails because it tries to read the fileName, which isn't set up yet (and should in fact always be NULL). AFAICT, this has been wrong since Berkeley. Before 96bf88d52, it would accidentally fail to crash on platforms where snprintf() is forgiving about being passed a NULL pointer for %s; but the file name intended to be included in the debug output wouldn't ever have shown up. Report and fix by Greg Nancarrow. Although this is only visibly broken in custom-made builds, it still seems worth back-patching to all supported branches, as the FDDEBUG code is pretty useless as it stands. Discussion: https://postgr.es/m/CAJcOf-cUDgm9qYtC_B6XrC6MktMPNRby2p61EtSGZKnfotMArw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/2bd49b493a52f0a21bc3fc51c355963f99ac1a4e
Further fixes for CREATE TABLE LIKE: cope with self-referential FKs. Commit 502898192 was too careless about the order of execution of the additional ALTER TABLE operations generated by expandTableLikeClause. It just stuck them all at the end, which seems okay for most purposes. But it falls down in the case where LIKE is importing a primary key or unique index and the outer CREATE TABLE includes a FOREIGN KEY constraint that needs to depend on that index. Weird as that is, it used to work, so we ought to keep it working. To fix, make parse_utilcmd.c insert LIKE clauses between index-creation and FK-creation commands in the transformed list of commands, and change utility.c so that the commands generated by expandTableLikeClause are executed immediately not at the end. One could imagine scenarios where this wouldn't work either; but currently expandTableLikeClause only makes column default expressions, CHECK constraints, and indexes, and this ordering seems fine for those. Per bug #16730 from Sofoklis Papasofokli. Like the previous patch, back-patch to all supported branches. Discussion: https://postgr.es/m/16730-b902f7e6e0276b30@postgresql.org https://git.postgresql.org/pg/commitdiff/97390fe8a6e96a153e59b0180f4303acaeb75b84
Remove undocumented IS [NOT] OF syntax. This feature was added a long time ago, in 7c1e67bd5 and eb121ba2c, but never documented in any user-facing way. (Documentation added in 6126d3e70 was commented out almost immediately, in 8272fc3f7.) That's because, while this syntax is defined by SQL:99, our implementation is only vaguely related to the standard's semantics. The standard appears to intend a run-time not parse-time test, and it definitely intends that the test should understand subtype relationships. No one has stepped up to fix that in the intervening years, but people keep coming across the code and asking why it's not documented. Let's just get rid of it: if anyone ever wants to make it work per spec, they can easily recover whatever parts of this code are still of value from our git history. If there's anyone out there who's actually using this despite its undocumented status, they can switch to using pg_typeof() instead, eg. "pg_typeof(something) = 'mytype'::regtype". That gives essentially the same semantics as what our IS OF code did. (We didn't have that function last time this was discussed, or we would have ripped out IS OF then.) Discussion: https://postgr.es/m/CAKFQuwZ2pTc-DSkOiTfjauqLYkNREeNZvWmeg12Q-_69D+sYZA@mail.gmail.com Discussion: https://postgr.es/m/BAY20-F23E9F2B4DAB3E4E88D3623F99B0@phx.gbl Discussion: https://postgr.es/m/3E7CF81D.1000203@joeconway.com https://git.postgresql.org/pg/commitdiff/926fa801ac9eb54c5275472271ec63a059904698
On macOS, use -isysroot in link steps as well as compile steps. We previously put the -isysroot switch only into CPPFLAGS, theorizing that it was only needed to find the right copies of include files. However, it seems that we also need to use it while linking programs, to find the right stub ".tbd" files for libraries. We got away without that up to now, but apparently that was mostly luck. It may also be that failures are only observed when the Xcode version is noticeably out of sync with the host macOS version; the case that's prompting action right now is that builds fail when using latest Xcode (12.2) on macOS Catalina, even though it's fine on Big Sur. Hence, add -isysroot to LDFLAGS as well. (It seems that the more common practice is to put it in CFLAGS, whence it'd be included at both compile and link steps. However, we can't mess with CFLAGS in the platform template file without confusing configure's logic for choosing default CFLAGS.) This should be back-patched, but first let's see if the buildfarm likes it on HEAD. Report and patch by James Hilliard (some cosmetic mods by me) Discussion: https://postgr.es/m/20201120003314.20560-1-james.hilliard1@gmail.com https://git.postgresql.org/pg/commitdiff/49407dc32a2931550e4ff1dea314b6a25afdfc35
Extend the geometric regression test cases a little. Add another edge-case value to "point_tbl", and add a test for the line(point, point) function. Some of the behaviors exposed here are wrong, but the idea of committing this separately is to memorialize what we were getting, and to allow easier inspection of the behavior changes caused by upcoming patches. Kyotaro Horiguchi (line() test added by me) Discussion: https://postgr.es/m/CAGf+fX70rWFOk5cd00uMfa__0yP+vtQg5ck7c2Onb-Yczp0URA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/a45272b25d6fc8f96793623545fc1f836ac39d94
Fix FPeq() and friends to get the right answers for infinities. "FPeq(infinity, infinity)" returned false, on account of getting NaN when it subtracts the two inputs. Fix that by adding a separate check for exact equality. FPle() and FPge() similarly got the wrong answer for two like-signed infinities. In those cases, we can just rearrange the comparisons to avoid potentially subtracting infinities. While the sibling functions FPne() etc accidentally gave the right answers even with the internal NaN results, it seems best to make similar adjustments to them to avoid depending on this. FPeq() has to be converted to an inline function to avoid double evaluations of its arguments, and I did the same for the others just for consistency. In passing, make the handling of NaN cases in line_eq() and point_eq_point() simpler and easier to reason about, and perhaps faster. This results in just one visible regression test change: slope() now gives DBL_MAX for two inputs of (inf,1e300), which is consistent with what it does for (1e300,inf), so that seems like a bug fix. Discussion: https://postgr.es/m/CAGf+fX70rWFOk5cd00uMfa__0yP+vtQg5ck7c2Onb-Yczp0URA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8597a48d01b6cc0b09ff626253ac93c67e5516d5
In geo_ops.c, represent infinite slope as Infinity, not DBL_MAX. Since we're assuming IEEE floats these days, there seems little reason not to do this. It has the advantage that when the slope is computed as infinite due to the presence of Inf coordinates, we get saner behavior than before from line_construct(), and thence also in some dependent operations such as finding the closest point. Also fix line_construct() to special-case slope zero. The previous coding got the right answer in most cases, but it could compute C as NaN when the point has Inf coordinates. Discussion: https://postgr.es/m/CAGf+fX70rWFOk5cd00uMfa__0yP+vtQg5ck7c2Onb-Yczp0URA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9fe649ea295f00baf6d0f0c1f9b0cb1298f64fb9
Michaël Paquier pushed:
Relax INSERT privilege requirement for CTAS and matviews WITH NO DATA. When specified, WITH NO DATA does not insert any data into the relation created, so skip checking for the insert permissions. With WITH DATA or WITH NO DATA, it is always required for the user to have CREATE privileges on the schema targeted for the relation. Note that plain CREATE TABLE AS or CREATE MATERIALIZED VIEW queries have begun to work accidentally without INSERT privilege checks as of 874fe3ae, while using EXECUTE or EXPLAIN ANALYZE would fail with the ACL check, so this makes the behavior for all the command flavors consistent with each other. This is arguably a bug fix, but there have been no complaints about the current behavior either so stable branches are not changed. While on it, document properly the privileges requirements for each commands with more tests for all the scenarios possible, and avoid a useless bulk-insert allocation when using WITH NO DATA. Author: Bharath Rupireddy Reviewed-by: Anastasia Lubennikova, Michael Paquier Discussion: https://postgr.es/m/CALj2ACWc3N8j0_9nMPz9wcAUnVcdKHzFdDZJ3hVFNEbqtcyG9w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/846005e4f3829c3eafe1f8441b80ff90657d0a29
Add tab completion for CREATE [OR REPLACE] TRIGGER in psql. 92bf7e2 has added support for this grammar. Author: Noriyoshi Shinoda Discussion: https://postgr.es/m/TU4PR8401MB115244623CF4724DCA0D507FEEE30@TU4PR8401MB1152.NAMPRD84.PROD.OUTLOOK.COM https://git.postgresql.org/pg/commitdiff/bf0aa7c4b83bcf3116c5a3c191bbc677ab3beb59
Improve failure detection with array parsing in pg_dump. Similarly to 3636efa, the checks done in pg_dump when parsing array values from catalogs have been too lax. Under memory pressure, it could be possible, though very unlikely, to finish with dumps that miss some data like: - Statistics for indexes - Run-time configuration of functions - Configuration of extensions - Publication list for a subscription No backpatch is done as this is not going to be a problem in practice. For example, if an OOM causes an array parsing to fail, a follow-up code path of pg_dump would most likely complain with an allocation failure due to the memory pressure. Author: Michael Paquier Reviewed-by: Daniel Gustafsson Discussion: https://postgr.es/m/20201111061319.GE2276@paquier.xyz https://git.postgresql.org/pg/commitdiff/13b58f8934e6252868231c3493d49b8c2b363e5d
Remove INSERT privilege check at table creation of CTAS and matview. As per discussion with Peter Eisentraunt, the SQL standard specifies that any tuple insertion done as part of CREATE TABLE AS happens without any extra ACL check, so it makes little sense to keep a check for INSERT privileges when using WITH DATA. Materialized views are not part of the standard, but similarly, this check can be confusing as this refers to an access check on a table created within the same command as the one that would insert data into this table. This commit removes the INSERT privilege check for WITH DATA, the default, that 846005e removed partially, but only for WITH NO DATA. Author: Bharath Rupireddy Discussion: https://postgr.es/m/d049c272-9a47-d783-46b0-46665b011598@enterprisedb.com https://git.postgresql.org/pg/commitdiff/878f3a19c6c8ff197e4a33f51d921a4abafcc494
Alexander Korotkov pushed:
Fujii Masao pushed:
Make the standby server promptly handle interrupt signals. This commit changes the startup process in the standby server so that it handles the interrupt signals after waiting for wal_retrieve_retry_interval on the latch and resetting it, before entering another wait on the latch. This change causes the standby server to promptly handle interrupt signals. Otherwise, previously, there was the case where the standby needs to wait extra five seconds to shutdown when the shutdown request arrived while the startup process was waiting for wal_retrieve_retry_interval on the latch. Author: Fujii Masao, but implementation idea is from Soumyadeep Chakraborty Reviewed-by: Soumyadeep Chakraborty Discussion: https://postgr.es/m/9d7e6ab0-8a53-ddb9-63cd-289bcb25fe0e@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/2945a488a3426838223a637cd326ec71fff61954
Emit log when restore_command succeeds but archived file faills to be restored. Previously, when restore_command claimed to succeed but failed to restore the file with the right name, for example, due to mis-configuration of restore_command, no log message was reported. Then the recovery failed later with an error message not directly related to the issue. This commit changes the recovery so that a log message is emitted in this error case. This would enable us to investigate what happened in this case more easily. Author: Jeff Janes, Fujii Masao Reviewed-by: Pavel Borisov, Kyotaro Horiguchi Discussion: https://postgr.es/m/CAMkU=1xkFs3Omp4JR4wMYWdam_KLuj6LXnTYfU8u3T0h=PLLMQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/a4ef0329c27156dca81714854599e7d82becb17f
Peter Eisentraut pushed:
Remove code handling removed deprecated containment operators. This removes the code that was there for handling the operators removed by 2f70fdb0644c32c4154236c2b5c241bec92eac5e. Discussion: https://www.postgresql.org/message-id/flat/20201027032511.GF9241@telsasoft.com https://git.postgresql.org/pg/commitdiff/591d282e8d3e0448ec1339c6b066e10953f040a2
Normalize comment in empty grammar rules. Change lower case / empty / to / EMPTY / for consistency with the majority. Discussion: https://www.postgresql.org/message-id/flat/e9eed669-e32d-6919-fed4-acc0daea857b%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/5664b7be5b2c2e756372e7dde7c187a11a5ab701
Remove unused and deprecated strategy numbers from BRIN code. These were dead code. Discussion: https://www.postgresql.org/message-id/flat/20201027032511.GF9241@telsasoft.com https://git.postgresql.org/pg/commitdiff/d93ccdea1d447ab7e8c48797153ce58b051f1a37
Add more tests for hashing and hash-based plans. - Test hashing of an array of a non-hashable element type. - Test UNION [DISTINCT] with hash- and sort-based plans. (Previously, only INTERSECT and EXCEPT where tested there.) - Test UNION [DISTINCT] with a non-hashable column type. This currently reverts to a sort-based plan even if enable_hashagg is on. - Test UNION/INTERSECT/EXCEPT hash- and sort-based plans with arrays as column types. Also test an array with a non-hashable element type. - Test UNION/INTERSECT/EXCEPT similarly with row types as column types. Currently, this uses only sort-based plans because there is no hashing support for row types. - Add a test case that shows that recursive queries using UNION [DISTINCT] require hashable column types. - Add a currently failing test that uses UNION DISTINCT in a cycle-detection use case using row types as column types. Discussion: https://www.postgresql.org/message-id/flat/38eccd35-4e2d-6767-1b3c-dada1eac3124%402ndquadrant.com https://git.postgresql.org/pg/commitdiff/6dd8b00807871bfd0c3ce8e18fd1f6ba1a71fbf9
Hash support for row types. Add hash functions for the record type as well as a hash operator family and operator class for the record type. This enables all the hash functionality for the record type such as hash-based plans for UNION/INTERSECT/EXCEPT DISTINCT, recursive queries using UNION DISTINCT, hash joins, and hash partitioning. Reviewed-by: Tom Lane tgl@sss.pgh.pa.us Discussion: https://www.postgresql.org/message-id/flat/38eccd35-4e2d-6767-1b3c-dada1eac3124%402ndquadrant.com https://git.postgresql.org/pg/commitdiff/01e658fa74cb7e3292448f6663b549135958003b
Rename object in test to avoid conflict. In 01e658fa74cb7e3292448f6663b549135958003b, the hash_func test creates a type t1, but apparently a test running in parallel might also use that name, depending on timing. Rename the type to avoid the issue. https://git.postgresql.org/pg/commitdiff/afaccbba787d5f1470c44ddd61c9ddaaad19e27e
Replace a macro by a function. Using a macro is ugly and not justified here. Discussion: https://www.postgresql.org/message-id/flat/4ad69a4c-cc9b-0dfe-0352-8b1b0cd36c7b@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/b5acf10cfc63ed1e0bc4eef466c0f4670a725ef3
doc: Improve tableoid description. Mention that it's useful for determining table names for partitioned tables as well as for those in inheritance hierarchies. Author: Ian Lawrence Barwick barwick@gmail.com Reviewed-by: Ashutosh Bapat ashutosh.bapat.oss@gmail.com Discussion: https://www.postgresql.org/message-id/flat/CAB8KJ=gFmBXP=P9htziOj+WM5PDAK4qc7iGQta+8kUh306kQnw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/a47834db0fb70256e676862f1d96374a9e114d82
Álvaro Herrera pushed:
Fix typo. Introduced in 90fdc259866e; backpatch to 12. Author: Erik Rijkers er@xs4all.nl Discussion: https://postgr.es/m/e92b3fba98a0c0f7afc0a2a37e765954@xs4all.nl https://git.postgresql.org/pg/commitdiff/bcbd7713324798d5a74ca640c6cf6c439bda22e4
Rename PGPROC->vacuumFlags to statusFlags. With more flags associated to a PGPROC entry that are not related to vacuum (currently existing or planned), the name "statusFlags" describes its purpose better. (The same is done to the mirroring PROC_HDR->vacuumFlags.) No functional changes in this commit. This was suggested first by Hari Babu Kommi in [1] and then by Michael Paquier at [2]. [1] https://postgr.es/m/CAJrrPGcsDC-oy1AhqH0JkXYa0Z2AgbuXzHPpByLoBGMxfOZMEQ@mail.gmail.com [2] https://postgr.es/m/20200820060929.GB3730@paquier.xyz Author: Dmitry Dolgov 9erthalion6@gmail.com Reviewed-by: Álvaro Herrera alvherre@alvh.no-ip.org Discussion: https://postgr.es/m/20201116182446.qcg3o6szo2zookyr@localhost https://git.postgresql.org/pg/commitdiff/cd9c1b3e197a9b53b840dcc87eb41b04d601a5f9
indexcmds.c: reorder function prototypes. ... out of an overabundance of neatnikism, perhaps. https://git.postgresql.org/pg/commitdiff/7684b6fbed3a0770a0d8fdcbb5cf8b61394de691
Relax lock level for setting PGPROC->statusFlags. We don't actually need a lock to set PGPROC->statusFlags itself; what we do need is a shared lock on either XidGenLock or ProcArrayLock in order to ensure MyProc->pgxactoff keeps still while we modify the mirror array in ProcGlobal->statusFlags. Some places were using an exclusive lock for that, which is excessive. Relax those to use shared lock only. procarray.c has a couple of places with somewhat brittle assumptions about PGPROC changes: ProcArrayEndTransaction uses only shared lock, so it's permissible to change MyProc only. On the other hand, ProcArrayEndTransactionInternal also changes other procs, so it must hold exclusive lock. Add asserts to ensure those assumptions continue to hold. Author: Álvaro Herrera alvherre@alvh.no-ip.org Reviewed-by: Michael Paquier michael@paquier.xyz Discussion: https://postgr.es/m/20201117155501.GA13805@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/27838981be9de35d54ffcdc6cc06b5d5ea9e0cee
Bruce Momjian pushed:
doc: improve wording of the need for analyze of exp. indexes. This is a followup commit on 3370207986. Reported-by: Justin Pryzby Discussion: https://postgr.es/m/20201112211143.GL30691@telsasoft.com Backpatch-through: 9.5 https://git.postgresql.org/pg/commitdiff/481f9dc3dc2fc779af3ab2d58216a1c2b970b20f
doc: clarify how to find pg_type_d.h in the install tree. Followup to patch 152ed04799. Reported-by: Alvaro Herrera Discussion: https://postgr.es/m/20201112202900.GA28098@alvherre.pgsql Backpatch-through: 9.5 https://git.postgresql.org/pg/commitdiff/8ad06bcbe136360296a804da7d7631a78fd15e70
doc: update bgwriter description. This clarifies exactly what the bgwriter does, which should help with tuning. Reported-by: Chris Wilson Discussion: https://postgr.es/m/160399562040.7809.7335281028960123489@wrigleys.postgresql.org Backpatch-through: 9.5 https://git.postgresql.org/pg/commitdiff/62b50ad698f8a789f92177ad72639f99d94d7d78
Amit Kapila pushed:
Peter Geoghegan pushed:
nbtree: Rename nbtinsert.c variables for consistency. Stop naming special area/opaque pointer variables 'lpageop' in contexts where it doesn't make sense. This is a holdover from a time when logic that performs tasks that are now spread across _bt_insertonpg(), _bt_findinsertloc(), and _bt_split() was more centralized. 'lpageop' denotes "left page", which doesn't make sense outside of contexts in which there isn't also a right page. Also acquire page flag variables up front within _bt_insertonpg(). This makes it closer to _bt_split() following refactoring commit bc3087b626d. This allows the page split and retail insert paths to both make use of the same variables. https://git.postgresql.org/pg/commitdiff/a034f8b60c6e9afd75f42dc420a76cb9d3875fcb
Deprecate nbtree's BTP_HAS_GARBAGE flag. Streamline handling of the various strategies that we have to avoid a page split in nbtinsert.c. When it looks like a leaf page is about to overflow, we now perform deleting LP_DEAD items and deduplication in one central place. This greatly simplifies _bt_findinsertloc(). This has an independently useful consequence: nbtree no longer relies on the BTP_HAS_GARBAGE page level flag/hint for anything important. We still set and unset the flag in the same way as before, but it's no longer treated as a gating condition when considering if we should check for already-set LP_DEAD bits. This happens at the point where the page looks like it might have to be split anyway, so simply checking the LP_DEAD bits in passing is practically free. This avoids missing LP_DEAD bits just because the page-level hint is unset, which is probably reasonably common (e.g. it happens when VACUUM unsets the page-level flag without actually removing index tuples whose LP_DEAD-bit was set recently, after the VACUUM operation began but before it reached the leaf page in question). Note that this isn't a big behavioral change compared to PostgreSQL 13. We were already checking for set LP_DEAD bits regardless of whether the BTP_HAS_GARBAGE page level flag was set before we considered doing a deduplication pass. This commit only goes slightly further by doing the same check for all indexes, even indexes where deduplication won't be performed. We don't completely remove the BTP_HAS_GARBAGE flag. We still rely on it as a gating condition with pg_upgrade'd indexes from before B-tree version 4/PostgreSQL 12. That makes sense because we sometimes have to make a choice among pages full of duplicates when inserting a tuple with pre version 4 indexes. It probably still pays to avoid accessing the line pointer array of a page there, since it won't yet be clear whether we'll insert on to the page in question at all, let alone split it as a result. Author: Peter Geoghegan pg@bowt.ie Reviewed-By: Victor Yegorov vyegorov@gmail.com Discussion: https://postgr.es/m/CAH2-Wz%3DYpc1PDdk8OVJDChGJBjT06%3DA0Mbv9HyTLCsOknGcUFg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/cf2acaf4dcb5e20204dcec4d698cb4478af533e7
Heikki Linnakangas pushed:
docs: Clarify that signal functions have no feedback. Bug #16652 complains that pg_reload_conf() returned true, even though the configuration file contained errors. That's the way pg_reload_conf() works, by design, but the documentation wasn't very clear on it. Clarify that a 'true' return value only means that the signal was sent successfully. Also add links to the system views that can be used to check the configuration files for errors. David G. Johnston, with some rewording by me. Discussion: https://www.postgresql.org/message-id/CAKFQuwax6GxhUQEes0D045UtXG-fBraM39_6UMd5JyR5K1HWCQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/dfab7f2f94812c6c3a62cfde0ec7f9e447132e64
Skip allocating hash table in EXPLAIN-only mode. Author: Alexey Bashtanov Discussion: https://www.postgresql.org/message-id/36823f65-050d-ae24-aa4d-a37726998240%40imap.cc https://git.postgresql.org/pg/commitdiff/2cccb627f10d5dd4c21806fa251e4fb61eadd28c
Make pg_rewind test case more stable. If replication is exceptionally slow for some reason, pg_rewind might run before the test row has been replicated. Add an explicit wait for it. Reported-by: Andres Freund Discussion: https://www.postgresql.org/message-id/20201120003811.iknhqwatitw2vvxf%40alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/c71f9a094b32770dcd34b9ba4909435e34583747
Thomas Munro pushed:
Add BarrierArriveAndDetachExceptLast(). Provide a way for one process to continue the remaining phases of a (previously) parallel computation alone. Later patches will use this to extend Parallel Hash Join. Author: Melanie Plageman melanieplageman@gmail.com Reviewed-by: Thomas Munro thomas.munro@gmail.com Discussion: https://postgr.es/m/CA%2BhUKG%2BA6ftXPz4oe92%2Bx8Er%2BxpGZqto70-Q_ERwRaSyA%3DafNg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/7888b0999488511e4266f2134053fa3a6505a155
Add collation versions for FreeBSD. On FreeBSD 13, use querylocale() to read the current version of libc collations. Similar to commits 352f6f2d for Windows and d5ac14f9 for GNU/Linux. Discussion: https://postgr.es/m/CAEepm%3D0uEQCpfq_%2BLYFBdArCe4Ot98t1aR4eYiYTe%3DyavQygiQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/ca051d8b101d3205f1c5faf0d1da8a523ffc95a1
Magnus Hagander pushed:
Atsushi Torikoshi sent in another revision of a patch to Enabled pg_get_backend_memory_contexts() to collect arbitrary backend process's memory contexts. Previously, pg_get_backend_memory_contexts() could only get the local memory contexts. This patch enables to get memory contexts of the arbitrary backend process which PID is specified by the argument.
Tomáš Vondra sent in two revisions of a patch to support extended statistics on expressions.
Seino Yuki and Fujii Masao traded patches to add a new pg_stat_statements_info view to the pg_stat_statements extension.
Jacob Champion and Daniel Gustafsson traded patches to support NSS as a TLS backend for libpq.
Alexandra Pervushina sent in two more revisions of a patch to make it possible to make async replicas wait for lsn to be replayed.
Álvaro Herrera and Dmitry Dolgov traded patches to remove a spurious wait from CREATE INDEX CONCURRENTLY.
Thomas Munro sent in two revisions of a patch to track relation sizes in shared memory, and provide a lock-free fast path for smgrnblocks().
Masahiro Ikeda sent in another revision of a patch to add a track_wal_io_timing GUC and a matching pg_stat_wal view to back it.
Li Japin sent in four more revisions of a patch to make it possible to terminate idle sessions using a new GUC, idle_session_timeout, and in passing, call setitimer() less often.
Masahiko Sawada and Bertrand Drouvot traded patches to add information during standby recovery conflicts, controlled with a new GUC, log_recovery_conflict_waits.
Takamichi Osumi sent in two more revisions of a patch to make it possible to disallow WAL logging during data loads.
Simon Riggs sent in five revisions of a patch to fix a situation where the documented behavior of DISABLE_PAGE_SKIPPING doesn't match the current behavior.
Ajin Cherian and Amit Kapila traded patches to implement logical decoding of two-phase transactions.
Tatsuro Yamada sent in two more revisions of a patch to add a psql command for extended statistics, \dX.
Daniel Gustafsson sent in another revision of a patch to support enabling and disabling page checksums in a running cluster.
Justin Pryzby sent in a patch to allow composite types in bootstrap and add a column to pg_statistic_ext_data, stxdexpr.
Peter Geoghegan sent in another revision of a patch to delete older versions in unique indexes to avoid page splits.
Heikki Linnakangas sent in another revision of a patch to split copy.c into four files: copy.c, which now contains the functions that are common to COPY FROM and COPY TO, copyto.c, which contains code for COPY TO, copyfrom.c which contains code for initilizing COPY FROM, and routing tuples to the correct table, and copyfromparse.c, which contains code for reading from the client/file/program, and parsing the input text/CSV/binary format into tuples.
David G. Johnston sent in another revision of a patch to clarify the fact that signal functions have no feedback.
Simon Riggs sent in a patch to add a wal_sessioninfo GUC which when turned on adds information about the user's session onto every commit or abort record.
David G. Johnston sent in a patch to clarify the documentation for batch/pipelining support in libpq.
Dean Rasheed sent in another revision of a patch to improve estimation of OR clauses.
Heikki Linnakangas sent in a patch to make the ResourceOwner implementation more efficient and expose handier interfaces to it to external code.
Aleksey Kondratov sent in a patch to add a custom GUC to the PostgreSQL FDW which controls whether it tries to keep connections, with the surprising name of keep_connections.
Takayuki Tsunakawa and Tomáš Vondra traded patches to implement INSERT batching for the PostgreSQL FDW.
Justin Pryzby and Pavel Stěhule traded patches to add a --filter option to pg_dump, which draws from a file which specifies the filters to be used, and makes argument parsing available both to the command line and to files so described.
Bharath Rupireddy sent in another revision of a patch to use standard SIGHUP and SIGTERM handlers in the autoprewarm module.
Etsuro Fujita sent in another revision of a patch to enable Asynchronous Append on postgres_fdw nodes.
Tomáš Vondra sent in a patch to fix a bug that manifested as incremental sort changing query behavior by adding a check for is_parallel_safe to get_useful_pathkeys_for_relation().
David Pirotte sent in another revision of a patch to add xid to messages when streaming, and add a "messages" option to the pgoutput output plugin. When "messages" is true, logical decoding messages (i.e. generated via pg_logical_emit_message) are sent to the slot consumer.
Junfeng (Jerome) Yang sent in another revision of a patch to fix vacuum freeze with pg_database toast attribute by changing vac_update_datfrozenxid()'s source for the pg_database tuple for current database from the disk heap table instead of system cache.
Dmitry Dolgov sent in a patch to prevent jumbling of every element in ArrayExpr. The motivation for this is that pg_stat_statements produces multiple entries for queries like SELECT something FROM table WHERE col IN (1, 2, 3, ...) depending on number of parameters, because every element of ArrayExpr is jumbled. Make Consts contribute nothing to the jumble hash if they're part of a series and at position further that specified threshold. Do the same for similar queries with VALUES as well.
Thomas Munro sent in another revision of a patch to implement WAL prefetch.
Andrew Dunstan sent in another revision of a patch to allow matching the whole DN from a client certificate.
Pavel Stěhule sent in two revisions of a patch to add shorthand for argument and local variable references to PL/pgsql.
Atsushi Torikoshi sent in two revisions of a patch to document the fact that cached plans are invalidated when statistics used to create them are updated.
Atsushi Torikoshi sent in two revisions of a patch to update the PREPARE documentation to note that pg_prepared_statements now shows how many times each prepared statement chose generic and custom plan cumulatively in the current session.
Vigneshwaran C sent in another revision of a patch to parallelize COPY.
Thomas Munro sent in another revision of a patch to minimize latch signals.
Masahiro Ikeda sent in another revision of a patch to add statistics to pg_stat_wal view for wal related parameter tuning.
Craig Ringer sent in a patch to detect and report when a LWLockAcquire() results in a simple self-deadlock due to the caller already holding the LWLock..
Craig Ringer sent in a patch to Remove bogus lwlock__acquire tracepoint from LWLockWaitForVar, pass the target LWLock* and tranche ID to LWLock tracepoint, and add to the tracepoints in LWLock routines.
Heikki Linnakangas sent in another revision of a patch to move peragg and pertrans duplicate finding to prepagg.c.
Craig Ringer sent in a patch atop the resource owner refactoring patch above which adds some systemtap/dtrace tracepoints and provides a demo systemtap script that shows some basic stats collection done using them.
Surafel Temesgen sent in another revision of a patch to implement system versioned temporal tables.
Justin Pryzby sent in two more revisions of a patch to avoid errors in brin summarization, which can happen if an index is reindexed concurrently.
Li Japin sent in a patch to use macros for calculating LWLock offset.
Kyotaro HORIGUCHI sent in another revision of a patch to implement CatCache expiration.
Peter Eisentraut sent in another revision of a patch to add support for writing CREATE FUNCTION and CREATE PROCEDURE statements for language SQL with a function body that conforms to the SQL standard.
Greg Nancarrow sent in another revision of a patch to enable parallel SELECT for "INSERT INTO ... SELECT ..." along with parallel INSERT and/or SELECT for "INSERT INTO ... SELECT ...", where it is safe to do so.
Amit Langote sent in a patch to create foreign key triggers in partitioned tables too in order to allow subsequent commit(s) to make the foreign key related events to be fired in some cases using the parent table triggers instead of those of partitions', and enforce foreign key correctly during cross-partition updates.
Laurenz Albe sent in another revision of a patch to add session statistics to pg_stat_database.
Justin Pryzby sent in another revision of a patch to pg_restore so it parses and runs separately SQL commands, and allow child partitions to be independently restored even if the parent doesn't exist, or has missing/incompatible columns.
Peter Eisentraut sent in another revision of a patch to pause recovery for insufficient parameter settings.
Peter Eisentraut sent in another revision of a patch to add support for abstract Unix-domain sockets, and make the error hint from bind() failure more accurate by showing that hint only when errno == EADDRINUSE.
Matthias van de Meent sent in a patch to Fix CLUSTER progress reporting of number of blocks scanned.
Stephen Frost sent in a patch to replace the somewhat inaccurate "default role" term with the more precise "predefined role."
Erik Rijkers sent in a patch atop the patch to add a tutorial chapter on architecture to fix some typos and do other wordsmithing.
Bharath Rupireddy sent in another revision of a patch to avoid checking INSERT privilege in CTAS and MatView in order to comply with the standard.
Gilles Darold sent in two revisions of a patch to add a hook for plugins to get control of at end of AbortCurrentTransaction, and an extension to enable statement-level rollback based on same.
Krasiyan Andreev sent in another revision of a patch to implement <null treatment> for window functions.
Álvaro Herrera sent in a patch to fix a bug in pageinspect which manifests as messages along the lines of ERROR: invalid memory alloc request size 18446744073709551451 when pages are sufficiently broken. The fix is not to attempt to print the data rather than dying.
Justin Pryzby sent in another revision of a patch to retire pg_standby.
Michaël Paquier sent in two more revisions of a patch to remove currtid() and currtid2(), cleaning up some table AMs in the process.
James Coleman sent in a patch to enforce parallel safety of pathkeys in generate_useful_gather_paths, and ensure that generate_useful_gather_paths doesn't skip unsorted subpaths.
Vigneshwaran C sent in a PoC patch to which would make it possible to get the call stack of a PostgreSQL process by connecting to the server.
Tom Lane sent in a patch to make the "cannot insert" message be more precise about the fact that the reason is that non-default values can never be inserted.