Skip site navigation (1) Skip section navigation (2)

== PostgreSQL Weekly News - July 23 2017 ==

From: David Fetter <david(at)fetter(dot)org>
To: PostgreSQL Announce <pgsql-announce(at)postgresql(dot)org>
Subject: == PostgreSQL Weekly News - July 23 2017 ==
Date: 2017-07-23 20:46:18
Message-ID: (view raw, whole thread or download thread mbox)
Lists: pgsql-announce
== PostgreSQL Weekly News - July 23 2017 ==

PGDay Australia 2017 will be held on November 17 in Melbourne.  The CfP is open
through August 20, 2017 at

== PostgreSQL Product News ==

psqlODBC 09.06.0400 released.

barman 2.2, a backup and recovery manager for PostgreSQL, released.

psycopg2 2.7.2, a Python connector for PostgreSQL, released.

pg_chameleon 1.5, a tool for replicating from MySQL to PostgreSQL, released.

== PostgreSQL Jobs for July ==

== PostgreSQL Local ==

PGConf Local: Seattle will be held August 11 - 12, 2017.

PGDay Austin 2017 will be held on Saturday, August 26 2017.

PostgresOpen will occur September 6-8, 2017 in San Francisco.

PGBR2017 will take place in Porto Alegre, Rio Grande do Sul,
Brazil on September 14-16 2017.

PGDay.IT 2017 will take place in October 13th, in Milan, Italy.

PostgreSQL Conference Europe 2017 will be held on October 24-27, 2017 in the
Warsaw Marriott Hotel, in Warsaw, Poland.  The CfP is open through August 7, 2017.

PGConf.ASIA 2017 will take place on December 4-6 2017 in Akihabara, Tokyo,
Japan.  The CfP is open until July 31, 2017.  Send submissions to
pgconf-asia-2017-submission AT pgconf DOT asia

== PostgreSQL in the News ==

Planet PostgreSQL:

PostgreSQL Weekly News is brought to you this week by David Fetter

Submit news and announcements by Sunday at 3:00pm Pacific time.
Please send English language ones to david(at)fetter(dot)org, German language
to pwn(at)pgug(dot)de, Italian language to pwn(at)itpug(dot)org(dot)

== Applied Patches ==

Noah Misch pushed:

- MSVC: Don't link libpgcommon into pgcrypto.  Doing so was useful in
  273c458a2b3a0fb73968020ea5e9e35eb6928967 but became obsolete when
  818fd4a67d610991757b610755e3065fb99d80a5 caused postgres.exe to provide the
  relevant symbols.  No other loadable module links to libpgcommon directly.

Robert Haas pushed:

- hash: Fix write-ahead logging bugs related to init forks.  One, logging for
  CREATE INDEX was oblivious to the fact that when an unlogged table is created,
  *only* operations on the init fork should be logged.  Two, init fork buffers
  need to be flushed after they are written; otherwise, a filesystem-level copy
  following recovery may do the wrong thing.  (There may be a better fix for
  this issue than the one used here, but this is transposed from the similar
  logic already present in XLogReadBufferForRedoExtended, and a broader
  refactoring after beta2 seems inadvisable.) Amit Kapila, reviewed by Ashutosh
  Sharma, Kyotaro Horiguchi, and Michael Paquier Discussion:

- Use a real RT index when setting up partition tuple routing.  Before, we
  always used a dummy value of 1, but that's not right when the partitioned
  table being modified is inside of a WITH clause rather than part of the main
  query.  Amit Langote, reported and reviewd by Etsuro Fujita, with a comment
  change by me.  Discussion:

- Reverse-convert row types in ExecWithCheckOptions.  Just as we already do in
  ExecConstraints, and for the same reason: to improve the quality of error
  messages.  Etsuro Fujita, reviewed by Amit Langote Discussion:

- pg_rewind: Fix busted sanity check.  As written, the code would only fail the
  sanity check if none of the columns returned by the server were of the
  expected type, but we want it to fail if even one column is not of the
  expected type.  Discussion:

- pg_rewind: Fix some problems when copying files >2GB.  When incrementally
  updating a file larger than 2GB, the old code could either fail outright (if
  the client asked the server for bytes beyond the 2GB boundary) or fail to copy
  all the blocks that had actually been modified (if the server reported a file
  size to the client in excess of 2GB), resulting in data corruption.
  Generally, such files won't occur anyway, but they might if using a
  non-default segment size or if there the directory contains stray files
  unrelated to PostgreSQL.  Fix by a more prudent choice of data types.  Even
  with these improvements, this code still uses a mix of different types (off_t,
  size_t, uint64, int64) to represent file sizes and offsets, not all of which
  necessarily have the same width or signedness, so further cleanup might be in
  order here.  However, at least now they all have the potential to be 64 bits
  wide on 64-bit platforms.  Kuntal Ghosh and Michael Paquier, with a tweak by
  me.  Discussion:

