== PostgreSQL Weekly News - January 26, 2020 ==
От | David Fetter |
---|---|
Тема | == PostgreSQL Weekly News - January 26, 2020 == |
Дата | |
Msg-id | 20200126154501.GA16307@fetter.org обсуждение исходный текст |
Список | pgsql-announce |
== PostgreSQL Weekly News - January 26, 2020 == == PostgreSQL Product News == pg_probackup 2.2.7, a utility to manage backup and recovery of PostgreSQL database clusters, released. https://github.com/postgrespro/pg_probackup pitrery 3.0, a set of Bash scripts to manage PITR backups for PostgreSQL, released. http://dalibo.github.io/pitrery/ == PostgreSQL Jobs for January == http://archives.postgresql.org/pgsql-jobs/2020-01/ == PostgreSQL Local == pgDay Israel 2020 will take place on March 19, 2020 in Tel Aviv. http://pgday.org.il/ pgDay Paris 2020 will be held in Paris, France on March 26, 2020 at Espace Saint-Martin. https://2020.pgday.paris/ 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. http://pgconf.in/ PostgreSQL@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. https://www.pgcon.org/2020/ PGDay.IT 2020 will take place June 11-12 in Bergamo, Italy. The CfP is open until February 8th, 2020 at midnight, as is the Call for Workshops. https://2020.pgday.it/en/ == PostgreSQL in the News == 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. == Applied Patches == Tom Lane pushed: - Silence minor compiler warnings. Ensure that ClassifyUtilityCommandAsReadOnly() has defined behavior even if TransactionStmt.kind has a value that's not one of the declared values for its enum. Suppress warnings from compilers that don't know that elog(ERROR) doesn't return, in ClassifyUtilityCommandAsReadOnly() and jsonb_set_lax(). Per Coverity and buildfarm. https://git.postgresql.org/pg/commitdiff/9c679a08f0cdedcf7f084daea3cba6ae9c3cbced - Fix out-of-memory handling in ecpglib. ecpg_build_params() would crash on a null pointer dereference if realloc() failed, due to updating the persistent "stmt" struct too aggressively. (Even without the crash, this would've leaked the old storage that we were trying to realloc.) Per Coverity. This seems to have been broken in commit 0cc050794, so back-patch into v12. https://git.postgresql.org/pg/commitdiff/44f1fc8df5dadbc5e80661660903aab4076d868f - Fix pg_dump's sigTermHandler() to use _exit() not exit(). sigTermHandler() tried to be careful to invoke only operations that are safe to do in a signal handler. But for some reason we forgot that exit(3) is not among those, because it calls atexit handlers that might do various random things. (pg_dump itself installs no atexit handlers, but e.g. OpenSSL does.) That led to crashes or lockups when attempting to terminate a parallel dump or restore via a signal. Fix by calling _exit() instead. Per bug #16199 from Raúl Marín. Back-patch to all supported branches. Discussion: https://postgr.es/m/16199-cb2f121146a96f9b@postgresql.org https://git.postgresql.org/pg/commitdiff/cd23a2019c4b8da47905e91c8a841cadac978a32 - Further tweaking of jsonb_set_lax(). Some buildfarm members were still warning about this, because in 9c679a08f I'd missed decorating one of the ereport() code paths with a dummy return. Also, adjust the error messages to be more in line with project style guide. https://git.postgresql.org/pg/commitdiff/31f403e95fdf88338d3fc9c6af80fcf6d8241044 - Clarify behavior of adding and altering a column in same ALTER command. The behavior of something like ALTER TABLE transactions ADD COLUMN status varchar(30) DEFAULT 'old', ALTER COLUMN status SET default 'current'; is to fill existing table rows with 'old', not 'current'. That's intentional and desirable for a couple of reasons: * It makes the behavior the same whether you merge the sub-commands into one ALTER command or give them separately; * If we applied the new default while filling the table, there would be no way to get the existing behavior in one SQL command. The same reasoning applies in cases that add a column and then manipulate its GENERATED/IDENTITY status in a second sub-command, since the generation expression is really just a kind of default. However, that wasn't very obvious (at least not to me; earlier in the referenced discussion thread I'd thought it was a bug to be fixed). And it certainly wasn't documented. Hence, add documentation, code comments, and a test case to clarify that this behavior is all intentional. In passing, adjust ATExecAddColumn's defaults-related relkind check so that it matches up exactly with ATRewriteTables, instead of being effectively (though not literally) the negated inverse condition. The reasoning can be explained a lot more concisely that way, too (not to mention that the comment now matches the code, which it did not before). Discussion: https://postgr.es/m/10365.1558909428@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/9b9c5f279e8261ab90dc64559911d2578288b7e9 - Improve psql's tab completion for filenames. The Readline library contains a fair amount of knowledge about how to tab-complete filenames, but it turns out that that doesn't work too well unless we follow its expectation that we use its filename quoting hooks to quote and de-quote filenames. We were trying to do such quote handling within complete_from_files(), and that's still what we have to do if we're using libedit, which lacks those hooks. But for Readline, it works a lot better if we tell Readline that single-quote is a quoting character and then provide hooks that know the details of the quoting rules for SQL and psql meta-commands. Hence, resurrect the quoting hook functions that existed in the original version of tab-complete.c (and were disabled by commit f6689a328 because they "didn't work so well yet"), and whack on them until they do seem to work well. Notably, this fixes bug #16059 from Steven Winfield, who pointed out that the previous coding would strip quote marks from filenames in SQL COPY commands, even though they're syntactically necessary there. Now, we not only don't do that, but we'll add a quote mark when you tab-complete, even if you didn't type one. Getting this to work across a range of libedit versions (and, to a lesser extent, libreadline versions) was depressingly difficult. It will be interesting to see whether the new regression test cases pass everywhere in the buildfarm. Some future patch might try to handle quoted SQL identifiers with similar explicit quoting/dequoting logic, but that's for another day. Patch by me, reviewed by Peter Eisentraut. Discussion: https://postgr.es/m/16059-8836946734c02b84@postgresql.org https://git.postgresql.org/pg/commitdiff/cd69ec66c88633c09bc9a984a7f0930e09c7c96e - Clean up formatting.c's logic for matching constant strings. seq_search(), which is used to match input substrings to constants such as month and day names, had a lot of bizarre and unnecessary behaviors. It was mostly possible to avert our eyes from that before, but we don't want to duplicate those behaviors in the upcoming patch to allow recognition of non-English month and day names. So it's time to clean this up. In particular: * seq_search scribbled on the input string, which is a pretty dangerous thing to do, especially in the badly underdocumented way it was done here. Fortunately the input string is a temporary copy, but that was being made three subroutine levels away, making it something easy to break accidentally. The behavior is externally visible nonetheless, in the form of odd case-folding in error reports about unrecognized month/day names. The scribbling is evidently being done to save a few calls to pg_tolower, but that's such a cheap function (at least for ASCII data) that it's pretty pointless to worry about. In HEAD I switched it to be pg_ascii_tolower to ensure it is cheap in all cases; but there are corner cases in Turkish where this'd change behavior, so leave it as pg_tolower in the back branches. * seq_search insisted on knowing the case form (all-upper, all-lower, or initcap) of the constant strings, so that it didn't have to case-fold them to perform case-insensitive comparisons. This likewise seems like excessive micro-optimization, given that pg_tolower is certainly very cheap for ASCII data. It seems unsafe to assume that we know the case form that will come out of pg_locale.c for localized month/day names, so it's better just to define the comparison rule as "downcase all strings before comparing". (The choice between downcasing and upcasing is arbitrary so far as English is concerned, but it might not be in other locales, so follow citext's lead here.) * seq_search also had a parameter that'd cause it to report a match after a maximum number of characters, even if the constant string were longer than that. This was not actually used because no caller passed a value small enough to cut off a comparison. Replicating that behavior for localized month/day names seems expensive as well as useless, so let's get rid of that too. * from_char_seq_search used the maximum-length parameter to truncate the input string in error reports about not finding a matching name. This leads to rather confusing reports in many cases. Worse, it is outright dangerous if the input string isn't all-ASCII, because we risk truncating the string in the middle of a multibyte character. That'd lead either to delivering an illegible error message to the client, or to encoding-conversion failures that obscure the actual data problem. Get rid of that in favor of truncating at whitespace if any (a suggestion due to Alvaro Herrera). In addition to fixing these things, I const-ified the input string pointers of DCH_from_char and its subroutines, to make sure there aren't any other scribbling-on-input problems. The risk of generating a badly-encoded error message seems like enough of a bug to justify back-patching, so patch all supported branches. Discussion: https://postgr.es/m/29432.1579731087@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/4c70098ffa8cf19e79e7b124ccac05dd338c937b - Fix an oversight in commit 4c70098ff. I had supposed that the from_char_seq_search() call sites were all passing the constant arrays you'd expect them to pass ... but on looking closer, the one for DY format was passing the days[] array not days_short[]. This accidentally worked because the day abbreviations in English are all the same as the first three letters of the full day names. However, once we took out the "maximum comparison length" logic, it stopped working. As penance for that oversight, add regression test cases covering this, as well as every other switch case in DCH_from_char() that was not reached according to the code coverage report. Also, fold the DCH_RM and DCH_rm cases into one --- now that seq_search is case independent, there's no need to pass different comparison arrays for those cases. Back-patch, as the previous commit was. https://git.postgresql.org/pg/commitdiff/9a3a75cb81d3b060b8e76001d04c78ab4ce0dcef - Add configure probe for rl_completion_suppress_quote. I had supposed that all versions of Readline that have filename quoting hooks also have the rl_completion_suppress_quote variable. But it seems OpenBSD managed to find a version someplace that does not, so we'll have to expend a separate configure probe for that. (Light testing suggests that this version also lacks the bugs that make it necessary to frob that variable. Hooray!) Per buildfarm. https://git.postgresql.org/pg/commitdiff/c32704441d47cc1cbb36367a429814511edb6ffd - Clean up EXPLAIN's handling of per-worker details. Previously, it was possible for EXPLAIN ANALYZE of a parallel query to produce several different "Workers" fields for a single plan node, because different portions of explain.c independently generated per-worker data and wrapped that output in separate fields. This is pretty bogus, especially for the structured output formats: even if it's not technically illegal, most programs would have a hard time dealing with such data. To improve matters, add infrastructure that allows redirecting per-worker values into a side data structure, and then collect that data into a single "Workers" field after we've finished running all the relevant code for a given plan node. There are a few visible side-effects: * In text format, instead of something like Sort Method: external merge Disk: 4920kB Worker 0: Sort Method: external merge Disk: 5880kB Worker 1: Sort Method: external merge Disk: 5920kB Buffers: shared hit=682 read=10188, temp read=1415 written=2101 Worker 0: actual time=130.058..130.324 rows=1324 loops=1 Buffers: shared hit=337 read=3489, temp read=505 written=739 Worker 1: actual time=130.273..130.512 rows=1297 loops=1 Buffers: shared hit=345 read=3507, temp read=505 written=744 you get Sort Method: external merge Disk: 4920kB Buffers: shared hit=682 read=10188, temp read=1415 written=2101 Worker 0: actual time=130.058..130.324 rows=1324 loops=1 Sort Method: external merge Disk: 5880kB Buffers: shared hit=337 read=3489, temp read=505 written=739 Worker 1: actual time=130.273..130.512 rows=1297 loops=1 Sort Method: external merge Disk: 5920kB Buffers: shared hit=345 read=3507, temp read=505 written=744 * When JIT is enabled, any relevant per-worker JIT stats are attached to the child node of the Gather or Gather Merge node, which is where the other per-worker output has always been. Previously, that info was attached directly to a Gather node, or missed entirely for Gather Merge. * A query's summary JIT data no longer includes a bogus "Worker Number: -1" field. A notable code-level change is that indenting for lines of text-format output should now be handled by calling "ExplainIndentText(es)", instead of hard-wiring how much space to emit. This seems a good deal cleaner anyway. This patch also adds a new "explain.sql" regression test script that's dedicated to testing EXPLAIN. There is more that can be done in that line, certainly, but for now it just adds some coverage of the XML and YAML output formats, which had been completely untested. Although this is surely a bug fix, it's not clear that people would be happy with rearranging EXPLAIN output in a minor release, so apply to HEAD only. Maciek Sakrejda and Tom Lane, based on an idea of Andres Freund's; reviewed by Georgios Kokolatos Discussion: https://postgr.es/m/CAOtHd0AvAA8CLB9Xz0wnxu1U=zJCKrr1r4QwwXi_kcQsHDVU=Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/10013684970453a0ddc86050bba813c611114321 Amit Kapila pushed: - Allow vacuum command to process indexes in parallel. This feature allows the vacuum to leverage multiple CPUs in order to process indexes. This enables us to perform index vacuuming and index cleanup with background workers. This adds a PARALLEL option to VACUUM command where the user can specify the number of workers that can be used to perform the command which is limited by the number of indexes on a table. Specifying zero as a number of workers will disable parallelism. This option can't be used with the FULL option. Each index is processed by at most one vacuum process. Therefore parallel vacuum can be used when the table has at least two indexes. The parallel degree is either specified by the user or determined based on the number of indexes that the table has, and further limited by max_parallel_maintenance_workers. The index can participate in parallel vacuum iff it's size is greater than min_parallel_index_scan_size. Author: Masahiko Sawada and Amit Kapila Reviewed-by: Dilip Kumar, Amit Kapila, Robert Haas, Tomas Vondra, Mahendra Singh and Sergei Kornilov Tested-by: Mahendra Singh and Prabhat Sahu Discussion: https://postgr.es/m/CAD21AoDTPMgzSkV4E3SFo1CH_x50bf5PqZFQf4jmqjk-C03BWg@mail.gmail.com https://postgr.es/m/CAA4eK1J-VoR9gzS5E75pcD-OH0mEyCdp8RihcwKrcuw7J-Q0+w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/40d964ec997f64227bc0ff5e058dc4a5770a70a9 - Fix the computation of max dead tuples during the vacuum. In commit 40d964ec99, we changed the way memory is allocated for dead tuples but forgot to update the place where we compute the maximum number of dead tuples. This could lead to invalid memory requests. Reported-by: Andres Freund Diagnosed-by: Andres Freund Author: Masahiko Sawada Reviewed-by: Amit Kapila and Dilip Kumar Discussion: https://postgr.es/m/20200121060020.e3cr7s7fj5rw4lok@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/79a3efb84d09b1e98ad7bb2756fa570efb578d1d Heikki Linnakangas pushed: - Fix crash in BRIN inclusion op functions, due to missing datum copy. The BRIN add_value() and union() functions need to make a longer-lived copy of the argument, if they want to store it in the BrinValues struct also passed as argument. The functions for the "inclusion operator classes" used with box, range and inet types didn't take into account that the union helper function might return its argument as is, without making a copy. Check for that case, and make a copy if necessary. That case arises at least with the range_union() function, when one of the arguments is an 'empty' range: CREATE TABLE brintest (n numrange); CREATE INDEX brinidx ON brintest USING brin (n); INSERT INTO brintest VALUES ('empty'); INSERT INTO brintest VALUES (numrange(0, 2^1000::numeric)); INSERT INTO brintest VALUES ('(-1, 0)'); SELECT brin_desummarize_range('brinidx', 0); SELECT brin_summarize_range('brinidx', 0); Backpatch down to 9.5, where BRIN was introduced. Discussion: https://www.postgresql.org/message-id/e6e1d6eb-0a67-36aa-e779-bcca59167c14%40iki.fi Reviewed-by: Emre Hasegeli, Tom Lane, Alvaro Herrera https://git.postgresql.org/pg/commitdiff/4c87010981f3a9a41751e5550f6eb889ab5667e8 - Refactor XLogReadRecord(), adding XLogBeginRead() function. The signature of XLogReadRecord() required the caller to pass the starting WAL position as argument, or InvalidXLogRecPtr to continue reading at the end of previous record. That's slightly awkward to the callers, as most of them don't want to randomly jump around in the WAL stream, but start reading at one position and then read everything from that point onwards. Remove the 'RecPtr' argument and add a new function XLogBeginRead() to specify the starting position instead. That's more convenient for the callers. Also, xlogreader holds state that is reset when you change the starting position, so having a separate function for doing that feels like a more natural fit. This changes XLogFindNextRecord() function so that it doesn't reset the xlogreader's state to what it was before the call anymore. Instead, it positions the xlogreader to the found record, like XLogBeginRead(). Reviewed-by: Kyotaro Horiguchi, Alvaro Herrera Discussion: https://www.postgresql.org/message-id/5382a7a3-debe-be31-c860-cb810c08f366%40iki.fi https://git.postgresql.org/pg/commitdiff/38a957316d7e46d4b00de40f43966984a463d80a Michaël Paquier pushed: - Add GUC variables for stat tracking and timeout as PGDLLIMPORT. This helps integration of extensions with Windows. The following parameters are changed: - idle_in_transaction_session_timeout (9.6 and newer versions) - lock_timeout - statement_timeout - track_activities - track_counts - track_functions Author: Pascal Legrand Reviewed-by: Amit Kamila, Julien Rouhaud, Michael Paquier Discussion: https://postgr.es/m/1579298868581-0.post@n3.nabble.com Backpatch-through: 9.4 https://git.postgresql.org/pg/commitdiff/62c9b522311afd791fd92fe46a294f7e21f10540 - Fix concurrent indexing operations with temporary tables. Attempting to use CREATE INDEX, DROP INDEX or REINDEX with CONCURRENTLY on a temporary relation with ON COMMIT actions triggered unexpected errors because those operations use multiple transactions internally to complete their work. Here is for example one confusing error when using ON COMMIT DELETE ROWS: ERROR: index "foo" already contains data Issues related to temporary relations and concurrent indexing are fixed in this commit by enforcing the non-concurrent path to be taken for temporary relations even if using CONCURRENTLY, transparently to the user. Using a non-concurrent path does not matter in practice as locks cannot be taken on a temporary relation by a session different than the one owning the relation, and the non-concurrent operation is more effective. The problem exists with REINDEX since v12 with the introduction of CONCURRENTLY, and with CREATE/DROP INDEX since CONCURRENTLY exists for those commands. In all supported versions, this caused only confusing error messages to be generated. Note that with REINDEX, it was also possible to issue a REINDEX CONCURRENTLY for a temporary relation owned by a different session, leading to a server crash. The idea to enforce transparently the non-concurrent code path for temporary relations comes originally from Andres Freund. Reported-by: Manuel Rigger Author: Michael Paquier, Heikki Linnakangas Reviewed-by: Andres Freund, Álvaro Herrera, Heikki Linnakangas Discussion: https://postgr.es/m/CA+u7OA6gP7YAeCguyseusYcc=uR8+ypjCcgDDCTzjQ+k6S9ksQ@mail.gmail.com Backpatch-through: 9.4 https://git.postgresql.org/pg/commitdiff/a904abe2e284f570168839e52e18ef0b7f26179d - Clarify some comments in vacuumlazy.c. Author: Justin Pryzby Discussion: https://postgr.es/m/20200113004542.GA26045@telsasoft.com https://git.postgresql.org/pg/commitdiff/f942dfb952aaccb0163564c86c0b7654b8512807 - Doc: Fix and tweak documentation for ANALYZE reporting. The docs had some typos and grammar mistakes, and its indentation was inconsistent. Author: Amit Langote, Justin Pryzby Discussion: https://postgr.es/m/20200116151930.GM26045@telsasoft.com https://git.postgresql.org/pg/commitdiff/5ba40b62318e4d941497333b72d589420a48d82f - Doc: Fix list of storage parameters available for ALTER TABLE. Only the parameter parallel_workers can be used directly with ALTER TABLE. Issue introduced in 6f3a13f, so backpatch down to 10. Author: Justin Pryzby Discussion: https://postgr.es/m/20200106025623.GA12066@telsasoft.com Backpatch-through: 10 https://git.postgresql.org/pg/commitdiff/6de7bcb76f6593dcd107a6bfed645f2142bf3225 Andres Freund pushed: - Fix edge case leading to agg transitions skipping ExecAggTransReparent() calls. The code checking whether an aggregate transition value needs to be reparented into the current context has always only compared the transition return value with the previous transition value by datum, i.e. without regard for NULLness. This normally works, because when the transition function returns NULL (via fcinfo->isnull), it'll return a value that won't be the same as its input value. But there's no hard requirement that that's the case. And it turns out, it's possible to hit this case (see discussion or reproducers), leading to a non-null transition value not being reparented, followed by a crash caused by that. Instead of adding another comparison of NULLness, instead have ExecAggTransReparent() ensure that pergroup->transValue ends up as 0 when the new transition value is NULL. That avoids having to add an additional branch to the much more common cases of the transition function returning the old transition value (which is a pointer in this case), and when the new value is different, but not NULL. In branches since 69c3936a149, also deduplicate the reparenting code between the expression evaluation based transitions, and the path for ordered aggregates. Reported-By: Teodor Sigaev, Nikita Glukhov Author: Andres Freund Discussion: https://postgr.es/m/bd34e930-cfec-ea9b-3827-a8bc50891393@sigaev.ru Backpatch: 9.4-, this issue has existed since at least 7.4 https://git.postgresql.org/pg/commitdiff/affdde2e15d9df6e9736bbb7e7cd9d56049d2f5a Fujii Masao pushed: - Add GUC ignore_invalid_pages. Detection of WAL records having references to invalid pages during recovery causes PostgreSQL to raise a PANIC-level error, aborting the recovery. Setting ignore_invalid_pages to on causes the system to ignore those WAL records (but still report a warning), and continue recovery. This behavior may cause crashes, data loss, propagate or hide corruption, or other serious problems. However, it may allow you to get past the PANIC-level error, to finish the recovery, and to cause the server to start up. Author: Fujii Masao Reviewed-by: Michael Paquier Discussion: https://www.postgresql.org/message-id/CAHGQGwHCK6f77yeZD4MHOnN+PaTf6XiJfEB+Ce7SksSHjeAWtg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/41c184bc642b25f67fb1d8ee290f28805fa5a0b4 - Add pg_file_sync() to adminpack extension. This function allows us to fsync the specified file or directory. It's useful, for example, when we want to sync the file that pg_file_write() writes out or that COPY TO exports the data into, for durability. Author: Fujii Masao Reviewed-By: Julien Rouhaud, Arthur Zakirov, Michael Paquier, Atsushi Torikoshi Discussion: https://www.postgresql.org/message-id/CAHGQGwGY8uzZ_k8dHRoW1zDcy1Z7=5GQ+So4ZkVy2u=nLsk=hA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/d694e0bb793ebd6b392e6ef6a3b0a59ae66cbc95 Álvaro Herrera pushed: - Add BRIN test case. This test case was sketched in commit message 4c87010981f3 to explain an ancient bug; it translates to a coverage increase, so add it to the BRIN regression tests. https://git.postgresql.org/pg/commitdiff/611ce856f5a862a291a05d148828208e1f4ed46b Peter Eisentraut pushed: - Fix typo. https://git.postgresql.org/pg/commitdiff/a7a848844d74e63ee102717972de3e60b5f4549a - Add exclusion to headercheck. src/include/common/unicode_combining_table.h is currently not meant to be included standalone. Things could be refactored to allow it, but that would be beyond the present purpose. So adding an exclusion here seems best. Discussion: https://www.postgresql.org/message-id/10754.1579535012@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/cc25464763f0211e59a209eb50a7b7a79449051f Robert Haas pushed: - Adjust src/include/utils/jsonapi.h so it's not backend-only. The major change here is that we no longer include jsonb.h into jsonapi.h. The reason that was necessary is that jsonapi.h included several prototypes functions in jsonfuncs.c that depend on the Jsonb type. Move those prototypes to a new header, jsonfuncs.h, and include it where needed. The other change is that JsonEncodeDateTime is now declared in json.h rather than jsonapi.h. Taken together, these steps eliminate all dependencies of jsonapi.h on backend-only data types and header files, so that it can potentially be included in frontend code. https://git.postgresql.org/pg/commitdiff/ce0425b162d0a8c168e1fbab5324fb1cbca4b6b7 - Split JSON lexer/parser from 'json' data type support. Keep the code that pertains to the 'json' data type in json.c, but move the lexing and parsing code to a new file jsonapi.c, a name I chose because the corresponding prototypes are in jsonapi.h. This seems like a logical division, because the JSON lexer and parser are also used by the 'jsonb' data type, but the SQL-callable functions in json.c are a separate thing. Also, the new jsonapi.c file needs to include far fewer header files than json.c, which seems like a good sign that this is an appropriate place to insert an abstraction boundary. I took the opportunity to remove a few apparently-unneeded includes from json.c at the same time. Patch by me, reviewed by David Steele, Mark Dilger, and Andrew Dunstan. The previous commit was, too, but I forgot to note it in the commit message. Discussion: http://postgr.es/m/CA+TgmoYfOXhd27MUDGioVh6QtpD0C1K-f6ObSA10AWiHBAL5bA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/11b5e3e35d3900164cb36754ee4e4dcab0bd02f0 - Remove jsonapi.c's lex_accept(). At first glance, this function seems useful, but it actually increases the amount of code required rather than decreasing it. Inline the logic into the callers instead; most callers don't use the 'lexeme' argument for anything and as a result considerable simplification is possible. Along the way, fix the header comment for the nearby function lex_expect(), which mislabeled it as lex_accept(). Patch by me, reviewed by David Steele, Mark Dilger, and Andrew Dunstan. Discussion: http://postgr.es/m/CA+TgmoYfOXhd27MUDGioVh6QtpD0C1K-f6ObSA10AWiHBAL5bA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/530609aa4263bee5b5ca205d83f0dbad098d0465 Dean Rasheed pushed: - Add functions gcd() and lcm() for integer and numeric types. These compute the greatest common divisor and least common multiple of a pair of numbers using the Euclidean algorithm. Vik Fearing, reviewed by Fabien Coelho. Discussion: https://postgr.es/m/adbd3e0b-e3f1-5bbc-21db-03caf1cef0f7@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/13661ddd7eaec7e2809ff5c29fc14653b6161036 == Pending Patches == Ranier Vilela sent in five revisions of a patch to fix some resource leaks on Windows. John Dent sent in two more revisions of a patch to make it possible to for SELECT to consume data from a REFCURSOR. Ranier Vilela sent in a patch to fix some missing locks on Windows. Andy Fan sent in a patch to avoid the distinct stage if the result is unique already. Daiho Kim sent in a patch to add a LIMIT clause to COPY. Peter Eisentraut sent in another revision of a patch to add support for other normal forms to Unicode normalization API, and add SQL functions for Unicode normalization. KaiGai Kohei and Michaël Paquier traded patches to make it possible to do a TRUNCATE on foreign tables. Michaël Paquier sent in another revision of a patch to make physical slot advance be persistent. David Fetter sent in two revisions of a patch to increase the buffer size for passwords so they're more consistent. Jesper Pedersen sent in another revision of a patch to implement index skip scan. Justin Pryzby sent in five more revisions of a patch to ensure that vacuum errcontext shows the block being processed, add an errcontext callback in lazy_vacuum_heap, add vacrelstats.stage and distinct context message, add errcontext for lazy_vacuum_index, and avoid extra calls like GetRelationName. Robert Haas and Mark Dilger traded patches to make the backend JSON parser work in front-end code. 曾文旌(义从) sent in another revision of a patch to implement global temporary tables. Thomas Munro sent in a patch to reduce WaitEventSet syscall churn. Thomas Munro sent in another revision of a patch to avoid unnecessary shmem writes in Parallel Hash Join. Luis Carril sent in another revision of a patch to support foreign data in pg_dump. Kyotaro HORIGUCHI sent in another revision of a patch to rework the WAL-skipping optimization. Julien Rouhaud sent in another revision of a patch to pass the query string to the planner, and add planning counters to pg_stat_statements. Asim R P sent in another revision of a patch to test that the replay of WAL logs on standby does not affect syncrep, and start the WAL receiver before startup process replays existing WAL. Alexander Korotkov sent in another revision of a patch to psql to show access method info. Alexander Korotkov sent in another revision of a patch to pg_rewind to add options to restore WAL files from archive. Nathan Bossart sent in two revisions of a patch to add MAIN_RELATION_CLEANUP and TOAST_TABLE_CLEANUP options to VACUUM. Thomas Munro sent in another revision of a patch to add kqueue(2) support for WaitEventSet. Masahiko Sawada sent in two revisions of a patch to fix a mistaken calculation of max_dead_tuples. Maciek Sakrejda and Tom Lane traded patches to fix an issue that caused duplicate workers entries in some EXPLAIN plans. Justin Pryzby sent in two more revisions of a patch to remove a gettext erronously re-added at 580ddce, ensure that vacuum verbose uses use ngettext() everywhere possible, makes vacuum verbose prefix write multi-line output to clients, and reduce to DEBUG status logged from vacuum_heap/index. Kyotaro HORIGUCHI sent in another revision of a patch to protect syscache from bloating with negative cache entries. Surafel Temesgen sent in another revision of a patch to implement FETCH FIRST ... WITH TIES. Kyotaro HORIGUCHI sent in another revision of a patch to implement a shared-memory-based stats collector. Sergei Kornilov sent in another revision of a patch to make it possible to reload walreceiver's conninfo. Sergei Kornilov sent in a patch to move temp slot logic to startup. Álvaro Herrera and Dilip Kumar traded patches to fix an infelicity between logical_work_mem and logical streaming of large in-progress transactions. Amit Langote sent in two more revisions of a patch to make it possible to add partitioned tables to publications. Amit Langote sent in another revision of a patch to ensure that a child's TRUNCATE and LOCK privileges are not checked when truncated recursively. Andrew Dunstan sent in another revision of a patch to add an SSL passphrase callback. Paul A Jungwirth sent in another revision of a patch to add multiranges. Amit Langote sent in a patch to fix some of the docs for progress reporting for ANALYZE. Mahendra Singh and Amit Kapila traded patches to add relation name in error messages for constraint checks. Masahiko Sawada and Amit Kapila traded patches to add a --parallel option to the vacuumdb command. Tom Lane, Artur Zakirov, and Juan José Santamaría Flecha traded patches to allow to_date() and to_timestamp() to accept localized names. Kyotaro HORIGUCHI sent in another revision of a patch to add a WAL relief vent for replication slots. Jehan-Guillaume de Rorthais sent in another revision of a patch to always expose available stats from wal receiver. Álvaro Herrera sent in another revision of a patch to fix an infelicity between DROP OWNED CASCADE and temp tables. David Christensen sent in a patch to be explicit about the behavior of REFRESH PUBLICATION's copy_data. Alexander Korotkov sent in another revision of a patch to improve the search for missing parent downlinks in amcheck. Pavel Stěhule sent in another revision of a patch to implement schema variables. Masahiko Sawada sent in another revision of a patch to make it possible to have transactions with multiple foreign servers. Mike Lissner sent in a patch to catch the documentation of ALTER TABLE's behavior with reindexing coercible types to match reality. Peter Eisentraut sent in another revision of a patch to implement polymorphic table functions. Amit Langote sent in another revision of a patch to implement runtime pruning for ModifyTable. Daniel Gustafsson sent in another revision of a patch to set min/max TLS protocol in clientside libpq. Takashi Menjo sent in a PoC patch to implement a non-volatile WAL buffer. Ranier Vilela sent in a patch to remove some redundant tests from xlog.c. Julien Rouhaud sent in another revision of a patch to show planning buffers. Jeff Davis sent in another revision of a patch to implement memory-bounded hash aggregation. Melanie Plageman sent in another revision of a patch to avoid hash join batch explosions with extreme skew and weird stats. Sehrope Sarkuni sent in another revision of a patch to implement a key management system. Nino Floris sent in another revision of a patch to add ltree, lquery, and ltxtquery binary protocol support. Vik Fearing sent in a patch to add %x to PROMPT1 and PROMPT2 in psql. Justin Pryzby sent in a patch to vacuum verbose to show pages marked allvisible/frozen/hintbits.
В списке pgsql-announce по дате отправления: