aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/matview.c
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2024-02-05 11:01:30 +0200
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2024-02-05 11:04:23 +0200
commitadd8bc9b8c31fd0c7acfd64a4e2af71ea7b6b58c (patch)
treee4f16ebfd0f7f2a013c40fe1bcca1b6b1e8a6f2d /src/backend/commands/matview.c
parent2699fc035a75d0774c1f013e9320882287f78adb (diff)
downloadpostgresql-add8bc9b8c31fd0c7acfd64a4e2af71ea7b6b58c.tar.gz
postgresql-add8bc9b8c31fd0c7acfd64a4e2af71ea7b6b58c.zip
Fix assertion if index is dropped during REFRESH CONCURRENTLY
When assertions are disabled, the built SQL statement is invalid and you get a "syntax error". So this isn't a serious problem, but let's avoid the assertion failure. Backpatch to all supported versions. Reviewed-by: Noah Misch
Diffstat (limited to 'src/backend/commands/matview.c')
-rw-r--r--src/backend/commands/matview.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/backend/commands/matview.c b/src/backend/commands/matview.c
index e87bdac2851..d82bee57d92 100644
--- a/src/backend/commands/matview.c
+++ b/src/backend/commands/matview.c
@@ -795,9 +795,12 @@ refresh_by_match_merge(Oid matviewOid, Oid tempOid, Oid relowner,
*
* ExecRefreshMatView() checks that after taking the exclusive lock on the
* matview. So at least one unique index is guaranteed to exist here
- * because the lock is still being held; so an Assert seems sufficient.
+ * because the lock is still being held. (One known exception is if a
+ * function called as part of refreshing the matview drops the index.
+ * That's a pretty silly thing to do.)
*/
- Assert(foundUniqueIndex);
+ if (!foundUniqueIndex)
+ elog(ERROR, "could not find suitable unique index on materialized view");
appendStringInfoString(&querybuf,
" AND newdata.* OPERATOR(pg_catalog.*=) mv.*) "