Andrew Dunstan pushed:

- Use usleep instead of select for timeouts in  select() for
  pure timeouts is not portable, and in particular doesn't work on Windows.

- Improve legibility of numeric literal.
  Merge large_object.sql test into largeobject.source.  It seems pretty
  confusing to have tests named both largeobject and large_object.  The latter
  is of very recent vintage (commit ff992c074), so get rid of it in favor of
  merging into the former.  Also, enable the LO comment test that was added by
  commit 70ad7ed4e, since the later commit added the then-missing pg_upgrade
  functionality.  The large_object.sql test case is almost completely redundant
  with that, but not quite: it seems like creating a user-defined LO with an OID
  in the system range might be an interesting case for pg_upgrade, so let's keep
  it.  Like the earlier patch, back-patch to all supported branches.

Tom Lane pushed:

- Merge large_object.sql test into largeobject.source.  It seems pretty
  confusing to have tests named both largeobject and large_object.  The latter
  is of very recent vintage (commit ff992c074), so get rid of it in favor of
  merging into the former.  Also, enable the LO comment test that was added by
  commit 70ad7ed4e, since the later commit added the then-missing pg_upgrade
  functionality.  The large_object.sql test case is almost completely redundant
  with that, but not quite: it seems like creating a user-defined LO with an OID
  in the system range might be an interesting case for pg_upgrade, so let's keep
  it.  Like the earlier patch, back-patch to all supported branches.

- Doc: explain dollar quoting in the intro part of the pl/pgsql chapter.  We're
  throwing people into the guts of the syntax with not much context; let's back
  up one step and point out that this goes inside a literal in a CREATE FUNCTION
  command.  Per suggestion from Kurt Kartaltepe.  Discussion:

- Doc: fix thinko in v10 release notes.  s/log_destination/log_directory/, per
  Jov in bug #14749.  Report:

- Fix serious performance problems in json(b) to_tsvector().  In an off-list
  followup to bug #14745, Bob Jones complained that to_tsvector() on a 2MB jsonb
  value took an unreasonable amount of time and space --- enough to draw the
  wrath of the OOM killer on his machine.  On my machine, his example proved to
  require upwards of 18 seconds and 4GB, which seemed pretty bogus considering
  that to_tsvector() on the same data treated as text took just a couple hundred
  msec and 10 or so MB.  On investigation, the problem is that the
  implementation scans each string element of the json(b) and converts it to
  tsvector separately, then applies tsvector_concat() to join those separate
  tsvectors.  The unreasonable memory usage came from leaking every single one
  of the transient tsvectors --- but even without that mistake, this is an
  O(N^2) or worse algorithm, because tsvector_concat() has to repeatedly process
  the words coming from earlier elements.  We can fix it by accumulating all the
  lexeme data and applying make_tsvector() just once.  As a side benefit, that
  also makes the desired adjustment of lexeme positions far cheaper, because we
  can just tweak the running "pos" counter between JSON elements.  In passing,
  try to make the explanation of that tweak more intelligible.  (I didn't think
  that a barely-readable comment far removed from the actual code was helpful.)
  And do some minor other code beautification.

- Improve make_tsvector() to handle empty input, and simplify its callers.  It
  seemed a bit silly that each caller of make_tsvector() was laboriously
  special-casing the situation where no lexemes were found, when it would be
  easy and much more bullet-proof to make make_tsvector() handle that.

- Doc: add missing note about permissions needed to change log_lock_waits.
  log_lock_waits is PGC_SUSET, but config.sgml lacked the standard boilerplate
  sentence noting that.  Report:

- Add static assertions about pg_control fitting into one disk sector.  When
  pg_control was first designed, sizeof(ControlFileData) was small enough that a
  comment seemed like plenty to document the assumption that it'd fit into one
  disk sector.  Now it's nearly 300 bytes, raising the possibility that somebody
  would carelessly add enough stuff to create a problem.  Let's add a
  StaticAssertStmt() to ensure that the situation doesn't pass unnoticed if it
  ever occurs.  While at it, rename PG_CONTROL_SIZE to PG_CONTROL_FILE_SIZE to
  make it clearer what that symbol means, and convert the existing runtime
  comparisons of sizeof(ControlFileData) vs. PG_CONTROL_FILE_SIZE to be static
  asserts --- we didn't have that technology when this code was first written.

