簡體   English   中英

Postgres GIN索引未通過Liquibase腳本創建

[英]Postgres GIN Index Not Creating Through Liquibase Scripts

我正在嘗試通過liquibase腳本創建GIN索引。

CREATE INDEX IF NOT EXISTS index_name ON schema_name.table_name USING gin (column1, lower(column2) COLLATE pg_catalog."default" gin_trgm_ops)

每次liquibae變更集的遷移都會失敗,但以下情況除外:

liquibase.exception.DatabaseException:錯誤:訪問方法“ gin”的操作符類“ gin_trgm_ops”不存在

問題是,當直接從pgAdmin查詢工具運行時,此查詢有效。 從liquibase腳本運行此查詢時似乎存在一些問題。

在從pgAdmin查詢工具創建索引之前,我必須創建以下擴展。 我也在liquibase腳本中創建這些擴展。

CREATE EXTENSION IF NOT EXISTS pg_trgm with schema public;

CREATE EXTENSION IF NOT EXISTS btree_gin with schema public;

以下是我的liquibase腳本創建擴展和索引的部分。 Btree索引創建查詢與liquibase腳本一起很好地工作。 嘗試創建GIN索引時,失敗並出現上述異常。

CREATE EXTENSION IF NOT EXISTS pg_trgm with schema public;

CREATE EXTENSION IF NOT EXISTS btree_gin with schema public;

以下作品:

CREATE INDEX IF NOT EXISTS index_name ON table_name USING btree (col1,col2 COLLATE pg_catalog."default") 

CREATE INDEX IF NOT EXISTS index_name ON table_name USING btree (col1, col2 COLLATE pg_catalog."default")

但這失敗了:

CREATE INDEX IF NOT EXISTS index_name ON table_name USING gin (col1, lower(col2) COLLATE pg_catalog."default" gin_trgm_ops)

想知道liquibase是否正在運行腳本,是否未在搜索路徑中運行公共模式,導致無法找到用於創建索引的gin_trgm_ops運算符類。 錯誤消息肯定會表明這一點。

可以將其顯式添加到搜索路徑中,然后重試(它應該可以工作),或者在pg_catalog模式中創建擴展名,以便其隱式可用。 參見此處: https : //www.postgresql.org/docs/9.1/ddl-schemas.html (第5.7.5節)。

您可以通過運行以下命令代替現有的pg_trgm create extension命令來執行此操作。

CREATE EXTENSION IF NOT EXISTS pg_trgm with schema pg_catalog;

接下來是其他命令應該可以解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM