我一直在 Docker 容器中运行 Postgres 14/PostGIS 并通过 Flask-SQLAlchemy v3.0.2 与其通信。我在数据库中的一列上设置了全文搜索索引。几个月来我一直没有遇到过任何问题,直到今天我在不更改任何内容的情况下重建了图像。现在,当我尝试创建表时,出现以下错误:
sqlalchemy.exc.CompileError: No literal value renderer is available for literal value "'english'" with datatype REGCONFIG
Run Code Online (Sandbox Code Playgroud)
导致此问题的模型代码:
def create_tsvector(*args):
field, weight = args[0]
exp = func.setweight(func.to_tsvector('english', func.coalesce(field, '')), weight)
for field, weight in args[1:]:
exp = op(exp, '||', func.setweight(func.to_tsvector('english', func.coalesce(field, '')), weight))
return exp
Run Code Online (Sandbox Code Playgroud)
这在这里被调用:
class Listing(db.Model):
__tablename__ = "listing"
...
__ts_vector__ = create_tsvector((title, 'A'), (description, 'B'))
__table_args__ = (
db.Index(
'idx_listing_fts',
__ts_vector__,
postgresql_using="gin"
),
)
Run Code Online (Sandbox Code Playgroud)
我已经摆脱了文本索引并且服务器启动正常,所以我知道这是导致问题的原因。我还尝试删除“英语”regconfig,但这会导致进一步的问题,并且无论如何我希望 regconfig 位于其中。我可以尝试一种完全不同的构建索引的方法,但我宁愿不这样做,因为它之前工作得很好。
我不知道从哪里开始寻找,因为这似乎是自发发生的,并且根据 Postgres …