- Fix dumping of outer joins with empty qual lists.  Normally, a JoinExpr would
  have empty "quals" only if it came from CROSS JOIN syntax.  However, it's
  possible to get to this state by specifying NATURAL JOIN between two tables
  with no common column names, and there might be other ways too.  The code
  previously printed no ON clause if "quals" was empty; that's right for CROSS
  JOIN but syntactically invalid if it's some type of outer join.  Fix by
  printing ON TRUE in that case.  This got broken by commit 2ffa740be, which
  stopped using NATURAL JOIN syntax in ruleutils output due to its brittleness
  in the face of column renamings.  Back-patch to 9.3 where that commit
  appeared.  Per report from Tushar Ahuja.  Discussion:

- Doc: clarify description of degenerate NATURAL joins.  Claiming that NATURAL
  JOIN is equivalent to CROSS JOIN when there are no common column names is only
  strictly correct if it's an inner join; you can't say e.g. CROSS LEFT JOIN.
  Better to explain it as meaning JOIN ON TRUE, instead.  Per a suggestion from
  David Johnston.  Discussion:

- In v10 release notes, call out sequence changes as a compatibility item.  The
  previous description didn't make it clear that this change potentially breaks
  applications, partly because the entry wasn't even in the compatibility-hazard
  section.  Move and clarify.  Discussion:

- Re-establish postgres_fdw connections after server or user mapping changes.
  Previously, postgres_fdw would keep on using an existing connection even if
  the user did ALTER SERVER or ALTER USER MAPPING commands that should affect
  connection parameters.  Teach it to watch for catcache invals on these
  catalogs and re-establish connections when the relevant catalog entries
  change.  Per bug #14738 from Michal Lis.  In passing, clean up some rather
  crufty decisions in commit ae9bfc5d6 about where fields of ConnCacheEntry
  should be reset.  We now reset all the fields whenever we open a new
  connection.  Kyotaro Horiguchi, reviewed by Ashutosh Bapat and myself.
  Back-patch to 9.3 where postgres_fdw appeared.  Discussion:

- Stabilize postgres_fdw regression tests.  The new test cases added in commit
  8bf58c0d9 turn out to have output that can vary depending on the lc_messages
  setting prevailing on the test server.  Hide the remote end's error messages
  to ensure stable output.  This isn't a terribly desirable solution; we'd
  rather know that the connection failed for the expected reason and not some
  other one.  But there seems little choice for the moment.  Per buildfarm.

- Doc: update versioning information in libpq.sgml.  The descriptions of
  PQserverVersion and PQlibVersion hadn't been updated for the new two-part
  version-numbering approach.  Fix that.  In passing, remove some trailing
  whitespace elsewhere in the file.

- Update expected results for collate.linux.utf8 regression test.  I believe
  this changed as a consequence of commit 54baa4813: trying to clone the "C"
  collation now produces a true clone with collencoding -1, hence the error
  message if it's duplicate no longer specifies an encoding.  Per buildfarm
  member crake, which apparently hadn't been running this test for the last few

- Improve comments about partitioned hash table freelists.  While I couldn't
  find any live bugs in commit 44ca4022f, the comments seemed pretty far from
  adequate; in particular it was not made plain that "borrowing" entries from
  other freelists is critical for correctness.  Try to improve the commentary.
  A couple of very minor code style tweaks, as well.  Discussion:

- Fix pg_dump's handling of event triggers.  pg_dump with the --clean option
  failed to emit DROP EVENT TRIGGER commands for event triggers.  In a closely
  related oversight, it also did not emit ALTER OWNER commands for event
  triggers.  Since only superusers can create event triggers, the latter
  oversight is of little practical consequence ... but if we're going to record
  an owner for event triggers, then surely pg_dump should preserve it.  Per
  complaint from Greg Atkins.  Back-patch to 9.3 where event triggers were
  introduced.  Discussion:

Dean Rasheed pushed:

- Use MINVALUE/MAXVALUE instead of UNBOUNDED for range partition bounds.
  Previously, UNBOUNDED meant no lower bound when used in the FROM list, and no
  upper bound when used in the TO list, which was OK for single-column range
  partitioning, but problematic with multiple columns. For example, an upper
  bound of (10.0, UNBOUNDED) would not be collocated with a lower bound of
  (10.0, UNBOUNDED), thus making it difficult or impossible to define contiguous
  multi-column range partitions in some cases.  Fix this by using MINVALUE and
  MAXVALUE instead of UNBOUNDED to represent a partition column that is
  unbounded below or above respectively. This syntax removes any ambiguity, and
  ensures that if one partition's lower bound equals another partition's upper
  bound, then the partitions are contiguous.  Also drop the constraint
  prohibiting finite values after an unbounded column, and just document the
  fact that any values after MINVALUE or MAXVALUE are ignored. Previously it was
  necessary to repeat UNBOUNDED multiple times, which was needlessly verbose.
  Note: Forces a post-PG 10 beta2 initdb.  Report by Amul Sul, original patch by
  Amit Langote with some additional hacking by me.  Discussion:

