From: | Nico Williams <nico(at)cryptonector(dot)com> |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org |
Subject: | pg_dump(1) failures when concurrently refreshing mat views |
Date: | 2017-04-19 19:32:13 |
Message-ID: | 20170419193212.GD2856@localhost |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
pg_dump(1) gets an EXCLUSIVE LOCK with NOWAIT and fails if a
not-UNLOGGED, not-TEMP TABLE is locked. Materialized views (from code
inspection) make not-UNLOGGED, not-TEMP materialization tables, and
REFRESH .. CONCURRENTLY acquires an EXCLUSIVE LOCK on the table.
This means that REFRESH .. CONCURRENTLY can cause a pg_dump(1) to fail.
We've observed this with our alternative view materialization SQL [0],
which is patterned after PostgreSQL's MATERIALIZED VIEWS.
The workaround is to use the -T option to list tables to not dump, and
just not dump materialization tables.
Some possible fixes:
- dump the TEMP table from which a locked materialization table is
being concurrently refreshed
- skip locked materialization tables; cause a refresh on reload
- never dump materialization tables; cause a refresh on reload
Some possible additional options:
- make materialization tables optionally UNLOGGED
- add an option to pg_dump(1) to wait for locks
(A bad idea if pg_dump(1) acquires all the locks before doing any
work.)
[0] https://github.com/twosigma/postgresql-contrib/blob/master/pseudo_mat_views.sql
Nico
--
From | Date | Subject | |
---|---|---|---|
Next Message | david.g.johnston | 2017-04-19 20:43:27 | BUG #14626: array_agg( anyarray ) unexpected error with multi-valued single-dimension array |
Previous Message | pavel.l.kirichenko | 2017-04-18 14:29:19 | BUG #14625: Error "sslv3 alert certificate expired" with valid certificate |