pg_dump(1) failures when concurrently refreshing mat views

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
--

Responses

Browse pgsql-bugs by date

  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