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

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Avoid trying to restore table ACLs and per-column ACLs in parall
Date: 2020-07-11 17:37:21
Message-ID: E1juJRB-0007Pp-P7@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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_13_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/bc9aaac1a188cac11b1ebb04047de3db71257785

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

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2020-07-11 18:21:36 pgsql: Avoid useless buffer allocations during binary COPY FROM.
Previous Message Peter Eisentraut 2020-07-11 11:51:47 pgsql: doc: Add link from pg_dump --encoding to supported encodings