Thread: == PostgreSQL Weekly News - April 27 2014 ==

== PostgreSQL Weekly News - April 27 2014 ==

From
David Fetter
Date:
== PostgreSQL Weekly News - April 27 2014 ==

The CfP deadline for the UK conferences has been extended to May 2.
http://www.char14.info
Please submit proposals to simon@2ndQuadrant.com
http://www.postgresqlusergroup.org.uk
Please submit proposals to simon@2ndQuadrant.com

== PostgreSQL Product News ==

PG Partition Manager 1.7.0, an extension to manage time- or
serial-based table partitioning, released.
https://github.com/keithf4/pg_partman

pitrery 1.7, a set of bash scripts to manage PITR backups for
PostgreSQL, released.
http://dalibo.github.io/pitrery/

== PostgreSQL Jobs for April ==

http://archives.postgresql.org/pgsql-jobs/2014-04/threads.php

== PostgreSQL Local ==

PGCon 2014, the world-wide developer conference for PostgreSQL, will
be in Ottawa, Ontario, Canada May 20-24, 2014.
http://www.pgcon.org/2014/

The sixth PGDay Cubano be held on 13 and 14 October 2014 in Habana.
https://postgresql.uci.cu/?p=380

Postgres Open 2014 will be in Chicago, IL, USA, September 17-19.  The
CfP is open!
http://postgresopen.org/2014/callforpapers/

PostgreSQL Conference Europe 2014 will be held on October 21-24 in
Madrid, Spain, at the Hotel Miguel Angel.
http://2014.pgconf.eu/

== 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 Pacific time.
Please send English language ones to david@fetter.org, German language
to pwn@pgug.de, Italian language to pwn@itpug.org.  Spanish language
to pwn@arpug.com.ar.

== Applied Patches ==

Tom Lane pushed:

- pg_stat_statements forgot to let previous occupant of hook get
  control too.  pgss_post_parse_analyze() neglected to pass the call
  on to any earlier occupant of the post_parse_analyze_hook.  There
  are no other users of that hook in contrib/, and most likely none in
  the wild either, so this is probably just a latent bug.  But it's a
  bug nonetheless, so back-patch to 9.2 where this code was
  introduced.
  http://git.postgresql.org/pg/commitdiff/78a3c9b6a5f6cc84abaf4e13deb58c620eb2161b

- Fix broken logic in logical_heap_rewrite_flush_mappings().  It's
  blatantly obvious that commit
  4d0d607a454ee832574afd52a3c515099cc85eb3 wasn't tested.  The leak's
  real enough, though.
  http://git.postgresql.org/pg/commitdiff/c6a4ace5bf839b2480e8bb4c36bd3ec850c55c65

- Fix documentation of FmgrInfo.fn_nargs.  Some ancient comments
  claimed that fn_nargs could be -1 to indicate a variable number of
  input arguments; but this was never implemented, and is at variance
  with what we ultimately did with "variadic" functions.  Update the
  comments.
  http://git.postgresql.org/pg/commitdiff/d26b042ce577a4012b9798528f0b1bcfa6e502eb

- Allow polymorphic aggregates to have non-polymorphic state data
  types.  Before 9.4, such an aggregate couldn't be declared, because
  its final function would have to have polymorphic result type but no
  polymorphic argument, which CREATE FUNCTION would quite properly
  reject.  The ordered-set-aggregate patch found a workaround: allow
  the final function to be declared as accepting additional dummy
  arguments that have types matching the aggregate's regular input
  arguments.  However, we failed to notice that this problem applies
  just as much to regular aggregates, despite the fact that we had a
  built-in regular aggregate array_agg() that was known to be
  undeclarable in SQL because its final function had an illegal
  signature.  So what we should have done, and what this patch does,
  is to decouple the extra-dummy-arguments behavior from ordered-set
  aggregates and make it generally available for all aggregate
  declarations.  We have to put this into 9.4 rather than waiting till
  later because it slightly alters the rules for declaring ordered-set
  aggregates.  The patch turned out a bit bigger than I'd hoped
  because it proved necessary to record the extra-arguments option in
  a new pg_aggregate column.  I'd thought we could just look at the
  final function's pronargs at runtime, but that didn't work well for
  variadic final functions.  It's probably just as well though,
  because it simplifies life for pg_dump to record the option
  explicitly.  While at it, fix array_agg() to have a valid
  final-function signature, and add an opr_sanity test to notice
  future deviations from polymorphic consistency.  I also marked the
  percentile_cont() aggregates as not needing extra arguments, since
  they don't.
  http://git.postgresql.org/pg/commitdiff/f0fedfe82c8adea78354652d67c027a1a8fbce88

