pgsql: Avoid trying to restore table ACLs and per-column ACLs in parall - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Avoid trying to restore table ACLs and per-column ACLs in parall
Date
Msg-id E1juJRB-0007Py-QO@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Avoid trying to restore table ACLs and per-column ACLs in parallel.

Parallel pg_restore has always supposed that ACL items for different
objects are independent and can be restored in parallel without
conflicts.  However, there is one case where this fails: because
REVOKE on a table is defined to also revoke the privilege(s) at
column level, we can't restore per-column ACLs till after we restore
any table-level privileges on their table.  Failure to honor this
restriction can lead to "tuple concurrently updated" errors during
parallel restore, or even to the per-column ACLs silently disappearing
because the table-level REVOKE is executed afterwards.

To fix, add a dependency from each column-level ACL item to its table's
ACL item, if there is one.  Note that this doesn't fix the hazard
for pre-existing archive files, only for ones made with a corrected
pg_dump.  Given that the bug's been there quite awhile without
field reports, I think this is acceptable.

This requires changing the API of pg_dump's dumpACL() function.
To keep its argument list from getting even longer, I removed the
"CatalogId objCatId" argument, which has been unused for ages.

Per report from Justin Pryzby.  Back-patch to all supported branches.

Discussion: https://postgr.es/m/20200706050129.GW4107@telsasoft.com

Branch
------
REL_10_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/2d43c3057c971e63d1b7389d830dabe6c3ea368a

Modified Files
--------------
src/bin/pg_dump/common.c    |  2 +-
src/bin/pg_dump/pg_backup.h |  6 ++++
src/bin/pg_dump/pg_dump.c   | 79 +++++++++++++++++++++++++++++----------------
3 files changed, 58 insertions(+), 29 deletions(-)


pgsql-committers by date:

Previous
From: Peter Eisentraut
Date:
Subject: pgsql: doc: Add link from pg_dump --encoding to supported encodings
Next
From: Tom Lane
Date:
Subject: pgsql: Avoid useless buffer allocations during binary COPY FROM.