Thread: unable to drop index because it does not exists

unable to drop index because it does not exists

From
Luca Ferrari
Date:
Hi,
running 11.5 I've got a partitioned table where I want to destroy an
index (on a column that has nothing to do with the partition):


respidb=# \d+ respi.root

    Column    |            Type             |
--------------+-----------------------------+-
 sen_id       | integer                     |
 mis_flusso   | integer                     |
 mis_tasso    | integer                     |
 mis_velocita | integer                     |
 mis_ora      | timestamp without time zone |
 pk           | bigint                      |
 ts           | timestamp without time zone |
Partition key: LIST (date_part('year'::text, mis_ora))
Indexes:
    "idx_root_sensore" btree (sen_id)
    "idx_ts" btree (ts)
Partitions: respi.y2018 FOR VALUES IN ('2018'), PARTITIONED,
            respi.y2019 FOR VALUES IN ('2019'), PARTITIONED,
            respi.y2020 FOR VALUES IN ('2020'), PARTITIONED

respidb=# drop index idx_root_sensore;
ERROR:  index "idx_root_sensore" does not exist

Of course the index exists:

SELECT oid, relname, relkind FROM pg_class WHERE relname = 'idx_root_sensore';
-[ RECORD 1 ]-------------
oid     | 40950
relname | idx_root_sensore
relkind | I


I already did a manual vacuum on the table.
Any idea?

Luca



Re: unable to drop index because it does not exists

From
Ron
Date:
On 9/23/19 6:39 AM, Luca Ferrari wrote:
> Hi,
> running 11.5 I've got a partitioned table where I want to destroy an
> index (on a column that has nothing to do with the partition):
>
>
> respidb=# \d+ respi.root
>
>      Column    |            Type             |
> --------------+-----------------------------+-
>   sen_id       | integer                     |
>   mis_flusso   | integer                     |
>   mis_tasso    | integer                     |
>   mis_velocita | integer                     |
>   mis_ora      | timestamp without time zone |
>   pk           | bigint                      |
>   ts           | timestamp without time zone |
> Partition key: LIST (date_part('year'::text, mis_ora))
> Indexes:
>      "idx_root_sensore" btree (sen_id)
>      "idx_ts" btree (ts)
> Partitions: respi.y2018 FOR VALUES IN ('2018'), PARTITIONED,
>              respi.y2019 FOR VALUES IN ('2019'), PARTITIONED,
>              respi.y2020 FOR VALUES IN ('2020'), PARTITIONED
>
> respidb=# drop index idx_root_sensore;
> ERROR:  index "idx_root_sensore" does not exist
>
> Of course the index exists:
>
> SELECT oid, relname, relkind FROM pg_class WHERE relname = 'idx_root_sensore';
> -[ RECORD 1 ]-------------
> oid     | 40950
> relname | idx_root_sensore
> relkind | I
>
>
> I already did a manual vacuum on the table.
> Any idea?

Try specifying the schema name:

drop index respi.idx_root_sensore;


-- 
Angular momentum makes the world go 'round.



Re: unable to drop index because it does not exists

From
Luca Ferrari
Date:
On Mon, Sep 23, 2019 at 2:23 PM Ron <ronljohnsonjr@gmail.com> wrote:
> Try specifying the schema name:

Yeah, shame on me, I always forget the schema for indexes!

Thanks,
Luca



Re: unable to drop index because it does not exists

From
Michael Lewis
Date:
Partition key: LIST (date_part('year'::text, mis_ora))

As an aside, you may benefit from switching to range partitioning* depending on how your queries are written. If you have conditions such as "WHERE mis_ora BETWEEN CURRENT_DATE - 30 AND CURRENT_DATE" or similar, then the fact that your partitioning is defined as a function result will mean all partitions gets scanned instead of partitioned being pruned as early as possible in the process. That's my understanding anyway. If you always include date_part( 'year', mis_ora) comparison in your where/join conditions, then you'll likely be just fine. Do as you need.

*eg '01/01/2018' to '01/01/2019' for the 2018 partition since upper bound is always exclusive