I wrote: > Also, I am suspicious that this implementation fails on point 3 > anyway ... If nothing else, it looks like ALTER OBJECT DEPENDS ON > EXTENSION can be used to attach a random dependency to just > about anything.
Yup: regression=# drop table if exists idxpart cascade; DROP TABLE regression=# create table idxpart (a int) partition by range (a); CREATE TABLE regression=# create index on idxpart (a); CREATE INDEX regression=# create table idxpart1 partition of idxpart for values from (0) to (10); CREATE TABLE regression=# drop index idxpart1_a_idx; -- no way ERROR: cannot drop index idxpart1_a_idx because index idxpart_a_idx requires it HINT: You can drop index idxpart_a_idx instead. regression=# \d idxpart1 Table "public.idxpart1" Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- a | integer | | | Partition of: idxpart FOR VALUES FROM (0) TO (10) Indexes: "idxpart1_a_idx" btree (a) regression=# create extension cube; CREATE EXTENSION regression=# alter index idxpart1_a_idx depends on extension cube; ALTER INDEX regression=# drop extension cube; DROP EXTENSION regression=# \d idxpart1 Table "public.idxpart1" Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- a | integer | | | Partition of: idxpart FOR VALUES FROM (0) TO (10) regards, tom lane