1. 12 1月, 2015 1 次提交
    • T
      Fix portability breakage in pg_dump. · 44096f1c
      Tom Lane 提交于
      Commit 0eea8047 introduced some overly
      optimistic assumptions about what could be in a local struct variable's
      initializer.  (This might in fact be valid code according to C99, but I've
      got at least one pre-C99 compiler that falls over on those nonconstant
      address expressions.)  There is no reason whatsoever for main()'s workspace
      to not be static, so revert long_options[] to a static and make the
      DumpOptions struct static as well.
      44096f1c
  2. 27 11月, 2014 1 次提交
    • S
      Rename pg_rowsecurity -> pg_policy and other fixes · 143b39c1
      Stephen Frost 提交于
      As pointed out by Robert, we should really have named pg_rowsecurity
      pg_policy, as the objects stored in that catalog are policies.  This
      patch fixes that and updates the column names to start with 'pol' to
      match the new catalog name.
      
      The security consideration for COPY with row level security, also
      pointed out by Robert, has also been addressed by remembering and
      re-checking the OID of the relation initially referenced during COPY
      processing, to make sure it hasn't changed under us by the time we
      finish planning out the query which has been built.
      
      Robert and Alvaro also commented on missing OCLASS and OBJECT entries
      for POLICY (formerly ROWSECURITY or POLICY, depending) in various
      places.  This patch fixes that too, which also happens to add the
      ability to COMMENT on policies.
      
      In passing, attempt to improve the consistency of messages, comments,
      and documentation as well.  This removes various incarnations of
      'row-security', 'row-level security', 'Row-security', etc, in favor
      of 'policy', 'row level security' or 'row_security' as appropriate.
      
      Happy Thanksgiving!
      143b39c1
  3. 27 10月, 2014 1 次提交
    • T
      Avoid unportable strftime() behavior in pg_dump/pg_dumpall. · f455fcfd
      Tom Lane 提交于
      Commit ad5d46a4 thought that we could
      get around the known portability issues of strftime's %Z specifier by
      using %z instead.  However, that idea seems to have been innocent of
      any actual research, as it certainly missed the facts that
      (1) %z is not portable to pre-C99 systems, and
      (2) %z doesn't actually act differently from %Z on Windows anyway.
      
      Per failures on buildfarm member hamerkop.
      
      While at it, centralize the code defining what strftime format we
      want to use in pg_dump; three copies of that string seems a bit much.
      f455fcfd
  4. 18 10月, 2014 1 次提交
  5. 15 10月, 2014 1 次提交
    • A
      pg_dump: Reduce use of global variables · 0eea8047
      Alvaro Herrera 提交于
      Most pg_dump.c global variables, which were passed down individually to
      dumping routines, are now grouped as members of the new DumpOptions
      struct, which is used as a local variable and passed down into routines
      that need it.  This helps future development efforts; in particular it
      is said to enable a mode in which a parallel pg_dump run can output
      multiple streams, and have them restored in parallel.
      
      Also take the opportunity to clean up the pg_dump header files somewhat,
      to avoid circularity.
      
      Author: Joachim Wieland, revised by Álvaro Herrera
      Reviewed by Peter Eisentraut
      0eea8047
  6. 30 9月, 2014 1 次提交
  7. 26 9月, 2014 1 次提交
    • R
      Fix identify_locking_dependencies for schema-only dumps. · 07d46a89
      Robert Haas 提交于
      Without this fix, parallel restore of a schema-only dump can deadlock,
      because when the dump is schema-only, the dependency will still be
      pointing at the TABLE item rather than the TABLE DATA item.
      
      Robert Haas and Tom Lane
      07d46a89
  8. 25 9月, 2014 1 次提交
    • S
      Code review for row security. · 6550b901
      Stephen Frost 提交于
      Buildfarm member tick identified an issue where the policies in the
      relcache for a relation were were being replaced underneath a running
      query, leading to segfaults while processing the policies to be added
      to a query.  Similar to how TupleDesc RuleLocks are handled, add in a
      equalRSDesc() function to check if the policies have actually changed
      and, if not, swap back the rsdesc field (using the original instead of
      the temporairly built one; the whole structure is swapped and then
      specific fields swapped back).  This now passes a CLOBBER_CACHE_ALWAYS
      for me and should resolve the buildfarm error.
      
      In addition to addressing this, add a new chapter in Data Definition
      under Privileges which explains row security and provides examples of
      its usage, change \d to always list policies (even if row security is
      disabled- but note that it is disabled, or enabled with no policies),
      rework check_role_for_policy (it really didn't need the entire policy,
      but it did need to be using has_privs_of_role()), and change the field
      in pg_class to relrowsecurity from relhasrowsecurity, based on
      Heikki's suggestion.  Also from Heikki, only issue SET ROW_SECURITY in
      pg_restore when talking to a 9.5+ server, list Bypass RLS in \du, and
      document --enable-row-security options for pg_dump and pg_restore.
      
      Lastly, fix a number of minor whitespace and typo issues from Heikki,
      Dimitri, add a missing #include, per Peter E, fix a few minor
      variable-assigned-but-not-used and resource leak issues from Coverity
      and add tab completion for role attribute bypassrls as well.
      6550b901
  9. 19 9月, 2014 1 次提交
    • S
      Row-Level Security Policies (RLS) · 491c029d
      Stephen Frost 提交于
      Building on the updatable security-barrier views work, add the
      ability to define policies on tables to limit the set of rows
      which are returned from a query and which are allowed to be added
      to a table.  Expressions defined by the policy for filtering are
      added to the security barrier quals of the query, while expressions
      defined to check records being added to a table are added to the
      with-check options of the query.
      
      New top-level commands are CREATE/ALTER/DROP POLICY and are
      controlled by the table owner.  Row Security is able to be enabled
      and disabled by the owner on a per-table basis using
      ALTER TABLE .. ENABLE/DISABLE ROW SECURITY.
      
      Per discussion, ROW SECURITY is disabled on tables by default and
      must be enabled for policies on the table to be used.  If no
      policies exist on a table with ROW SECURITY enabled, a default-deny
      policy is used and no records will be visible.
      
      By default, row security is applied at all times except for the
      table owner and the superuser.  A new GUC, row_security, is added
      which can be set to ON, OFF, or FORCE.  When set to FORCE, row
      security will be applied even for the table owner and superusers.
      When set to OFF, row security will be disabled when allowed and an
      error will be thrown if the user does not have rights to bypass row
      security.
      
      Per discussion, pg_dump sets row_security = OFF by default to ensure
      that exports and backups will have all data in the table or will
      error if there are insufficient privileges to bypass row security.
      A new option has been added to pg_dump, --enable-row-security, to
      ask pg_dump to export with row security enabled.
      
      A new role capability, BYPASSRLS, which can only be set by the
      superuser, is added to allow other users to be able to bypass row
      security using row_security = OFF.
      
      Many thanks to the various individuals who have helped with the
      design, particularly Robert Haas for his feedback.
      
      Authors include Craig Ringer, KaiGai Kohei, Adam Brightwell, Dean
      Rasheed, with additional changes and rework by me.
      
      Reviewers have included all of the above, Greg Smith,
      Jeff McCormick, and Robert Haas.
      491c029d
  10. 06 9月, 2014 1 次提交
  11. 26 8月, 2014 1 次提交
  12. 08 7月, 2014 1 次提交
    • T
      In pg_dump, show server and pg_dump versions with or without --verbose. · 7700597b
      Tom Lane 提交于
      We used to print this information only in verbose mode, but it's argued
      that it's useful enough to print always; one reason being that this
      provides some documentation about which Postgres versions the dump is
      meant to reload into.
      
      Jing Wang, reviewed by Jeevan Chalke
      7700597b
  13. 13 6月, 2014 1 次提交
    • T
      Fix pg_restore's processing of old-style BLOB COMMENTS data. · c81e63d8
      Tom Lane 提交于
      Prior to 9.0, pg_dump handled comments on large objects by dumping a bunch
      of COMMENT commands into a single BLOB COMMENTS archive object.  With
      sufficiently many such comments, some of the commands would likely get
      split across bufferloads when restoring, causing failures in
      direct-to-database restores (though no problem would be evident in text
      output).  This is the same type of issue we have with table data dumped as
      INSERT commands, and it can be fixed in the same way, by using a mini SQL
      lexer to figure out where the command boundaries are.  Fortunately, the
      COMMENT commands are no more complex to lex than INSERTs, so we can just
      re-use the existing lexer for INSERTs.
      
      Per bug #10611 from Jacek Zalewski.  Back-patch to all active branches.
      c81e63d8
  14. 07 5月, 2014 1 次提交
    • B
      pgindent run for 9.4 · 0a783200
      Bruce Momjian 提交于
      This includes removing tabs after periods in C comments, which was
      applied to back branches, so this change should not effect backpatching.
      0a783200
  15. 06 5月, 2014 2 次提交
  16. 04 3月, 2014 1 次提交
    • A
      pg_dump et al: Add --if-exists option · 9067310c
      Alvaro Herrera 提交于
      This option makes pg_dump, pg_dumpall and pg_restore inject an IF EXISTS
      clause to each DROP command they emit.  (In pg_dumpall, the clause is
      not added to individual objects drops, but rather to the CREATE DATABASE
      commands, as well as CREATE ROLE and CREATE TABLESPACE.)
      
      This allows for a better user dump experience when using --clean in case
      some objects do not already exist.  Per bug #7873 by Dave Rolsky.
      
      Author: Pavel Stěhule
      Reviewed-by: Jeevan Chalke, Álvaro Herrera, Josh Kupershmidt
      9067310c
  17. 02 3月, 2014 1 次提交
    • S
      Various Coverity-spotted fixes · b1aebbb6
      Stephen Frost 提交于
      A number of issues were identified by the Coverity scanner and are
      addressed in this patch.  None of these appear to be security issues
      and many are mostly cosmetic changes.
      
      Short comments for each of the changes follows.
      
      Correct the semi-colon placement in be-secure.c regarding SSL retries.
      Remove a useless comparison-to-NULL in proc.c (value is dereferenced
        prior to this check and therefore can't be NULL).
      Add checking of chmod() return values to initdb.
      Fix a couple minor memory leaks in initdb.
      Fix memory leak in pg_ctl- involves free'ing the config file contents.
      Use an int to capture fgetc() return instead of an enum in pg_dump.
      Fix minor memory leaks in pg_dump.
        (note minor change to convertOperatorReference()'s API)
      Check fclose()/remove() return codes in psql.
      Check fstat(), find_my_exec() return codes in psql.
      Various ECPG memory leak fixes.
      Check find_my_exec() return in ECPG.
      Explicitly ignore pqFlush return in libpq error-path.
      Change PQfnumber() to avoid doing an strdup() when no changes required.
      Remove a few useless check-against-NULL's (value deref'd beforehand).
      Check rmtree(), malloc() results in pg_regress.
      Also check get_alternative_expectfile() return in pg_regress.
      b1aebbb6
  18. 10 2月, 2014 1 次提交
    • S
      Further pg_dump / ftello improvements · dfb1e9bd
      Stephen Frost 提交于
      Make ftello error-checking consistent to all calls and remove a
      bit of ftello-related code which has been #if 0'd out since 2001.
      
      Note that we are not concerned with the ftello() call under
      snprintf() failing as it is just building a string to call
      exit_horribly() with; printing -1 in such a case is fine.
      dfb1e9bd
  19. 09 2月, 2014 1 次提交
    • S
      Minor pg_dump improvements · cfa1b4a7
      Stephen Frost 提交于
      Improve pg_dump by checking results on various fgetc() calls which
      previously were unchecked, ditto for ftello.  Also clean up a couple
      of very minor memory leaks by waiting to allocate structures until
      after the initial check(s).
      
      Issues spotted by Coverity.
      cfa1b4a7
  20. 30 12月, 2013 1 次提交
    • K
      Don't attempt to limit target database for pg_restore. · 47f50262
      Kevin Grittner 提交于
      There was an apparent attempt to limit the target database for
      pg_restore to version 7.1.0 or later.  Due to a leading zero this
      was interpreted as an octal number, which allowed targets with
      version numbers down to 2.87.36.  The lowest actual release above
      that was 6.0.0, so that was effectively the limit.
      
      Since the success of the restore attempt will depend primarily on
      on what statements were generated by the dump run, we don't want
      pg_restore trying to guess whether a given target should be allowed
      based on version number.  Allow a connection to any version.  Since
      it is very unlikely that anyone would be using a recent version of
      pg_restore to restore to a pre-6.0 database, this has little to no
      practical impact, but it makes the code less confusing to read.
      
      Issue reported and initial patch suggestion from Joel Jacobson
      based on an article by Andrey Karpov reporting on issues found by
      PVS-Studio static code analyzer.  Final patch based on analysis by
      Tom Lane.  Back-patch to all supported branches.
      47f50262
  21. 19 11月, 2013 1 次提交
  22. 25 10月, 2013 1 次提交
    • T
      Use improved vsnprintf calling logic in more places. · 3147acd6
      Tom Lane 提交于
      When we are using a C99-compliant vsnprintf implementation (which should be
      most places, these days) it is worth the trouble to make use of its report
      of how large the buffer needs to be to succeed.  This patch adjusts
      stringinfo.c and some miscellaneous usages in pg_dump to do that, relying
      on the logic recently added in libpgcommon's psprintf.c.  Since these
      places want to know the number of bytes written once we succeed, modify the
      API of pvsnprintf() to report that.
      
      There remains near-duplicate logic in pqexpbuffer.c, but since that code
      is in libpq, psprintf.c's approach of exit()-on-error isn't appropriate
      for use there.  Also note that I didn't bother touching the multitude
      of places that call (v)snprintf without any attempt to provide a resizable
      buffer.
      
      Release-note-worthy incompatibility: the API of appendStringInfoVA()
      changed.  If there's any third-party code that's calling that directly,
      it will need tweaking along the same lines as in this patch.
      
      David Rowley and Tom Lane
      3147acd6
  23. 28 8月, 2013 1 次提交
  24. 13 8月, 2013 1 次提交
  25. 16 6月, 2013 1 次提交
  26. 30 5月, 2013 1 次提交
  27. 28 3月, 2013 1 次提交
    • H
      Move some pg_dump function around. · 7800a712
      Heikki Linnakangas 提交于
      Move functions used only by pg_dump and pg_restore from dumputils.c to a new
      file, pg_backup_utils.c. dumputils.c is linked into psql and some programs
      in bin/scripts, so it seems good to keep it slim. The parallel functionality
      is moved to parallel.c, as is exit_horribly, because the interesting code in
      exit_horribly is parallel-related.
      
      This refactoring gets rid of the on_exit_msg_func function pointer. It was
      problematic, because a modern gcc version with -Wmissing-format-attribute
      complained if it wasn't marked with PF_PRINTF_ATTRIBUTE, but the ancient gcc
      version that Tom Lane's old HP-UX box has didn't accept that attribute on a
      function pointer, and gave an error. We still use a similar function pointer
      trick for getLocalPQBuffer() function, to use a thread-local version of that
      in parallel mode on Windows, but that dodges the problem because it doesn't
      take printf-like arguments.
      7800a712
  28. 26 3月, 2013 1 次提交
  29. 24 3月, 2013 1 次提交
    • A
      Add parallel pg_dump option. · 9e257a18
      Andrew Dunstan 提交于
      New infrastructure is added which creates a set number of workers
      (threads on Windows, forked processes on Unix). Jobs are then
      handed out to these workers by the master process as needed.
      pg_restore is adjusted to use this new infrastructure in place of the
      old setup which created a new worker for each step on the fly. Parallel
      dumps acquire a snapshot clone in order to stay consistent, if
      available.
      
      The parallel option is selected by the -j / --jobs command line
      parameter of pg_dump.
      
      Joachim Wieland, lightly editorialized by Andrew Dunstan.
      9e257a18
  30. 17 3月, 2013 1 次提交
    • T
      Add lock_timeout configuration parameter. · d43837d0
      Tom Lane 提交于
      This GUC allows limiting the time spent waiting to acquire any one
      heavyweight lock.
      
      In support of this, improve the recently-added timeout infrastructure
      to permit efficiently enabling or disabling multiple timeouts at once.
      That reduces the performance hit from turning on lock_timeout, though
      it's still not zero.
      
      Zoltán Böszörményi, reviewed by Tom Lane,
      Stephen Frost, and Hari Babu
      d43837d0
  31. 04 3月, 2013 1 次提交
    • K
      Add a materialized view relations. · 3bf3ab8c
      Kevin Grittner 提交于
      A materialized view has a rule just like a view and a heap and
      other physical properties like a table.  The rule is only used to
      populate the table, references in queries refer to the
      materialized data.
      
      This is a minimal implementation, but should still be useful in
      many cases.  Currently data is only populated "on demand" by the
      CREATE MATERIALIZED VIEW and REFRESH MATERIALIZED VIEW statements.
      It is expected that future releases will add incremental updates
      with various timings, and that a more refined concept of defining
      what is "fresh" data will be developed.  At some point it may even
      be possible to have queries use a materialized in place of
      references to underlying tables, but that requires the other
      above-mentioned features to be working first.
      
      Much of the documentation work by Robert Haas.
      Review by Noah Misch, Thom Brown, Robert Haas, Marko Tiikkaja
      Security review by KaiGai Kohei, with a decision on how best to
      implement sepgsql still pending.
      3bf3ab8c
  32. 12 2月, 2013 1 次提交
    • A
      Create libpgcommon, and move pg_malloc et al to it · 8396447c
      Alvaro Herrera 提交于
      libpgcommon is a new static library to allow sharing code among the
      various frontend programs and backend; this lets us eliminate duplicate
      implementations of common routines.  We avoid libpgport, because that's
      intended as a place for porting issues; per discussion, it seems better
      to keep them separate.
      
      The first use case, and the only implemented by this patch, is pg_malloc
      and friends, which many frontend programs were already using.
      
      At the same time, we can use this to provide palloc emulation functions
      for the frontend; this way, some palloc-using files in the backend can
      also be used by the frontend cleanly.  To do this, we change palloc() in
      the backend to be a function instead of a macro on top of
      MemoryContextAlloc().  This was previously believed to cause loss of
      performance, but this implementation has been tweaked by Tom and Andres
      so that on modern compilers it provides a slight improvement over the
      previous one.
      
      This lets us clean up some places that were already with
      localized hacks.
      
      Most of the pg_malloc/palloc changes in this patch were authored by
      Andres Freund. Zoltán Böszörményi also independently provided a form of
      that.  libpgcommon infrastructure was authored by Álvaro.
      8396447c
  33. 17 1月, 2013 1 次提交
  34. 21 10月, 2012 1 次提交
    • T
      Fix pg_dump's handling of DROP DATABASE commands in --clean mode. · edef20f6
      Tom Lane 提交于
      In commit 4317e024, I accidentally broke
      this behavior while rearranging code to ensure that --create wouldn't
      affect whether a DATABASE entry gets put into archive-format output.
      Thus, 9.2 would issue a DROP DATABASE command in --clean mode, which is
      either useless or dangerous depending on the usage scenario.
      It should not do that, and no longer does.
      
      A bright spot is that this refactoring makes it easy to allow the
      combination of --clean and --create to work sensibly, ie, emit DROP
      DATABASE then CREATE DATABASE before reconnecting.  Ordinarily we'd
      consider that a feature addition and not back-patch it, but it seems
      silly to not include the extra couple of lines required in the 9.2
      version of the code.
      
      Per report from Guillaume Lelarge, though this is slightly more extensive
      than his proposed patch.
      edef20f6
  35. 03 10月, 2012 1 次提交
    • T
      Standardize naming of malloc/realloc/strdup wrapper functions. · a563d941
      Tom Lane 提交于
      We had a number of variants on the theme of "malloc or die", with the
      majority named like "pg_malloc", but by no means all.  Standardize on the
      names pg_malloc, pg_malloc0, pg_realloc, pg_strdup.  Get rid of pg_calloc
      entirely in favor of using pg_malloc0.
      
      This is an essentially cosmetic change, so no back-patch.  (I did find
      a couple of places where psql and pg_dump were using plain malloc or
      strdup instead of the pg_ versions, but they don't look significant
      enough to bother back-patching.)
      a563d941
  36. 04 9月, 2012 1 次提交
  37. 25 7月, 2012 1 次提交
  38. 26 6月, 2012 2 次提交
    • T
      Make pg_dump emit more accurate dependency information. · 8a504a36
      Tom Lane 提交于
      While pg_dump has included dependency information in archive-format output
      ever since 7.3, it never made any large effort to ensure that that
      information was actually useful.  In particular, in common situations where
      dependency chains include objects that aren't separately emitted in the
      dump, the dependencies shown for objects that were emitted would reference
      the dump IDs of these un-dumped objects, leaving no clue about which other
      objects the visible objects indirectly depend on.  So far, parallel
      pg_restore has managed to avoid tripping over this misfeature, but only
      by dint of some crude hacks like not trusting dependency information in
      the pre-data section of the archive.
      
      It seems prudent to do something about this before it rises up to bite us,
      so instead of emitting the "raw" dependencies of each dumped object,
      recursively search for its actual dependencies among the subset of objects
      that are being dumped.
      
      Back-patch to 9.2, since that code hasn't yet diverged materially from
      HEAD.  At some point we might need to back-patch further, but right now
      there are no known cases where this is actively necessary.  (The one known
      case, bug #6699, is fixed in a different way by my previous patch.)  Since
      this patch depends on 9.2 changes that made TOC entries be marked before
      output commences as to whether they'll be dumped, back-patching further
      would require additional surgery; and as of now there's no evidence that
      it's worth the risk.
      8a504a36
    • T
      Improve pg_dump's dependency-sorting logic to enforce section dump order. · a1ef01fe
      Tom Lane 提交于
      As of 9.2, with the --section option, it is very important that the concept
      of "pre data", "data", and "post data" sections of the output be honored
      strictly; else a dump divided into separate sectional files might be
      unrestorable.  However, the dependency-sorting logic knew nothing of
      sections and would happily select output orderings that didn't fit that
      structure.  Doing so was mostly harmless before 9.2, but now we need to be
      sure it doesn't do that.  To fix, create dummy objects representing the
      section boundaries and add dependencies between them and all the normal
      objects.  (This might sound expensive but it seems to only add a percent or
      two to pg_dump's runtime.)
      
      This also fixes a problem introduced in 9.1 by the feature that allows
      incomplete GROUP BY lists when a primary key is given in GROUP BY.
      That means that views can depend on primary key constraints.  Previously,
      pg_dump would deal with that by simply emitting the primary key constraint
      before the view definition (and hence before the data section of the
      output).  That's bad enough for simple serial restores, where creating an
      index before the data is loaded works, but is undesirable for speed
      reasons.  But it could lead to outright failure of parallel restores, as
      seen in bug #6699 from Joe Van Dyk.  That happened because pg_restore would
      switch into parallel mode as soon as it reached the constraint, and then
      very possibly would try to emit the view definition before the primary key
      was committed (as a consequence of another bug that causes the view not to
      be correctly marked as depending on the constraint).  Adding the section
      boundary constraints forces the dependency-sorting code to break the view
      into separate table and rule declarations, allowing the rule, and hence the
      primary key constraint it depends on, to revert to their intended location
      in the post-data section.  This also somewhat accidentally works around the
      bogus-dependency-marking problem, because the rule will be correctly shown
      as depending on the constraint, so parallel pg_restore will now do the
      right thing.  (We will fix the bogus-dependency problem for real in a
      separate patch, but that patch is not easily back-portable to 9.1, so the
      fact that this patch is enough to dodge the only known symptom is
      fortunate.)
      
      Back-patch to 9.1, except for the hunk that adds verification that the
      finished archive TOC list is in correct section order; the place where
      it was convenient to add that doesn't exist in 9.1.
      a1ef01fe