gpt4 book ai didi

postgresql - Postgres GIN 索引不是通过 Liquibase 脚本创建的

转载 作者:行者123 更新时间:2023-11-29 12:24:02 32 4
gpt4 key购买 nike

我正在尝试通过 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: ERROR: operator class "gin_trgm_ops" does not exist for access method "gin"

问题是这个查询在直接从 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 是否正在运行脚本,而不是在搜索路径中使用公共(public)模式运行,从而导致无法找到您用于创建索引的 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;

接下来是您的其他命令应该可以解决问题。

关于postgresql - Postgres GIN 索引不是通过 Liquibase 脚本创建的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51516336/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com