- Make the new partition regression tests locale-independent.  The order of
  partitions listed by \d+ is in general locale-dependent.  Rename the
  partitions in the test added by d363d42bb9 to force them to be listed in a
  consistent order.

Teodor Sigaev pushed:

- Fix double shared memory allocation.  SLRU buffer lwlocks are allocated twice
  by oversight in commit fe702a7b3f9f2bc5bf6d173166d7d55226af82c8 where that
  locks were moved to separate tranche. The bug doesn't have user-visible
  effects except small overspending of shared memory.  Backpatch to 9.6 where it
  was introduced.  Alexander Korotkov with small editorization by me.

Álvaro Herrera pushed:

- Fix typo in comment.  Commit fd31cd265138 renamed the variable to
  skipping_blocks, but forgot to update this comment.  Noticed while inspecting

== Pending Patches ==

Amit Kapila sent in another revision of a patch to parallelize queries
containing initplans.

Shubham Barai sent in another revision of a patch to add predicate locking for
GIN indexes.

Thomas Munro sent in two more revisions of a patch to add more flexible LDAP

Alik Khilazhev sent in another revision of a patch to add Zipfian distributions
to pgbench.

Andres Freund sent in two revisions of a patch to move ExecProcNode from
dispatch to callback based model.

Alexey Chernyshov sent in a patch to add citext_pattern_ops to the citext
contrib module.

Yura Sokolov sent in another revision of a patch to fix performance degradation
of contended LWLock on NUMA.

Yugo Nagata sent in a patch to ensure that all statistics are sent after a few
DML are performed.

Marina Polyakova sent in another revision of a patch to precalculate stable

Yura Sokolov sent in two revisions of a patch to increase the size of the vacuum
ring buffer.

Mark Rofail sent in another revision of a patch to add foreign key arrays.

Victor Drobny sent in a patch to add queryto_tsquery(), which takes a 'google
like' query string and translates it to tsquery.

Robins Tharakan sent in two revisions of a patch to add --no-comments to

Mark Dilger sent in two revisions of a patch to remove abstime and friends from
the main line code base.

Fabien COELHO sent in a patch to fix the documentation of random_exponential.

Etsuro Fujita sent in two more revisions of a patch to fix the rewrite tlist.

Jeevan Ladhe sent in another revision of a patch to add support for default
partitions in declarative partitions.

Yugo Nagata sent in a patch to fix incorrect comments of XLByteToSeg() and

Thomas Munro sent in three revisions of a patch to fix join selectivity for <>

Craig Ringer sent in two revisions of a patch to introduce heap_infomask_flags
to decode infomask and infomask2.

Michaël Paquier sent in a patch to check for objaddr nullness.

Etsuro Fujita sent in two revisions of a patch to fix mishandling of WITH
CHECK OPTION constraints in direct foreign table modification.

Yugo Nagata and Fabrízio de Royes Mello traded patches to add hooks for
session_start and session_end.

Yura Sokolov sent in another revision of a patch to make an improvement to
compactify_tuples by simplifyin PageRepairFragmentation.

Alexey Chernyshov sent in a patch to add functions on GIN and GiST indexes to

Hadi Moshayedi move the declarations of ExplainBeginGroup()/ExplainEndGroup()
from explain.c to explain.h.

Marina Polyakova sent in another revision of a patch to pgbench to retry
transactions with serialization or deadlock errors.

Mengxing Liu sent in another revision of a patch to eliminate O(N^2) scaling
from rw-conflict tracking in serializable transactions using a skip list.

Dima Pavlov sent in a patch to improve perfomance for index search ANY(ARRAY[])
condition with single item.

pgsql-announce by date

Next:From: Kouhei SutouDate: 2017-07-24 07:45:51
Subject: PGroonga 1.2.3 - Make PostgreSQL fast full text search platform for all languages
Previous:From: Daniele VarrazzoDate: 2017-07-22 15:29:08
Subject: Psycopg 2.7.2 released

Privacy Policy | About PostgreSQL
Copyright © 1996-2017 The PostgreSQL Global Development Group