1. 01 Dec, 2018 2 commits
    • Tom Lane's avatar
      Rename ecpg's various "extern.h" files to have distinct names. · 3295f820
      Tom Lane authored
      This should reduce confusion, and in particular make it safe to
      copy typename.c into preproc/ and compile it there.
      
      This doesn't affect anything outside ecpg, and particularly not
      end users, because these files don't get installed; they just
      exist to share declarations among the .c files of each subdirectory.
      
      Discussion: https://postgr.es/m/31364.1543511708@sss.pgh.pa.us
      3295f820
    • Tom Lane's avatar
      Add a --socketdir option to pg_upgrade. · 2d34ad84
      Tom Lane authored
      This allows control of the directory in which the postmaster sockets
      are created for the temporary postmasters started by pg_upgrade.
      The default location remains the current working directory, which is
      typically fine, but if it is deeply nested then its pathname might
      be too long to be a socket name.
      
      In passing, clean up some messiness in pg_upgrade's option handling,
      particularly the confusing and undocumented way that configuration-only
      datadirs were handled.  And fix check_required_directory's substantially
      under-baked cleanup of directory pathnames.
      
      Daniel Gustafsson, reviewed by Hironobu Suzuki, some code cleanup by me
      
      Discussion: https://postgr.es/m/E72DD5C3-2268-48A5-A907-ED4B34BEC223@yesql.se
      2d34ad84
  2. 30 Nov, 2018 5 commits
  3. 29 Nov, 2018 9 commits
  4. 28 Nov, 2018 5 commits
    • Peter Geoghegan's avatar
      Have BufFileSize() ereport() on FileSize() failure. · 1a990b20
      Peter Geoghegan authored
      Move the responsibility for checking for and reporting a failure from
      the only current BufFileSize() caller, logtape.c, to BufFileSize()
      itself.  Code within buffile.c is generally responsible for interfacing
      with fd.c to report irrecoverable failures.  This seems like a
      convention that's worth sticking to.
      
      Reorganizing things this way makes it easy to make the error message
      raised in the event of BufFileSize() failure descriptive of the
      underlying problem.  We're now clear on the distinction between
      temporary file name and BufFile name, and can show errno, confident that
      its value actually relates to the error being reported.  In passing, an
      existing, similar buffile.c ereport() + errcode_for_file_access() site
      is changed to follow the same conventions.
      
      The API of the function BufFileSize() is changed by this commit, despite
      already being in a stable release (Postgres 11).  This seems acceptable,
      since the BufFileSize() ABI was changed by commit aa551830, which
      hasn't made it into a point release yet.  Besides, it's difficult to
      imagine a third party BufFileSize() caller not just raising an error
      anyway, since BufFile state should be considered corrupt when
      BufFileSize() fails.
      
      Per complaint from Tom Lane.
      
      Discussion: https://postgr.es/m/26974.1540826748@sss.pgh.pa.us
      Backpatch: 11-, where shared BufFiles were introduced.
      1a990b20
    • Peter Eisentraut's avatar
      Only allow one recovery target setting · f2cbffc7
      Peter Eisentraut authored
      The previous recovery.conf regime accepted multiple recovery_target*
      settings and used the last one.  This does not translate well to the
      general GUC system.  Specifically, under EXEC_BACKEND, the settings
      are written out not in any particular order, so the order in which
      they were originally set is not available to new processes.
      
      Rather than redesign the GUC system, it was decided to abandon the old
      behavior and only allow one recovery target setting.  A second setting
      will cause an error.  However, it is allowed to set the same parameter
      multiple times or unset a parameter and set a different one.
      
      Discussion: https://www.postgresql.org/message-id/flat/27802171543235530%40iva2-6ec8f0a6115e.qloud-c.yandex.net#701a59c837ad0bf8c244344aaf3ef5a4
      f2cbffc7
    • Bruce Momjian's avatar
      C comment: remove extra '*' · eae9143d
      Bruce Momjian authored
      Reported-by: Etsuro Fujita
      
      Discussion: https://postgr.es/m/5BFE34DE.1080404@lab.ntt.co.jp
      
      Author: Etsuro Fujita
      
      Backpatch-through: 10
      eae9143d
    • Thomas Munro's avatar
      Don't set PAM_RHOST for Unix sockets. · 0f9cdd7d
      Thomas Munro authored
      Since commit 2f1d2b7a we have set PAM_RHOST to "[local]" for Unix
      sockets.  This caused Linux PAM's libaudit integration to make DNS
      requests for that name.  It's not exactly clear what value PAM_RHOST
      should have in that case, but it seems clear that we shouldn't set it
      to an unresolvable name, so don't do that.
      
      Back-patch to 9.6.  Bug #15520.
      
      Author: Thomas Munro
      Reviewed-by: Peter Eisentraut
      Reported-by: Albert Schabhuetl
      Discussion: https://postgr.es/m/15520-4c266f986998e1c5%40postgresql.org
      0f9cdd7d
    • Tomas Vondra's avatar
      Do not decode TOAST data for table rewrites · f69c959d
      Tomas Vondra authored
      During table rewrites (VACUUM FULL and CLUSTER), the main heap is logged
      using XLOG / FPI records, and thus (correctly) ignored in decoding.
      But the associated TOAST table is WAL-logged as plain INSERT records,
      and so was logically decoded and passed to reorder buffer.
      
      That has severe consequences with TOAST tables of non-trivial size.
      Firstly, reorder buffer has to keep all those changes, possibly spilling
      them to a file, incurring I/O costs and disk space.
      
      Secondly, ReoderBufferCommit() was stashing all those TOAST chunks into
      a hash table, which got discarded only after processing the row from the
      main heap.  But as the main heap is not decoded for rewrites, this never
      happened, so all the TOAST data accumulated in memory, resulting either
      in excessive memory consumption or OOM.
      
      The fix is simple, as commit e9edc1ba already introduced infrastructure
      (namely HEAP_INSERT_NO_LOGICAL flag) to skip logical decoding of TOAST
      tables, but it only applied it to system tables.  So simply use it for
      all TOAST data in raw_heap_insert().
      
      That would however solve only the memory consumption issue - the TOAST
      changes would still be decoded and added to the reorder buffer, and
      spilled to disk (although without TOAST tuple data, so much smaller).
      But we can solve that by tweaking DecodeInsert() to just ignore such
      INSERT records altogether, using XLH_INSERT_CONTAINS_NEW_TUPLE flag,
      instead of skipping them later in ReorderBufferCommit().
      
      Review: Masahiko Sawada
      Discussion: https://www.postgresql.org/message-id/flat/1a17c643-e9af-3dba-486b-fbe31bc1823a%402ndquadrant.com
      Backpatch: 9.4-, where logical decoding was introduced
      f69c959d
  5. 27 Nov, 2018 8 commits
  6. 26 Nov, 2018 11 commits
    • Andres Freund's avatar
      Fix typo introduced in 578b2297. · 54bb22f6
      Andres Freund authored
      Author: Andreas Karlsson
      Discussion: https://postgr.es/m/0917c86f-e906-27c0-740e-abc581480823@proxel.se
      54bb22f6
    • Andres Freund's avatar
      Fix pg_upgrade for oid removal. · 12a53c73
      Andres Freund authored
      pg_upgrade previously copied pg_largeobject_metadata over from the old
      cluster. That doesn't work, because the table has oids before
      578b2297. I missed that.
      
      As most pieces of metadata for large objects already were dumped as
      DDL (except for comments overwritten by pg_upgrade, due to the copy of
      pg_largeobject_metadata) it seems reasonable to just also dump grants
      for large objects.  If we ever consider this a relevant performance
      problem, we'd need to fix the rest of the already emitted DDL
      too.
      
      There's still an open discussion about whether we'll want to force a
      specific ordering for the dumped objects, as currently
      pg_largeobjects_metadata potentially has a different ordering
      before/after pg_upgrade, which can make automated testing a bit
      harder.
      
      Reported-By: Andrew Dunstan
      Author: Andres Freund
      Discussion: https://postgr.es/m/91a8a980-41bc-412b-fba2-2ba71a141c2b@2ndQuadrant.com
      12a53c73
    • Tom Lane's avatar
      Fix translation of special characters in psql's LaTeX output modes. · 70d7e507
      Tom Lane authored
      latex_escaped_print() mistranslated \ and failed to provide any translation
      for # ^ and ~, all of which would typically lead to LaTeX document syntax
      errors.  In addition it didn't translate < > and |, which would typically
      render as unexpected characters.
      
      To some extent this represents shortcomings in ancient versions of LaTeX,
      which if memory serves had no easy way to render these control characters
      as ASCII text.  But that's been fixed for, um, decades.  In any case there
      is no value in emitting guaranteed-to-fail output for these characters.
      
      Noted while fooling with test cases added by commit 9a98984f.  Back-patch
      the code change to all supported versions.
      70d7e507
    • Tom Lane's avatar
      Avoid locale-dependent output in numericlocale check. · 95dcb8fc
      Tom Lane authored
      I'd forgotten that in the buildfarm, parts of the regression tests
      may run with psql exposed to a non-default LC_NUMERIC setting.
      Hence we can't assume that C locale prevails, nor is there any
      accessible way to force the setting for this single test step.
      Lobotomize the test case added by commit 9a98984f so that it covers as
      much as we can of print.c without having any locale-varying output.
      95dcb8fc
    • Alvaro Herrera's avatar
      Fix sample output for hash_metapage_info query · 67ed3b9d
      Alvaro Herrera authored
      One output column was duplicated.  Couldn't resist fixing the version
      number while at it.
      
      Reported-by: Gianni Ciolli
      67ed3b9d
    • Tom Lane's avatar
      Add CSV table output mode in psql. · aa2ba50c
      Tom Lane authored
      "\pset format csv", or --csv, selects comma-separated values table format.
      This is compliant with RFC 4180, except that we aren't too picky about
      whether the record separator is LF or CRLF; also, the user may choose a
      field separator other than comma.
      
      This output format is directly compatible with the server's COPY CSV
      format, and will also be useful as input to other programs.  It's
      considerably safer for that purpose than the old recommendation to
      use "unaligned" format, since the latter couldn't handle data
      containing the field separator character.
      
      Daniel Vérité, reviewed by Fabien Coelho and David Fetter, some
      tweaking by me
      
      Discussion: https://postgr.es/m/a8de371e-006f-4f92-ab72-2bbe3ee78f03@manitou-mail.org
      aa2ba50c
    • Tom Lane's avatar
      Improve regression test coverage for psql output formats. · 9a98984f
      Tom Lane authored
      As penance for the "\pset format latex" silliness, add some regression
      test coverage for the off-the-beaten-path output formats, which formerly
      had exactly no coverage, except for some poorly-thought-out (unreadable,
      repetitive, and incomplete) tests for asciidoc format.
      
      I make no claims for the behavior exposed here actually being correct;
      these test cases are just designed to ensure full code coverage in
      fe_utils/print.c.  This brings the line coverage for that file up
      from ~60% to ~93%.
      9a98984f
    • Tom Lane's avatar
      Fix breakage of "\pset format latex". · a7eece4f
      Tom Lane authored
      Commit eaf746a5 unintentionally made psql's "latex" output format
      inaccessible, since not only "latex" but all abbreviations of it
      were considered ambiguous against "latex-longtable".  Let's go
      back to the longstanding behavior that all shortened versions
      mean "latex", and you have to write at least "latex-" to get
      "latex-longtable".  This leaves the only difference from pre-v12
      behavior being that "\pset format a" is considered ambiguous.
      
      The fact that the regression tests didn't expose this is pretty bad,
      but fixing it is material for a separate commit.
      
      Discussion: https://postgr.es/m/cb7e1caf-3ea6-450d-af28-f524903a030c@manitou-mail.org
      a7eece4f
    • Alvaro Herrera's avatar
      Clarify that cross-row constraints are unsupported · 36d442a2
      Alvaro Herrera authored
      Maybe we'll implement them later, or maybe not, but let's make the statu
      quo clear for now.
      
      Author: Lætitia Avrot, Patrick Francelle
      Reviewers: too many to list
      Discussion: https://postgr.es/m/CAB_COdhUuzNFOJfc7SNNso5rOuVA3ui93KMVunEM8Yih+K5A6A@mail.gmail.com
      36d442a2
    • Michael Paquier's avatar
      Revert "Fix typo in documentation of toast storage" · 664f01b6
      Michael Paquier authored
      This reverts commit 058ef3a1, per complains from Magnus Hagander and Vik
      Fearing.
      664f01b6
    • Michael Paquier's avatar