1. 01 Jun, 2017 2 commits
    • Andres Freund's avatar
      Make ALTER SEQUENCE, including RESTART, fully transactional. · 3d79013b
      Andres Freund authored
      Previously the changes to the "data" part of the sequence, i.e. the
      one containing the current value, were not transactional, whereas the
      definition, including minimum and maximum value were.  That leads to
      odd behaviour if a schema change is rolled back, with the potential
      that out-of-bound sequence values can be returned.
      
      To avoid the issue create a new relfilenode fork whenever ALTER
      SEQUENCE is executed, similar to how TRUNCATE ... RESTART IDENTITY
      already is already handled.
      
      This commit also makes ALTER SEQUENCE RESTART transactional, as it
      seems to be too confusing to have some forms of ALTER SEQUENCE behave
      transactionally, some forms not.  This way setval() and nextval() are
      not transactional, but DDL is, which seems to make sense.
      
      This commit also rolls back parts of the changes made in 3d092fe5
      and f8dc1985 as they're now not needed anymore.
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/20170522154227.nvafbsm62sjpbxvd@alap3.anarazel.de
      Backpatch: Bug is in master/v10 only
      3d79013b
    • Tom Lane's avatar
      Always use -fPIC, not -fpic, when building shared libraries with gcc. · e9a3c047
      Tom Lane authored
      On some platforms, -fpic fails for sufficiently large shared libraries.
      We've mostly not hit that boundary yet, but there are some extensions
      such as Citus and pglogical where it's becoming a problem.  A bit of
      research suggests that the penalty for -fPIC is small, in the
      single-digit-percentage range --- and there's none at all on popular
      platforms such as x86_64.  So let's just default to -fPIC everywhere
      and provide one less thing for extension developers to worry about.
      
      Per complaint from Christoph Berg.  Back-patch to all supported branches.
      (I did not bother to touch the recently-removed Makefiles for sco and
      unixware in the back branches, though.  We'd have no way to test that
      it doesn't break anything on those platforms.)
      
      Discussion: https://postgr.es/m/20170529155850.qojdfrwkkqnjb3ap@msg.df7cb.de
      e9a3c047
  2. 31 May, 2017 4 commits
  3. 30 May, 2017 6 commits
  4. 29 May, 2017 8 commits
    • Tom Lane's avatar
      Make edge-case behavior of jsonb_populate_record match json_populate_record · 68cff231
      Tom Lane authored
      json_populate_record throws an error if asked to convert a JSON scalar
      or array into a composite type.  jsonb_populate_record was returning
      a record full of NULL fields instead.  It seems better to make it
      throw an error for this case as well.
      
      Nikita Glukhov
      
      Discussion: https://postgr.es/m/fbd1d566-bba0-a3de-d6d0-d3b1d7c24ff2@postgrespro.ru
      68cff231
    • Tom Lane's avatar
      Fix thinko in JsObjectSize() macro. · e45c5be9
      Tom Lane authored
      The macro gave the wrong answers for a JsObject with is_json == 0:
      it would return 1 if jsonb_cont == NULL, or if that wasn't NULL,
      it would return 1 for any non-zero size.
      
      We could fix that, but the only use of this macro at present is in the
      JsObjectIsEmpty() macro, so it seems simpler and clearer to get rid of
      JsObjectSize() and put corrected logic into JsObjectIsEmpty().
      
      Thinko in commit cf35346e, so no need for back-patch.
      
      Nikita Glukhov
      
      Discussion: https://postgr.es/m/fbd1d566-bba0-a3de-d6d0-d3b1d7c24ff2@postgrespro.ru
      e45c5be9
    • Tom Lane's avatar
      Prevent running pg_resetwal/pg_resetxlog against wrong-version data dirs. · f3db7f16
      Tom Lane authored
      pg_resetwal (formerly pg_resetxlog) doesn't insist on finding a matching
      version number in pg_control, and that seems like an important thing to
      preserve since recovering from corrupt pg_control is a prime reason to
      need to run it.  However, that means you can try to run it against a
      data directory of a different major version, which is at best useless
      and at worst disastrous.  So as to provide some protection against that
      type of pilot error, inspect PG_VERSION at startup and refuse to do
      anything if it doesn't match.  PG_VERSION is read-only after initdb,
      so it's unlikely to get corrupted, and even if it were corrupted it would
      be easy to fix by hand.
      
      This hazard has been there all along, so back-patch to all supported
      branches.
      
      Michael Paquier, with some kibitzing by me
      
      Discussion: https://postgr.es/m/f4b8eb91-b934-8a0d-b3cc-68f06e2279d1@enterprisedb.com
      f3db7f16
    • Tom Lane's avatar
      Allow NumericOnly to be "+ FCONST". · ce509452
      Tom Lane authored
      The NumericOnly grammar production accepted ICONST, + ICONST, - ICONST,
      FCONST, and - FCONST, but for some reason not + FCONST.  This led to
      strange inconsistencies like
      
      regression=# set random_page_cost = +4;
      SET
      regression=# set random_page_cost = 4000000000;
      SET
      regression=# set random_page_cost = +4000000000;
      ERROR:  syntax error at or near "4000000000"
      
      (because 4000000000 is too large to be an ICONST).  While there's
      no actual functional reason to need to write a "+", if we allow
      it for integers it seems like we should allow it for numerics too.
      
      It's been like that forever, so back-patch to all supported branches.
      
      Discussion: https://postgr.es/m/30908.1496006184@sss.pgh.pa.us
      ce509452
    • Tom Lane's avatar
      More code review for get_qual_for_list(). · dced55da
      Tom Lane authored
      Avoid trashing the input PartitionBoundSpec; while that might be safe for
      current callers, it's certainly trouble waiting to happen.  In the same
      vein, make sure that all of the result data structure is freshly palloc'd,
      rather than some of it being pointers into the input data structures
      (which we don't know the lifespans of).
      
      Simplify the logic for tacking on IS NULL or IS NOT NULL conditions some
      more; commit 85c2b9a1 left a lot on the table there.  And rearrange the
      construction of the nodes into (what seems to me) a more logical order.
      
      In passing, make sure that get_qual_for_range() also returns a freshly
      palloc'd structure, since there's no value in having that guarantee for
      only one kind of partitioning.  And improve some comments there.
      
      Jeevan Ladhe, with further tweaking by me
      
      Discussion: https://postgr.es/m/CAOgcT0MAcYoMs93W80iTUf_dP36=1mZQzeUk+nnwY_-qWDrCfw@mail.gmail.com
      dced55da
    • Magnus Hagander's avatar
      Fix typo in comment · 917d9128
      Magnus Hagander authored
      Masahiko Sawada
      917d9128
    • Heikki Linnakangas's avatar
      Fix reference to RFC specifying SCRAM. · 6fd65f6b
      Heikki Linnakangas authored
      Noted by Peter Eisentraut
      6fd65f6b
    • Tom Lane's avatar
      Code review focused on new node types added by partitioning support. · 76a3df6e
      Tom Lane authored
      Fix failure to check that we got a plain Const from const-simplification of
      a coercion request.  This is the cause of bug #14666 from Tian Bing: there
      is an int4 to money cast, but it's only stable not immutable (because of
      dependence on lc_monetary), resulting in a FuncExpr that the code was
      miserably unequipped to deal with, or indeed even to notice that it was
      failing to deal with.  Add test cases around this coercion behavior.
      
      In view of the above, sprinkle the code liberally with castNode() macros,
      in hope of catching the next such bug a bit sooner.  Also, change some
      functions that were randomly declared to take Node* to take more specific
      pointer types.  And change some struct fields that were declared Node*
      but could be given more specific types, allowing removal of assorted
      explicit casts.
      
      Place PARTITION_MAX_KEYS check a bit closer to the code it's protecting.
      Likewise check only-one-key-for-list-partitioning restriction in a less
      random place.
      
      Avoid not-per-project-style usages like !strcmp(...).
      
      Fix assorted failures to avoid scribbling on the input of parse
      transformation.  I'm not sure how necessary this is, but it's entirely
      silly for these functions to be expending cycles to avoid that and not
      getting it right.
      
      Add guards against partitioning on system columns.
      
      Put backend/nodes/ support code into an order that matches handling
      of these node types elsewhere.
      
      Annotate the fact that somebody added location fields to PartitionBoundSpec
      and PartitionRangeDatum but forgot to handle them in
      outfuncs.c/readfuncs.c.  This is fairly harmless for production purposes
      (since readfuncs.c would just substitute -1 anyway) but it's still bogus.
      It's not worth forcing a post-beta1 initdb just to fix this, but if we
      have another reason to force initdb before 10.0, we should go back and
      clean this up.
      
      Contrariwise, somebody added location fields to PartitionElem and
      PartitionSpec but forgot to teach exprLocation() about them.
      
      Consolidate duplicative code in transformPartitionBound().
      
      Improve a couple of error messages.
      
      Improve assorted commentary.
      
      Re-pgindent the files touched by this patch; this affects a few comment
      blocks that must have been added quite recently.
      
      Report: https://postgr.es/m/20170524024550.29935.14396@wrigleys.postgresql.org
      76a3df6e
  5. 28 May, 2017 3 commits
  6. 26 May, 2017 4 commits
  7. 25 May, 2017 5 commits
  8. 24 May, 2017 4 commits
    • Peter Eisentraut's avatar
      Fix table syncing with different column order · 073ce405
      Peter Eisentraut authored
      Logical replication supports replicating between tables with different
      column order.  But this failed for the initial table sync because of a
      logic error in how the column list for the internal COPY command was
      composed.  Fix that and also add a test.
      
      Also fix a minor omission in the column name mapping cache.  When
      creating the mapping list, it would not skip locally dropped columns.
      So if a remote column had the same name as a locally dropped
      column (...pg.dropped...), then the expected error would not occur.
      073ce405
    • Peter Eisentraut's avatar
      Improve logical replication worker log messages · 92ecb148
      Peter Eisentraut authored
      Reduce some redundant messages to DEBUG1.  Be clearer about the
      distinction between apply workers and table synchronization workers.
      Add subscription and table name where possible.
      Reviewed-by: default avatarMasahiko Sawada <sawada.mshk@gmail.com>
      92ecb148
    • Robert Haas's avatar
      Code review of get_qual_for_list. · 85c2b9a1
      Robert Haas authored
      We need not consider the case where both nulltest1 and nulltest2 are
      NULL; the partition either accepts nulls or it does not.
      
      Jeevan Ladhe.  I added an assertion.
      85c2b9a1
    • Tom Lane's avatar
      Tighten checks for whitespace in functions that parse identifiers etc. · 9ae2661f
      Tom Lane authored
      This patch replaces isspace() calls with scanner_isspace() in functions
      that are likely to be presented with non-ASCII input.  isspace() has
      the small advantage that it will correctly recognize no-break space
      in single-byte encodings (such as LATIN1); but it cannot work successfully
      for any multibyte character, and depending on platform it might return
      false positive results for some fragments of multibyte characters.  That's
      disastrous for functions that are trying to discard whitespace between
      valid strings, as noted in bug #14662 from Justin Muise.  Even treating
      no-break space as whitespace is pretty questionable for the usages touched
      here, because the core scanner would think it is an identifier character.
      
      Affected functions are parse_ident(), parseNameAndArgTypes (underlying
      regprocedurein() and siblings), SplitIdentifierString (used for parsing
      GUCs and options that are qualified names or lists of names), and
      SplitDirectoriesString (used for parsing GUCs that are lists of
      directories).
      
      All the functions adjusted here are parsing SQL identifiers and similar
      constructs, so it's reasonable to insist that their definition of
      whitespace match the core scanner.  So we can hope that this won't cause
      many backwards-compatibility problems.  I've left alone isspace() calls
      in places that aren't really expecting any non-ASCII input characters,
      such as float8in().
      
      Back-patch to all supported branches.
      
      Discussion: https://postgr.es/m/10129.1495302480@sss.pgh.pa.us
      9ae2661f
  9. 23 May, 2017 3 commits
  10. 22 May, 2017 1 commit