|From:||David Fetter <david(at)fetter(dot)org>|
|To:||PostgreSQL Announce <pgsql-announce(at)postgresql(dot)org>|
|Subject:||== PostgreSQL Weekly News - April 19, 2020 ==|
|Views:||Raw Message | Whole Thread | Download mbox | Resend email|
== PostgreSQL Weekly News - April 19, 2020 ==
== PostgreSQL Product News ==
pg_normalize_query 1.0, an extension to expose to SQL level a way to normalize
query similar that used by to pg_stat_statements, released.
pspg 3.0.0 a pager designed for PostgreSQL, released.
pgtt 2.0, an extension to implement global temporary tables, released.
repmgr 5.1 a replication manager for PostgreSQL, released.
pgmetrics 1.9, a command-line tool for PostgreSQL metrics, released.
Pyrseas 0.9.1, a set of utilities for comparing and synchronizing Postgres
database schemas, released.
pg_readonly 0.0.1, an extension that makes it possible to set all cluster
databases read-only, released.
== PostgreSQL Jobs for April ==
== PostgreSQL Local ==
PGCon 2020 will take place online on May 26-29, 2020.
PostgresLondon 2020 will be July 7-8, 2020 with an optional training day on
PG Day Russia will be in Saint Petersburg on July 10, 2020.
PGDay Ukraine will take place September 5th, 2020 in Lviv at the Bank Hotel.
pgDay Israel 2020 will take place on September 10, 2020 in Tel Aviv.
PGDay Austria will take place September 18, 2020 at Schloss Schoenbrunn
(Apothekertrakt) in Vienna.
== 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(at)fetter(dot)org(dot)
== Applied Patches ==
Tom Lane pushed:
- Doc: introduce and document "&zwsp;" for allowing optional line breaks. We
already had a couple of places using zero-width spaces for formatting hackery,
and we're going to need more if we ever want the PDF manuals to look decent.
But please let's not write hard-coded Unicode escapes. We can avoid that by
using a custom entity, which also provides a place to put a teeny bit of
documentation about what it is and how to use it. I'd previously posted a
patch using "&break;" for this, but on reflection that would be horrible to
grep for. Instead let's use "&zwsp;", based on the name of the Unicode symbol
("zero width space"). Discussion:
- Doc: introduce new layout for tables of functions and operators. We've long
fought with the draconian space limitations of our traditional table layout
for describing SQL functions and operators. This commit introduces a new
approach, though so far I've only applied it to a few of those tables. The
new way makes use of DocBook's support for different layouts in different rows
of a table, and allows the descriptions and examples for a function or
operator to run to several lines without as much ugliness and wasted space as
before. The core layout concept is now Name Signature
Description Example Example Result so that a function or
operator really has three table rows not one, but we group them to look like
one row by having the name column have only one entry for all three rows.
(Actually, there could be four or more rows if you wanted to have more than
one example, which is another thing that was painful before but works easily
now.) This is handled by a "morerows" annotation on the name entry, which
isn't perfect (notably, the toolchain is not smart enough to avoid breaking
these row groups across PDF pages) but there seems no better solution in
DocBook. The name column is normally fairly narrow, allowing plenty of space
for the other column(s), and not wasting too much space when one of the other
components runs to multiple lines. The varying row layout is managed by
defining named "spans" and then tagging entries with a "spanname" of "name",
"sig", "desc", "example", or "exresult". This provides a bit of semantic
annotation to go with the formatting improvement, which seems like a good
thing. (It seems that we have to re-define these spans afresh for each table,
which is annoying, but it's not any worse than the duplication involved in the
table headers. At least that gives us an opportunity to vary the relative
column widths per-table, which is handy since function tables sometimes need
much wider name columns than operator tables.) Signature entries should be
written in the style <function>fname</function>(<type>typename</type> ...)
<returnvalue>typename</returnvalue> The <returnvalue> tag produces a right
arrow before the result type name. (I'll document that convention in a
user-visible place later.) While this provides significantly more horizontal
space than before for examples, it's still true that PDF output is a lot
narrower than typical webpage viewing windows, so some examples need to be
broken in places where there is no whitespace. I've added &zwsp; markers in
suitable places to allow the tables to render warning-free in PDF. I've so
far converted only the date/time operator, date/time function, and enum
function tables in sections 9.9 and 9.10; these were chosen to provide a
reasonable sample of the formatting problems that need to be solved. Assuming
that this looks good on the website and doesn't provoke howls of anguish, I'll
work on the other similar tables in the near future. There's a moderate
amount of new editorial content in this patch along with the raw formatting
changes; for instance I had to write text descriptions for operators that
lacked them. I failed to resist the temptation to improve some other
descriptions and examples, too. Patch by me, with thanks to Alexander Lakhin
for assistance with figuring out some formatting issues. Discussion:
- Account for collation when coercing the output of a SQL function. Commit
913bbd88d overlooked that the result of coerce_to_target_type might need
collation fixups. Per report from Andreas Joseph Krogh. Discussion:
- Fix cache reference leak in contrib/sepgsql. fixup_whole_row_references() did
the wrong thing with a dropped column, resulting in a commit-time warning
about a cache reference leak. I (tgl) added a test case exercising this, but
back-patched the test only as far as v10; the patch didn't apply cleanly to
9.6 and it didn't seem worth the trouble to adapt it. The bug is pretty old
though, so apply the code change all the way back. Michael Luo, with cosmetic
improvements by me Discussion:
- Fix possible future cache reference leak in ALTER EXTENSION ADD/DROP.
recordExtObjInitPriv and removeExtObjInitPriv were sloppy about calling
ReleaseSysCache. The cases cannot occur given current usage in ALTER
EXTENSION ADD/DROP, since we wouldn't get here for these relkinds; but it
seems wise to clean up better. In passing, extend test logic in test_pg_dump
to exercise the dropped-column code paths here. Since the case is unreachable
at present, there seems no great need to back-patch; hence fix HEAD only.
Kyotaro Horiguchi, with test case and comment adjustments by me Discussion:
- Doc: revise formatting of function/operator tables. The table layout ideas
proposed in commit e894c6183 were not as widely popular as I'd hoped. After
discussion, we've settled on a layout that's effectively a single-column table
with cell contents much like a <varlistentry> description of the function or
operator; though we're not actually using <varlistentry>, because it'd add way
too much vertical space. Instead the effect is accomplished using line-break
processing instructions to separate the description and example(s), plus CSS
or FO customizations to produce indentation of all but the first line in each
cell. While technically this is a bit grotty, it does have the advantage that
we won't need to write nearly as much boilerplate markup. This patch updates
tables 9.30, 9.31, and 9.33 (which were touched by the previous patch) to the
revised style, and additionally converts table 9.10. A lot of work still
remains to do, but hopefully it won't be too controversial. Thanks to Andrew
Dunstan, Pierre Giraud, Robert Haas, Alvaro Herrera, David Johnston, Jonathan
Katz, Isaac Morland for valuable ideas. Discussion:
- Fix race conditions in synchronous standby management. We have repeatedly seen
the buildfarm reach the Assert(false) in SyncRepGetSyncStandbysPriority. This
apparently is due to failing to consider the possibility that the
sync_standby_priority values in shared memory might be inconsistent; but they
will be whenever only some of the walsenders have updated their values after a
change in the synchronous_standby_names setting. That function is vastly too
complex for what it does, anyway, so rewriting it seems better than trying to
apply a band-aid fix. Furthermore, the API of SyncRepGetSyncStandbys is
broken by design: it returns a list of WalSnd array indexes, but there is
nothing guaranteeing that the contents of the WalSnd array remain stable.
Thus, if some walsender exits and then a new walsender process takes over that
WalSnd array slot, a caller might make use of WAL position data that it should
not, potentially leading to incorrect decisions about whether to release
transactions that are waiting for synchronous commit. To fix, replace
SyncRepGetSyncStandbys with a new function SyncRepGetCandidateStandbys that
copies all the required data from shared memory while holding the relevant
mutexes. If the associated walsender process then exits, this data is still
safe to make release decisions with, since we know that that much WAL *was*
sent to a valid standby server. This incidentally means that we no longer
need to treat sync_standby_priority as protected by the SyncRepLock rather
than the per-walsender mutex. SyncRepGetSyncStandbys is no longer used by the
core code, so remove it entirely in HEAD. However, it seems possible that
external code is relying on that function, so do not remove it from the back
branches. Instead, just remove the known-incorrect Assert. When the bug
occurs, the function will return a too-short list, which callers should treat
as meaning there are not enough sync standbys, which seems like a reasonably
safe fallback until the inconsistent state is resolved. Moreover it's
bug-compatible with what has been happening in non-assert builds. We cannot
do anything about the walsender-replacement race condition without an API/ABI
break. The bogus assertion exists back to 9.6, but 9.6 is sufficiently
different from the later branches that the patch doesn't apply at all. I chose
to just remove the bogus assertion in 9.6, feeling that the probability of a
bad outcome from the walsender-replacement race condition is too low to
justify rewriting the whole patch for 9.6. Discussion:
- Doc: sync functableentry markup choices with website style. Jonathan Katz felt
that slightly different indentation settings made for a better-looking result,
so sync stylesheet-fo.xsl (for PDF) and stylesheet.css (for non-website-style
HTML) with those choices. Discussion:
- Doc: update sections 9.1-9.3 for new function table layout. I took the
opportunity to do some copy-editing in this area as well, and to add some new
material such as a note about BETWEEN's syntactical peculiarities. Of note is
that quite a few of the examples of transcendental functions needed to be
updated, because the displayed output no longer matched what you get on a
modern server. I believe some of these cases are side-effects of the new Ryu
algorithm in float8out. Others appear to be because the examples predate the
addition of type numeric, and were expecting that float8 calculations would be
done although the given syntax would actually lead to calling the numeric
Peter Eisentraut pushed:
- Improve error messages after LoadLibrary(). Move the file name to a format
parameter to ease translatability. Add error code where missing. Make the
- Fix update-unicode target. The normalization-check target needs to be run
last, after moving the newly generated files into place. Also, we need an
additional dependency so that unicode_norm.o is rebuilt first. Otherwise,
norm_test will still test the old files but against the new expected results,
which will probably fail.
Amit Kapila pushed:
- Cosmetic fixups for WAL usage work. Reported-by: Justin Pryzby and Euler
Taveira Author: Justin Pryzby and Julien Rouhaud Reviewed-by: Amit Kapila
- Comments and doc fixes for commit 40d964ec99. Reported-by: Justin Pryzby
Author: Justin Pryzby, with few changes by me Reviewed-by: Amit Kapila and
Sawada Masahiko Discussion:
- Fix the usage of parallel and full options of vacuum command. Earlier we were
inconsistent in allowing the usage of parallel and full options. Change it
such that we disallow them only when they are combined in a way that we don't
support. In passing, improve the comments in some of the existing tests of
parallel vacuum. Reported-by: Tushar Ahuja Author: Justin Pryzby, Amit Kapila
Reviewed-by: Sawada Masahiko, Michael Paquier, Mahendra Singh Thalor and Amit
Robert Haas pushed:
- Rename pg_validatebackup to pg_verifybackup some more. The previous commit
missed an instance. Noriyoshi Shinoda Discussion:
- Document the backup manifest file format. Patch by me, at the request of
Andres Freund. Reviewed by Justin Pryzby, Erik Rijkers, Álvaro Herrera, and
Andrew Dunstan. Discussion:
Andrew Dunstan pushed:
- Print policy name in perlcritic messages. This makes it easier to do a web
search for details of the policy that's been violated, as well as displaying
the name that might be needed for a policy override. Various perlcritic
settings changes are being discussed, but this one should be uncontroversial.
- Use perl warnings pragma consistently. We've had a mixture of the warnings
pragma, the -w switch on the shebang line, and no warnings at all. This patch
removes the -w swicth and add the warnings pragma to all perl sources missing
it. It raises the severity of the TestingAndDebugging::RequireUseWarnings
perlcritic policy to level 5, so that we catch any future violations.
- Use perl's $/ more idiomatically. This replaces a few occurrences of ugly code
with a more clean and idiomatic usage. The problem was highlighted by
perlcritic, but we're not enforcing the policy that led to the discovery.
- Set Perl search path more idiomatically. Back in commits 1df92eeafe,
f884a96819, and 592123efbb I used some hackish code to set the script search
path, unaware despite decades of perl that there was a completely standard way
to do this. This patch changes those cases to use the standard perl FindBin
- Stop requiring an explicit return from perl subroutines. The consensus of the
project appears to be that this provides little benefit and is simply an
annoyance. Discussion: https://email@example.com
- Only provide new libpq sslpasskey hook for openssl-enabled builds. In commit
4dc6355210 I neglected to put #ifdef USE_OPENSSL around the declarations of
the new items. This is remedied here. Per complaint from Daniel Gustafsson.
- Use a slightly more liberal regex to detect Visual Studio version. Apparently
in some language versions of Visual Studio nmake outputs some material after
the version number and before the end of the line. This has been seen in
Chinese versions. Therefore, we no longer demand that the version string comes
at the end of a line. Per complaint from Cuiping Lin. Backpatch to all live
- Only provide openssl_tls_init_hook if building with openssl. This should have
been protected by #ifdef USE_OPENSSL in commit 896fcdb230. Per the real
complaint this time from Daniel Gustafsson.
- Revert "Only provide new libpq sslpasskey hook for openssl-enabled builds".
This reverts commit 9e24109f1a4e4d8d1d372b004d6a0dd06e673fe7. This caused
build errors when building without openssl, and it's simplest just to revert
Peter Geoghegan pushed:
- Harmonize nbtree page split point code. An nbtree split point can be thought
of as a point between two adjoining tuples from an imaginary version of the
page being split that includes the incoming/new item (in addition to the items
that really are on the page). These adjoining tuples are called the lastleft
and firstright tuples. The variables that represent split points contained a
field called firstright, which is an offset number of the first data item from
the original page that goes on the new right page. The corresponding tuple
from origpage was usually the same thing as the actual firstright tuple, but
not always: the firstright tuple is sometimes the new/incoming item instead.
This situation seems unnecessarily confusing. Make things clearer by renaming
the origpage offset returned by _bt_findsplitloc() to "firstrightoff". We now
have a firstright tuple and a firstrightoff offset number which are comparable
to the newitem/lastleft tuples and the newitemoff/lastleftoff offset numbers
respectively. Also make sure that we are consistent about how we describe
nbtree page split point state. Push the responsibility for dealing with
pg_upgrade'd !heapkeyspace indexes down to lower level code, relieving
_bt_split() from dealing with it directly. This means that we always have a
palloc'd left page high key on the leaf level, no matter what. This enables
simplifying some of the code (and code comments) within _bt_split(). Finally,
restructure the page split code to make it clearer why suffix truncation
(which only takes place during leaf page splits) is completely different to
the first data item truncation that takes place during internal page splits.
Tuples are marked as having fewer attributes stored in both cases, and the
firstright tuple is truncated in both cases, so it's easy to imagine somebody
missing the distinction.
- Make _bt_insertonpg() more like _bt_split(). It seems like a good idea for
nbtree's retail insert code to be absolutely consistent with nbtree's page
split code for anything that naturally requires equivalent handling. Anything
that concerns inserting newitem (which is handled as part of the page split
atomic action when a page split is required) should work in exactly the same
way. With that in mind, make _bt_insertonpg() handle 'cbuf' in a way that
- Add defensive "split_only_page" nbtree assertion. Clearly it's not okay for
nbtree to split a page that is the only page on its level, and then find that
it has to split the parent one level up in turn. There is simply no code to
handle the split_only_page case in the _bt_insertonpg() "newitem won't fit"
branch (only the "newitem fits" branch handles split_only_page). Add a
defensive assertion that will fail if a split_only_page call to
_bt_insertonpg() somehow ends up splitting the target/parent page. I
(pgeoghegan) believe that we don't need split_only_page handling for the
"newitem won't fit" branch because anybody calling _bt_insertonpg() like this
would have to hold a lock on the same one and only child page.
- Rearrange _bt_insertonpg() "update metapage" code. Nest the "update metapage
as part of insert into root-like page" branch inside the broader "insert into
internal page" branch. This improves readability.
- Remove obsolete "hole in center of page" comment. A comment from the Berkeley
days incorrectly claimed that the page management code cares about the
contents of the hole in the center of the page (at least in the case of the
left half of an nbtree page split). Commit 8fa30f906be added an addendum that
stated that the original comment was "probably obsolete". It's definitely
obsolete, though, so remove the original comment plus the addendum.
- Slightly simplify nbtree split point choice loop. Spotted during post-commit
review of the nbtree deduplication commit (commit 0d861bbb).
Álvaro Herrera pushed:
- Silence Perl warning. Now that warnings are enabled across the board, this
code that tries to print an undef variable emits one. Silently printing the
empty string achieves the previous behavior. Author: Álvaro Herrera
<alvherre(at)alvh(dot)no-ip(dot)org> Reviewed-by: Andrew Dunstan
Noah Misch pushed:
- Add a wait_for_catchup() before immediate stop of a test master. Per buildfarm
member hoverfly, a slow walsender could make the test fail. Back-patch to
v10, where the test was introduced. Discussion:
Michaël Paquier pushed:
- Fix collection of typos and grammar mistakes in the tree, volume 2. This fixes
some comments and documentation new as of Postgres 13, and is a follow-up of
the work done in dd0f37e. Author: Justin Pryzby Discussion:
- Fix minor memory leak in pg_dump. A query used to read default ACL information
from the catalogs did not free a set of PQExpBuffer. Oversight in commit
e2090d9, so backpatch down to 9.6. Author: Jie Zhang Reviewed-by: Sawada
- Disable silently generation of manifests with servers <= 12 in pg_basebackup.
Since 0d8c9c1, pg_basebackup would generate an error if connected to a backend
version older than 12 where backup manifests are not supported. Avoiding this
error is possible by using the --no-manifest option. This error handling
could be confusing for some users, where patching a backup script that
interacts with multiple backend versions would cause the addition of
--no-manifest to potentially not generate a backup manifest even for Postgres
13 and newer versions. As we want to encourage the use of backup manifests as
much as possible, this commit silently disables manifests where not supported,
instead of generating an error. While on it, rework a bit the code to make it
more consistent with the surroundings when generating the BASE_BACKUP command.
Per discussion with Andres Freund, Stephen Frost, Robert Haas, Álvaro Herrera,
Kyotaro Horiguchi, Tom Lane, David Steele, and me. Author: Michael Paquier
- Fix minor memory leak in pg_basebackup and pg_receivewal. The result of the
query used to retrieve the WAL segment size from the backend was not getting
freed in two code paths. Both pg_basebackup and pg_receivewal exit
immediately if a failure happened on this query, so this was not an actual
problem, but it could be an issue if this code gets used for other tools in
different ways, be they future tools in this code tree or external, existing,
ones. Oversight in commit fc49e24, so backpatch down to 11. Author: Jie
Fujii Masao pushed:
- Code review for backup manifest. This commit prevents pg_basebackup from
receiving backup_manifest file when --no-manifest is specified. Previously,
when pg_basebackup was writing a tarfile to stdout, it tried to receive
backup_manifest file even when --no-manifest was specified, and reported an
error. Also remove unused -m option from pg_basebackup. Also fix typo in
BASE_BACKUP command documentation. Author: Fujii Masao Reviewed-by: Michael
Paquier, Robert Haas Discussion:
- Add index term for backup manifest in documentation. Author: Fujii Masao
Reviewed-by: Robert Haas Discussion:
David Rowley pushed:
- Remove unneeded constraint dependency tracking. It was previously thought that
remove_useless_groupby_columns() needed to keep track of which constraints the
generated plan depended upon, however, this is unnecessary. The confusion
likely arose regarding this because of check_functional_grouping(), which does
need to track the dependency to ensure VIEWs with columns which are
functionally dependant on the GROUP BY remain so. For
remove_useless_groupby_columns(), cached plans will just become invalidated
when the primary key's underlying index is removed through the normal relcache
invalidation code. Here we just remove the unneeded code which records the
dependency and updates the comments. The previous comments claimed that we
could not use UNIQUE constraints for the same optimization due to lack of a
pg_constraint record for NOT NULL constraints (which are required because
NULLs can be duplicated in a unique index). Since we don't actually need a
pg_constraint record to handle the invalidation, it looks like we could add
code to do this in the future. But not today. We're not really fixing any bug
in the code here, this fix is just to set the record straight on UNIQUE
constraints. This code was added back in 9.6, but due to lack of any bug,
we'll not be backpatching this. Reviewed-by: Tom Lane Discussion:
- Fix possible crash with GENERATED ALWAYS columns. In some corner cases, this
could also lead to corrupted values being included in the tuple. Users who
are concerned that they are affected by this should first upgrade and then
perform a base backup of their database and restore onto an off-line server.
They should then query each table with generated columns to ensure there are
no rows where the generated expression does not match a newly calculated
version of the GENERATED ALWAYS expression. If no crashes occur and no rows
are returned then you're not affected. Fixes bug #16369. Reported-by:
Cameron Ezell Discussion:
12 (where GENERATED ALWAYS columns were added.)
== Pending Patches ==
Yugo Nagata sent in another revision of a patch to implement incremental
maintenance of materialized views.
Fabien COELHO sent in another revision of a patch to pgbench to enable testing
whether a variable exists.
Zeng Wenjing sent in another revision of a patch to implement global temporary
Peter Eisentraut sent in a patch to improve the error messages about mismatching
Julien Rouhaud and Amit Kapila traded patches to fix up the WAL usage
David Rowley and Andy Fan traded patches to introduce UniqueKeys to determine
RelOptInfo unique properties, and use same to skip DISTINCT / GROUP BY if the
input is already unique.
Asif Rehman sent in two more revisions of a patch to implement parallel
Dilip Kumar sent in two more revisions of a patch to fix an infelicity between
logical_work_mem and logical streaming of large in-progress transactions.
Davinder Singh, Juan José Santamaría Flecha, Amit Kapila, and Ranier Vilela
traded patches to fix a compilation error with Microsoft Visual Studio
Mark Dilger sent in a patch to add HeapFile related perl modules.
Andrey Borodin and Magnus Hagander traded patches to allow pg_read_all_stats to
Thomas Munro sent in a patch to implement snapshot_too_old using a timer.
Kyotaro HORIGUCHI sent in a patch to pg restore to handle cfclose error
Cary Huang sent in another revision of a patch to support sequences in logical
Dilip Kumar sent in a patch to fix an issue with REPLICA IDENTITY FULL.
Richard Guo sent in a patch to fix an incremental sort crash found by sqlsmith.
Robert Haas and Thomas Munro traded patches to fix old_snapshot_threshold's
Ranier Vilela sent in a patch to nbtree to avert some some unneeded calls and
Ranier Vilela sent in a patch to fix a possible overflow on tuplesort.c.
Amit Langote sent in a patch to avoid partial nested append, which could break
run-time partition pruning.
Peter Eisentraut sent in a patch to make pgstattuple_approx accept TOAST tables.
Masahiko Sawada sent in a patch to fix an error in pg_dump involving generated
Amit Langote sent in a patch to rearrange some code in pgoutput.c, and fix some
partition logical replication TAP tests for better coverage.
Nikita Glukhov sent in a patch to return FALSE instead of NULL in jsonpath
Kyotaro HORIGUCHI sent in a patch to fix an aclchk cacheref leak.
Masahiro Ikeda sent in a patch to fix the documentation about the way to exit
Peter Geoghegan sent in a patch to redefine split interval to be space-wise.
Thomas Munro sent in a patch to rename xid to xid4.
Pavel Stěhule sent in two revisions of a patch to implement a string_to_table()
Thomas Munro sent in two revisions of a patch to expose oldSnapshotControl, add
a time->xid mapping to contrib/old_snapshot, fix some bugs in
MaintainOldSnapshotTimeMapping, add a pg_clobber_current_snapshot_timestamp(),
and truncate old snapshot XIDs before truncating CLOG.
Noah Misch sent in a patch to revert "When WalSndCaughtUp, sleep only in
Robert Haas sent in a patch to move the server's backup manifest code to a
Justin Pryzby sent in two revisions of a patch to fix explain output for
incremental sort, and fix some comment typos in same.
James Coleman sent in a patch to disable mark/restore for incremental sort, and
fix up EXEC_FLAG_REWIND for incremental sort.
Pavel Stěhule sent in a patch to make it possible to use a pager for psql's
Justin Pryzby sent in three more revisions of a patch to fix detaching tables
with inherited row triggers.
Ranier Vilela sent in a patch to remove a few unneeded uses of strlen().
Jeff Davis sent in a patch to fix a performance regression related to
|Next Message||Monica Real Amores||2020-04-21 14:06:35||pglogical 2.3.1 Now Available|
|Previous Message||Gilles Darold||2020-04-19 13:18:04||PostgreSQL Global Temporary Table v2.0|