Skip to content
Snippets Groups Projects
  1. Sep 05, 2016
    • Simon Riggs's avatar
      Dirty replication slots when using sql interface · d851bef2
      Simon Riggs authored
      When pg_logical_slot_get_changes(...) sets confirmed_flush_lsn to the point at
      which replay stopped, it doesn't dirty the replication slot.  So if the replay
      didn't cause restart_lsn or catalog_xmin to change as well, this change will
      not get written out to disk. Even on a clean shutdown.
      
      If Pg crashes or restarts, a subsequent pg_logical_slot_get_changes(...) call
      will see the same changes already replayed since it uses the slot's
      confirmed_flush_lsn as the start point for fetching changes. The caller can't
      specify a start LSN when using the SQL interface.
      
      Mark the slot as dirty after reading changes using the SQL interface so that
      users won't see repeated changes after a clean shutdown. Repeated changes still
      occur when using the walsender interface or after an unclean shutdown.
      
      Craig Ringer
      d851bef2
  2. May 04, 2016
  3. May 02, 2016
    • Alvaro Herrera's avatar
      Fix code comments regarding logical decoding · 234a2660
      Alvaro Herrera authored
      Back in 3b02ea4f I added some comments in various places to explain
      how logical decoding and other things worked.  Not all of the changes
      were welcome, because they were misleading or wrong.  This changes them
      a little bit to make them more accurate.
      
      Some other comments are also changed to be more accurate.  Also, fix a
      bunch of typos.
      
      Author: Álvaro Herrera, Craig Ringer
      
      Andres Freund reviewed some parts of this.
      234a2660
  4. Apr 15, 2016
  5. Apr 06, 2016
    • Simon Riggs's avatar
      Generic Messages for Logical Decoding · 3fe3511d
      Simon Riggs authored
      API and mechanism to allow generic messages to be inserted into WAL that are
      intended to be read by logical decoding plugins. This commit adds an optional
      new callback to the logical decoding API.
      
      Messages are either text or bytea. Messages can be transactional, or not, and
      are identified by a prefix to allow multiple concurrent decoding plugins.
      
      (Not to be confused with Generic WAL records, which are intended to allow crash
      recovery of extensible objects.)
      
      Author: Petr Jelinek and Andres Freund
      Reviewers: Artur Zakirov, Tomas Vondra, Simon Riggs
      Discussion: 5685F999.6010202@2ndquadrant.com
      3fe3511d
  6. Mar 31, 2016
    • Alvaro Herrera's avatar
      Enable logical slots to follow timeline switches · 24c5f1a1
      Alvaro Herrera authored
      When decoding from a logical slot, it's necessary for xlog reading to be
      able to read xlog from historical (i.e. not current) timelines;
      otherwise, decoding fails after failover, because the archives are in
      the historical timeline.  This is required to make "failover logical
      slots" possible; it currently has no other use, although theoretically
      it could be used by an extension that creates a slot on a standby and
      continues to replay from the slot when the standby is promoted.
      
      This commit includes a module in src/test/modules with functions to
      manipulate the slots (which is not otherwise possible in SQL code) in
      order to enable testing, and a new test in src/test/recovery to ensure
      that the behavior is as expected.
      
      Author: Craig Ringer
      Reviewed-By: Oleksii Kliukin, Andres Freund, Petr Jelínek
      24c5f1a1
  7. Mar 30, 2016
    • Alvaro Herrera's avatar
      XLogReader general code cleanup · 3b02ea4f
      Alvaro Herrera authored
      Some minor tweaks and comment additions, for cleanliness sake and to
      avoid having the upcoming timeline-following patch be polluted with
      unrelated cleanup.
      
      Extracted from a larger patch by Craig Ringer, reviewed by Andres
      Freund, with some additions by myself.
      3b02ea4f
  8. Jan 21, 2016
    • Simon Riggs's avatar
      Refactor to create generic WAL page read callback · 422a55a6
      Simon Riggs authored
      Previously we didn’t have a generic WAL page read callback function,
      surprisingly. Logical decoding has logical_read_local_xlog_page(), which was
      actually generic, so move that to xlogfunc.c and rename to
      read_local_xlog_page().
      Maintain logical_read_local_xlog_page() so existing callers still work.
      
      As requested by Michael Paquier, Alvaro Herrera and Andres Freund
      422a55a6
  9. Jan 09, 2016
    • Tom Lane's avatar
      Clean up some lack-of-STRICT issues in the core code, too. · 26d538dc
      Tom Lane authored
      A scan for missed proisstrict markings in the core code turned up
      these functions:
      
      brin_summarize_new_values
      pg_stat_reset_single_table_counters
      pg_stat_reset_single_function_counters
      pg_create_logical_replication_slot
      pg_create_physical_replication_slot
      pg_drop_replication_slot
      
      The first three of these take OID, so a null argument will normally look
      like a zero to them, resulting in "ERROR: could not open relation with OID
      0" for brin_summarize_new_values, and no action for the pg_stat_reset_XXX
      functions.  The other three will dump core on a null argument, though this
      is mitigated by the fact that they won't do so until after checking that
      the caller is superuser or has rolreplication privilege.
      
      In addition, the pg_logical_slot_get/peek[_binary]_changes family was
      intentionally marked nonstrict, but failed to make nullness checks on all
      the arguments; so again a null-pointer-dereference crash is possible but
      only for superusers and rolreplication users.
      
      Add the missing ARGISNULL checks to the latter functions, and mark the
      former functions as strict in pg_proc.  Make that change in the back
      branches too, even though we can't force initdb there, just so that
      installations initdb'd in future won't have the issue.  Since none of these
      bugs rise to the level of security issues (and indeed the pg_stat_reset_XXX
      functions hardly misbehave at all), it seems sufficient to do this.
      
      In addition, fix some order-of-operations oddities in the slot_get_changes
      family, mostly cosmetic, but not the part that moves the function's last
      few operations into the PG_TRY block.  As it stood, there was significant
      risk for an error to exit without clearing historical information from
      the system caches.
      
      The slot_get_changes bugs go back to 9.4 where that code was introduced.
      Back-patch appropriate subsets of the pg_proc changes into all active
      branches, as well.
      26d538dc
  10. Jan 02, 2016
  11. Oct 29, 2015
  12. May 24, 2015
  13. May 20, 2015
    • Heikki Linnakangas's avatar
      Collection of typo fixes. · 4fc72cc7
      Heikki Linnakangas authored
      Use "a" and "an" correctly, mostly in comments. Two error messages were
      also fixed (they were just elogs, so no translation work required). Two
      function comments in pg_proc.h were also fixed. Etsuro Fujita reported one
      of these, but I found a lot more with grep.
      
      Also fix a few other typos spotted while grepping for the a/an typos.
      For example, "consists out of ..." -> "consists of ...". Plus a "though"/
      "through" mixup reported by Euler Taveira.
      
      Many of these typos were in old code, which would be nice to backpatch to
      make future backpatching easier. But much of the code was new, and I didn't
      feel like crafting separate patches for each branch. So no backpatching.
      4fc72cc7
  14. Jan 06, 2015
  15. Dec 23, 2014
    • Alvaro Herrera's avatar
      Revert "Use a bitmask to represent role attributes" · a609d967
      Alvaro Herrera authored
      This reverts commit 1826987a.
      
      The overall design was deemed unacceptable, in discussion following the
      previous commit message; we might find some parts of it still
      salvageable, but I don't want to be on the hook for fixing it, so let's
      wait until we have a new patch.
      a609d967
    • Alvaro Herrera's avatar
      Use a bitmask to represent role attributes · 1826987a
      Alvaro Herrera authored
      The previous representation using a boolean column for each attribute
      would not scale as well as we want to add further attributes.
      
      Extra auxilliary functions are added to go along with this change, to
      make up for the lost convenience of access of the old representation.
      
      Catalog version bumped due to change in catalogs and the new functions.
      
      Author: Adam Brightwell, minor tweaks by Álvaro
      Reviewed by: Stephen Frost, Andres Freund, Álvaro Herrera
      1826987a
  16. Nov 20, 2014
    • Heikki Linnakangas's avatar
      Revamp the WAL record format. · 2c03216d
      Heikki Linnakangas authored
      Each WAL record now carries information about the modified relation and
      block(s) in a standardized format. That makes it easier to write tools that
      need that information, like pg_rewind, prefetching the blocks to speed up
      recovery, etc.
      
      There's a whole new API for building WAL records, replacing the XLogRecData
      chains used previously. The new API consists of XLogRegister* functions,
      which are called for each buffer and chunk of data that is added to the
      record. The new API also gives more control over when a full-page image is
      written, by passing flags to the XLogRegisterBuffer function.
      
      This also simplifies the XLogReadBufferForRedo() calls. The function can dig
      the relation and block number from the WAL record, so they no longer need to
      be passed as arguments.
      
      For the convenience of redo routines, XLogReader now disects each WAL record
      after reading it, copying the main data part and the per-block data into
      MAXALIGNed buffers. The data chunks are not aligned within the WAL record,
      but the redo routines can assume that the pointers returned by XLogRecGet*
      functions are. Redo routines are now passed the XLogReaderState, which
      contains the record in the already-disected format, instead of the plain
      XLogRecord.
      
      The new record format also makes the fixed size XLogRecord header smaller,
      by removing the xl_len field. The length of the "main data" portion is now
      stored at the end of the WAL record, and there's a separate header after
      XLogRecord for it. The alignment padding at the end of XLogRecord is also
      removed. This compansates for the fact that the new format would otherwise
      be more bulky than the old format.
      
      Reviewed by Andres Freund, Amit Kapila, Michael Paquier, Alvaro Herrera,
      Fujii Masao.
      2c03216d
  17. Oct 01, 2014
    • Andres Freund's avatar
      Improve documentation about binary/textual output mode for output plugins. · 0ef3c29a
      Andres Freund authored
      Also improve related error message as it contributed to the confusion.
      
      Discussion: CAB7nPqQrqFzjqCjxu4GZzTrD9kpj6HMn9G5aOOMwt1WZ8NfqeA@mail.gmail.com,
          CAB7nPqQXc_+g95zWnqaa=mVQ4d3BVRs6T41frcEYi2ocUrR3+A@mail.gmail.com
      
      Per discussion between Michael Paquier, Robert Haas and Andres Freund
      
      Backpatch to 9.4 where logical decoding was introduced.
      0ef3c29a
  18. Sep 01, 2014
  19. Jun 30, 2014
    • Andres Freund's avatar
      Check interrupts during logical decoding more frequently. · 1cbc9480
      Andres Freund authored
      When reading large amounts of preexisting WAL during logical decoding
      using the SQL interface we possibly could fail to check interrupts in
      due time. Similarly the same could happen on systems with a very high
      WAL volume while creating a new logical replication slot, independent
      of the used interface.
      
      Previously these checks where only performed in xlogreader's read_page
      callbacks, while waiting for new WAL to be produced. That's not
      sufficient though, if there's never a need to wait.  Walsender's send
      loop already contains a interrupt check.
      
      Backpatch to 9.4 where the logical decoding feature was introduced.
      1cbc9480
  20. May 06, 2014
    • Bruce Momjian's avatar
      pgindent run for 9.4 · 0a783200
      Bruce Momjian authored
      This includes removing tabs after periods in C comments, which was
      applied to back branches, so this change should not effect backpatching.
      0a783200
  21. Mar 04, 2014
  22. Mar 03, 2014
    • Robert Haas's avatar
      Introduce logical decoding. · b89e1510
      Robert Haas authored
      This feature, building on previous commits, allows the write-ahead log
      stream to be decoded into a series of logical changes; that is,
      inserts, updates, and deletes and the transactions which contain them.
      It is capable of handling decoding even across changes to the schema
      of the effected tables.  The output format is controlled by a
      so-called "output plugin"; an example is included.  To make use of
      this in a real replication system, the output plugin will need to be
      modified to produce output in the format appropriate to that system,
      and to perform filtering.
      
      Currently, information can be extracted from the logical decoding
      system only via SQL; future commits will add the ability to stream
      changes via walsender.
      
      Andres Freund, with review and other contributions from many other
      people, including Álvaro Herrera, Abhijit Menon-Sen, Peter Gheogegan,
      Kevin Grittner, Robert Haas, Heikki Linnakangas, Fujii Masao, Abhijit
      Menon-Sen, Michael Paquier, Simon Riggs, Craig Ringer, and Steve
      Singer.
      b89e1510
Loading