mirror of
https://github.com/postgres/postgres.git
synced 2026-03-11 10:45:17 -04:00
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 |
||
|---|---|---|
| .. | ||
| po | ||
| .gitignore | ||
| common.c | ||
| compress_io.c | ||
| compress_io.h | ||
| dumputils.c | ||
| dumputils.h | ||
| keywords.c | ||
| Makefile | ||
| nls.mk | ||
| parallel.c | ||
| parallel.h | ||
| pg_backup.h | ||
| pg_backup_archiver.c | ||
| pg_backup_archiver.h | ||
| pg_backup_custom.c | ||
| pg_backup_db.c | ||
| pg_backup_db.h | ||
| pg_backup_directory.c | ||
| pg_backup_null.c | ||
| pg_backup_tar.c | ||
| pg_backup_tar.h | ||
| pg_backup_utils.c | ||
| pg_backup_utils.h | ||
| pg_dump.c | ||
| pg_dump.h | ||
| pg_dump_sort.c | ||
| pg_dumpall.c | ||
| pg_restore.c | ||