- Fix incorrect pg_proc.proallargtypes entries for two built-in
  functions.  pg_sequence_parameters() and pg_identify_object() have
  had incorrect proallargtypes entries since 9.1 and 9.3 respectively.
  This was mostly masked by the correct information in proargtypes,
  but a few operations such as pg_get_function_arguments() (and thus
  psql's \df display) would show the wrong data types for these
  functions' input parameters.  In HEAD, fix the wrong info, bump
  catversion, and add an opr_sanity regression test to catch future
  mistakes of this sort.  In the back branches, just fix the wrong
  info so that installations initdb'd with future minor releases will
  have the right data.  We can't force an initdb, and it doesn't seem
  like a good idea to add a regression test that will fail on existing
  installations.  Andres Freund
  http://git.postgresql.org/pg/commitdiff/a0f9358149b78c62871a0b7d3c167b78f9b2c77e

- Reset pg_stat_activity.xact_start during PREPARE TRANSACTION.  Once
  we've completed a PREPARE, our session is not running a transaction,
  so its entry in pg_stat_activity should show xact_start as null,
  rather than leaving the value as the start time of the now-prepared
  transaction.  I think possibly this oversight was triggered by
  faulty extrapolation from the adjacent comment that says
  PrepareTransaction should not call AtEOXact_PgStat, so tweak the
  wording of that comment.  Noted by Andres Freund while considering
  bug #10123 from Maxim Boguk, although this error doesn't seem to
  explain that report.  Back-patch to all active branches.
  http://git.postgresql.org/pg/commitdiff/d19bd29f07aef9e508ff047d128a4046cc8bc1e2

- Clean up temp installations after client program tests.  Commit
  7d0f493f19607774fdccb1a1ea06fdd96a3d9698 added infrastructure to
  perform tests in assorted src/bin/ subdirectories, but forgot to
  teach "make clean" to clean up the detritus the tests leave behind.
  http://git.postgresql.org/pg/commitdiff/49137ec9d469f744289d0dfa2487a7fc1ef217cb

- Fix off-by-one bug in LWLockRegisterTranche().  Original coding
  failed to enlarge the array as required if the requested tranche_id
  was equal to LWLockTranchesAllocated.  In passing, fix poor style of
  not casting the result of (re)palloc.
  http://git.postgresql.org/pg/commitdiff/4bfc5f1396b18da3a0db73e4406badc4ce793a1e

- Record the proper typmod for an index expression column.  We should
  use exprTypmod() to extract the typmod of the expression, instead of
  just blindly storing -1.  This seems to have been an aboriginal
  oversight in commit fc8d970cbcdd6f025475822a4cf01dfda0873226 which
  introduced general-expression indexes.  The consequences are only
  cosmetic at present, since the index machinery doesn't really look
  at typmod for index columns; but still it seems best to describe the
  column type as precisely as we can.  Per off-list complaint from
  Thomas Fanghaenel.
  http://git.postgresql.org/pg/commitdiff/39b0c7681e465f3e486ca2a5d13fbbafbe25cb1a

- Don't #include utils/palloc.h in common/fe_memutils.h.  This breaks
  the principle that common/ ought not depend on anything in the
  server, not only code-wise but in the headers.  The only arguable
  advantage is avoidance of duplication of half a dozen extern
  declarations, and even that is rather dubious, considering that the
  previous coding was wrong about which declarations to duplicate: it
  exposed pnstrdup() to frontend code even though no such function is
  provided in fe_memutils.c.  On the same principle, don't #include
  utils/memutils.h in the frontend build of psprintf.c.  This requires
  duplicating the definition of MaxAllocSize, but that seems fine to
  me: there's no a-priori reason why frontend code should use the same
  size limit as the backend anyway.  In passing, clean up some rather
  odd layout and ordering choices that were imposed on palloc.h to
  reduce the number of #ifdefs required by the previous approach.  Per
  gripe from Christoph Berg.  There's still more work to do to make
  include/common/ clean, but this part seems reasonably
  noncontroversial.
  http://git.postgresql.org/pg/commitdiff/528c454b2ada89ca0f0cd9a64f939e775b55b879

- Improve generation algorithm for database system identifier.  As
  noted some time ago, the original coding had a typo ("|" for "^")
  that made the result less unique than intended.  Even the intended
  behavior is obsolete since it was based on wanting to produce a
  usable value even if we didn't have int64 arithmetic --- a
  limitation we stopped supporting years ago.  Instead, let's redefine
  the system identifier as tv_sec in the upper 32 bits (same as
  before), tv_usec in the next 20 bits, and the low 12 bits of
  getpid() in the remaining bits.  This is still hardly
  guaranteed-universally-unique, but it's noticeably better than
  before.  Per my proposal at <29019.1374535940@sss.pgh.pa.us>
  http://git.postgresql.org/pg/commitdiff/5035701e07e8bd395aa878465a102afd7b74e8c3

- Can't completely get rid of #ifndef FRONTEND in palloc.h :-(
  pg_controldata includes postgres.h not postgres_fe.h, so
  utils/palloc.h must be able to compile in a "#define FRONTEND"
  context.  It appears that Solaris Studio is smart enough to persuade
  us to define PG_USE_INLINE, but not smart enough to not make a copy
  of unreferenced static functions; which leads to an unsatisfied
  reference to CurrentMemoryContext.  So we need an #ifndef FRONTEND
  around that declaration.  Per buildfarm.
  http://git.postgresql.org/pg/commitdiff/a9baeb361d635963a19a0268a7d60636c813d2ee

Heikki Linnakangas pushed:

- Avoid transient bogus page contents when creating a sequence.  Don't
  use simple_heap_insert to insert the tuple to a sequence relation.
  simple_heap_insert creates a heap insertion WAL record, and
  replaying that will create a regular heap page without the special
  area containing the sequence magic constant, which is wrong for a
  sequence. That was not a bug because we always created a sequence
  WAL record after that, and replaying that overwrote the bogus heap
  page, and the transient state could never be seen by another backend
  because it was only done when creating a new sequence relation. But
  it's simpler and cleaner to avoid that in the first place.
  http://git.postgresql.org/pg/commitdiff/8d34f6862853b4b67e29b368dfedf7d4c28d694b

- Fix rm_desc routine of b-tree page delete records.  A couple of
  typos from my refactoring of the page deletion patch.
  http://git.postgresql.org/pg/commitdiff/7d98054f0dd115f57ad0ec1f424a66c13459013b

- Retain original physical order of tuples in redo of b-tree splits.
  It makes no difference to the system, but minimizing the differences
  between a master and standby makes debugging simpler.
  http://git.postgresql.org/pg/commitdiff/7e30c186da8eaae84ab30352ac23f0d5bdc59e25

- Fix bug in new B-tree page deletion code.  When modifying a page,
  must hold an exclusive lock. A shared lock is obviously not good
  enough.
  http://git.postgresql.org/pg/commitdiff/77fe2b6d795f3f4ed282c9c980920e128a57624e

- Fix Gin README.  The README incorrectly claimed that GIN posting
  tree pages contain an array of uncompressed items in addition to
  compressed posting lists. Earlier versions of the GIN posting list
  compression patch worked that way, but not the one that was
  committed.
  http://git.postgresql.org/pg/commitdiff/45e67a2ad7fcc1389cf897e308a75c3cb9f88c3f

- Fix bug in the new B-tree incomplete-split code.  Forgot to update
  LSN of left sibling's page, when creating a new root.  I fixed this
  for regular insertions and page splits earlier, but missed new root
  creation.
  http://git.postgresql.org/pg/commitdiff/4a5d55ec2b711e13438a32d119a809a22ced410b

- Cleanup of new b-tree page deletion code.  When marking a branch as
  half-dead, a pointer to the top of the branch is stored in the leaf
  block's hi-key. During normal operation, the high key was left in
  place, and the block number was just stored in the ctid field of the
  high key tuple, but in WAL replay, the high key was recreated as a
  truncated tuple with zero columns. For the sake of easier debugging,
  also truncate the tuple in normal operation, so that the page is
  identical after WAL replay. Also, rename the 'downlink' field in the
  WAL record to 'topparent', as that seems like a more descriptive
  name. And make sure it's set to invalid when unlinking the leaf
  page.
  http://git.postgresql.org/pg/commitdiff/4fafc4ecd9e4d224d92c4a8549c5646860787a5d

- Fix typos in comment.
  http://git.postgresql.org/pg/commitdiff/8fbfbf1472776cc5d12cafc5e625a15593272b33

- Fix typo, trance -> tranche, in docs.  Amit Langote
  http://git.postgresql.org/pg/commitdiff/4a781f1e6cf3be5ca84f09804f7d7c3a2180210b

- Update obsolete comments.  We no longer have a TLI field in the page
  header.
  http://git.postgresql.org/pg/commitdiff/a4ad9afec2c2266105736ff8d78870356867cc37

Peter Eisentraut pushed:

- doc: Improve "replication slot" index entries.  Now that we have
  accumulated two different "replication slot" concepts, make the
  index entries consistent.
  http://git.postgresql.org/pg/commitdiff/80ce90b9c40d10dc3acaf10ac0975c3b8d1e3289

- ecpg: Add additional files to .gitignore.  These are test files
  added by f9179685371b74bf4752bf3f87846e5625cf91fa.
  http://git.postgresql.org/pg/commitdiff/c18cc0034e184374e1586c822a2ab09a494d33ff

- doc: Fix DocBook table column count declaration.  This was broken in
  26cd1d7d9513b2b490efc746551ec5a786b56212.
  http://git.postgresql.org/pg/commitdiff/125ba2945aacde7713f3767b012c429c384f3b62

Bruce Momjian pushed:

- copy:  update docs for FORCE_NULL and FORCE_NOT_NULL combination.
  Also update regression tests.  Patch by Michael Paquier
  http://git.postgresql.org/pg/commitdiff/7ec73783d88a743799b0c262f1235f772497fb1d

- regression test:  fix hot standby tests by using repeatable read.
  Serializable transactions won't work on a Hot Standby.  Also fix
  VACUUM/ANALYZE label mixup.  Patch by Martín Marqués
  http://git.postgresql.org/pg/commitdiff/2985e16031b61e9a428635e6860b3024570d3666

- doc:  improve CREATE RULE event list.  Patch by Fujii Masao Report
  by Emanuel Calvo
  http://git.postgresql.org/pg/commitdiff/c27bf777cf4e05d318e202316857b354cc2f7a5a

- docs:  clearify use of pg_database.datistemplate.  Patch by Rajeev
  rastogi
  http://git.postgresql.org/pg/commitdiff/72590b3a69baaf24d1090a2c2ceb9181be34043e

- build:  add EXTRA_REGRESS_OPTS to all pg_regress invocations.  Patch
  by Christoph Berg
  http://git.postgresql.org/pg/commitdiff/19fa6161dd6ba85b6c88b3476d165745dd5192d9

- docs:  add results for JSON operator examples.  Patch by Sehrope
  Sarkuni
  http://git.postgresql.org/pg/commitdiff/26cd1d7d9513b2b490efc746551ec5a786b56212

- doc:  mention CREATE MATERIALIZED VIEW AS can be EXPLAINed.  Patch
  by Amit Langote.  Report by ?  Backpatch through ?
  http://git.postgresql.org/pg/commitdiff/8506a607a3b261576240d09f1ed4abfb2dba1635

- doc:  improve wording of COPY commit
  7ec73783d88a743799b0c262f1235f772497fb1d
  http://git.postgresql.org/pg/commitdiff/9970443640b4569cf72b3c8e84abe80bdf533c7f

- doc:  adjust 9970443640b4569cf72b3c8e84abe80bdf533c7f for "null
  string".  Report by Andrew Dunstan
  http://git.postgresql.org/pg/commitdiff/2362c2bd234f01935336208fe2924c986564baa9

- revert 4d0d607a454ee832574afd52a3c515099cc85eb3.  Revert due to
  contrib/test_decoding regression failure
  http://git.postgresql.org/pg/commitdiff/cee850c403c9dde121dde042334554167f79d989

- release memory used while flushing logical mappings.  Patch by Ants
  Aasma
  http://git.postgresql.org/pg/commitdiff/4d0d607a454ee832574afd52a3c515099cc85eb3

Magnus Hagander pushed:

- Properly build pg_recvlogical in the msvc build system.  Michael
  Paquier
  http://git.postgresql.org/pg/commitdiff/b2c9b161b8ae36dd9972e77297274afb9a675782

Alvaro Herrera pushed:

- Fix race when updating a tuple concurrently locked by another
  process.  If a tuple is locked, and this lock is later upgraded
  either to an update or to a stronger lock, and in the meantime some
  other process tries to lock, update or delete the same tuple, it
  (the tuple) could end up being updated twice, or having conflicting
  locks held.  The reason for this is that the second updater checks
  for a change in Xmax value, or in the HEAP_XMAX_IS_MULTI infomask
  bit, after noticing the first lock; and if there's a change, it
  restarts and re-evaluates its ability to update the tuple.  But it
  neglected to check for changes in lock strength or in lock-vs-update
  status when those two properties stayed the same.  This would lead
  it to take the wrong decision and continue with its own update, when
  in reality it shouldn't do so but instead restart from the top.
  This could lead to either an assertion failure much later (when a
  multixact containing multiple updates is detected), or duplicate
  copies of tuples.  To fix, make sure to compare the other relevant
  infomask bits alongside the Xmax value and HEAP_XMAX_IS_MULTI bit,
  and restart from the top if necessary.  Also, in the
  belt-and-suspenders spirit, add a check to
  MultiXactCreateFromMembers that a multixact being created does not
  have two or more members that are claimed to be updates.  This
  should protect against other bugs that might cause similar bogus
  situations.  Backpatch to 9.3, where the possibility of multixacts
  containing updates was introduced.  (In prior versions it was
  possible to have the tuple lock upgraded from shared to exclusive,
  and an update would not restart from the top; yet we're protected
  against a bug there because there's always a sleep to wait for the
  locking transaction to complete before continuing to do anything.
  Really, the fact that tuple locks always conflicted with concurrent
  updates is what protected against bugs here.) Per report from Andrew
  Dunstan and Josh Berkus in thread at
  http://www.postgresql.org/message-id/534C8B33.9050807@pgexperts.com
  Bug analysis by Andres Freund.
  http://git.postgresql.org/pg/commitdiff/1a917ae8610d44985fd2027da0cfe60ccece9104

== Rejected Patches (for now) ==

No one was disappointed this week :-)

== Pending Patches ==

Dmitry Voronin sent in two more revisions of a patch to add
functionality to the sslinfo contrib extension.

Bruce Momjian sent in a patch to fix an issue where pg_dump was
ignoring read and write errors, which manifested as failure to produce
a return code in the -Fd case.

Etsuro Fujita sent in a patch to revert that part of CREATE FOREIGN
TABLE that could create an OID column.

Andres Freund sent in a patch to add a GUC which controls whether
shared memory is System V or mmap.

Etsuro Fujita sent in a patch to fix the docs for ALTER TABLE.

Michael Paquier sent in a patch to ensure correct compilation of
pg_recvlogical on Windows.

Etsuro Fujita sent in a patch to fix the docs for foreign data wrapper
handlers.

Gurjeet Singh and Tom Lane traded patches to flatten long AND/OR lists
in queries rather than processing them recursively as occurs now.

Tom Lane sent in another revision of a patch to remove TOAST pointers
from composite Datums.

Gregory Stark sent in another revision of a patch to improve the
display of wide tables in psql.