diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2024-02-05 11:01:30 +0200 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2024-02-05 11:03:03 +0200 |
commit | fb3836855ca12024f3d7432a4a04217073b1688c (patch) | |
tree | 3328f3dc7c8cdbcd0da63180da03cd290a317238 /src/backend/commands/matview.c | |
parent | d6a61cb3bef3c8fbc35c2a6182e75a8c1d351e41 (diff) | |
download | postgresql-fb3836855ca12024f3d7432a4a04217073b1688c.tar.gz postgresql-fb3836855ca12024f3d7432a4a04217073b1688c.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.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/backend/commands/matview.c b/src/backend/commands/matview.c index 21f2658f47b..9451a8c6b46 100644 --- a/src/backend/commands/matview.c +++ b/src/backend/commands/matview.c @@ -801,9 +801,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.*) " |