如何防止 postgres 自动创建多个名为 <my index names>_ccnew 的相似索引?

问题描述 投票:0回答:1

我最近注意到,在对表重新建立索引后,我最终得到了一组新索引,这些索引似乎是由 postgres 自动创建的。在下面的 DDL 中,所有以 _ccnew(#) 结尾的索引都是由 postgres 创建的。

如何指示 postgres 停止创建这些索引?它们最终会占用大量空间,而且有时,当我尝试重新索引时,我会收到错误消息,抱怨 _ccnew 索引无法重新创建或不存在。

如果我删除它们,在新的重新索引后它们会再次出现

为了重新索引,我都尝试过

同时重新索引表 ${tableName};

重新索引表${tableName};

在这两种情况下我都看到了相同的 postgres 行为

我在 debian 上运行 Postgres 16 DB。容器名称是:groonga/pgroonga:3.2.0-debian-16

有什么想法吗?

谢谢

CREATE TABLE "search".ar (
    id uuid NOT NULL,
    product_id uuid NOT NULL,
    "text" text NULL,
    username varchar(255) NOT NULL,
    creation_time timestamp NOT NULL,
    update_time timestamp NOT NULL,
    CONSTRAINT search_ar_pkey PRIMARY KEY (id),
    CONSTRAINT search_ar_product_id_locale_key UNIQUE (product_id),
)
TABLESPACE dbspace1
;
CREATE INDEX search_ar_product_id_idx ON search.ar USING btree (product_id);
CREATE INDEX search_ar_product_id_idx_ccnew ON search.ar USING btree (product_id);
CREATE INDEX search_ar_product_id_idx_ccnew1 ON search.ar USING btree (product_id);
CREATE INDEX search_ar_product_id_idx_ccnew2 ON search.ar USING btree (product_id);
CREATE INDEX search_ar_product_id_idx_ccnew3 ON search.ar USING btree (product_id);
CREATE UNIQUE INDEX search_ar_product_id_locale_key_ccnew ON search.ar USING btree (product_id);
postgresql
1个回答
0
投票

如果您使用

CREATE INDEX CONCURRENTLY
,PostgreSQL将始终创建这些索引。这是正在创建的不完整索引。当 PostgreSQL 创建完索引后,它将被重命名为其最终名称。

如果

CREATE INDEX CONCURRENTLY
失败,索引会被留下,你必须手动删除它。这是必要的,因为该语句不是在单个数据库事务中运行以避免锁定表。

© www.soinside.com 2019 - 2024. All rights reserved.