diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2020-09-01 13:40:43 -0400 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2020-09-01 13:40:43 -0400 |
commit | afc7e0ad556a4f720c466cb4815fc77d310fc50a (patch) | |
tree | b244cd9dd3f0cf3ca0ef0579f7b2fbe17dcc5540 /src/backend/commands/tablecmds.c | |
parent | b55b4dad99e99d5306744a4e8ef8021fa3a922e4 (diff) | |
download | postgresql-afc7e0ad556a4f720c466cb4815fc77d310fc50a.tar.gz postgresql-afc7e0ad556a4f720c466cb4815fc77d310fc50a.zip |
Raise error on concurrent drop of partitioned index
We were already raising an error for DROP INDEX CONCURRENTLY on a
partitioned table, albeit a different and confusing one:
ERROR: DROP INDEX CONCURRENTLY must be first action in transaction
Change that to throw a more comprehensible error:
ERROR: cannot drop partitioned index \"%s\" concurrently
Michael Paquier authored the test case for indexes on temporary
partitioned tables.
Backpatch to 11, where indexes on partitioned tables were added.
Reported-by: Jan Mussler <jan.mussler@zalando.de>
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Discussion: https://postgr.es/m/16594-d2956ca909585067@postgresql.org
Diffstat (limited to 'src/backend/commands/tablecmds.c')
-rw-r--r-- | src/backend/commands/tablecmds.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index d2b15a3387b..3e57c7f9e1d 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -1373,6 +1373,17 @@ RemoveRelations(DropStmt *drop) flags |= PERFORM_DELETION_CONCURRENTLY; } + /* + * Concurrent index drop cannot be used with partitioned indexes, + * either. + */ + if ((flags & PERFORM_DELETION_CONCURRENTLY) != 0 && + get_rel_relkind(relOid) == RELKIND_PARTITIONED_INDEX) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot drop partitioned index \"%s\" concurrently", + rel->relname))); + /* OK, we're ready to delete this one */ obj.classId = RelationRelationId; obj.objectId = relOid; |