Postgresql

在帶有 pg_trgm 擴展的模式中創建 GIN 索引

  • August 29, 2020

我正在將實體從public模式遷移到一個新的模式中,我們稱之為myschema。最初,pg_trgm安裝了擴展並在架構遷移中創建了索引:

CREATE EXTENSION IF NOT EXISTS pg_trgm;
CREATE INDEX mytable_gin_index_on_mycolumn
   ON mytable USING gin (mycolumn gin_trgm_ops);

為此,myschema我將遷移修改為如下所示:

CREATE EXTENSION IF NOT EXISTS pg_trgm WITH SCHEMA myschema;
CREATE INDEX mytable_gin_index_on_mycolumn
   ON mytable USING gin (mycolumn gin_trgm_ops);

但是,索引創建失敗並出現以下錯誤:

訪問方法“gin”不存在運算符類“gin_trgm_ops”

我嘗試命名操作符類:

CREATE EXTENSION IF NOT EXISTS pg_trgm WITH SCHEMA myschema;
CREATE INDEX mytable_gin_index_on_mycolumn
   ON mytable USING gin (mycolumn myschema.gin_trgm_ops);

但得到了同樣的錯誤:

訪問方法“gin”不存在運算符類“myschema.gin_trgm_ops”

我還嘗試在不指定架構的情況下安裝擴展,這會產生相同的錯誤。

在除 之外的模式中使用 pg_trgm 擴展的正確方法是什麼public

您可以在執行 DDL 語句之前調整search_path :

set search_path = myschema,public;

引用自:https://dba.stackexchange.com/questions/274576