gpt4 book ai didi

postgresql - Postgres- "ERROR: generation expression is not immutable"为什么我的表达式不是一成不变的?

转载 作者:行者123 更新时间:2023-12-05 01:28:21 24 4
gpt4 key购买 nike

我正在尝试在 Postgres 中为文本搜索创建索引,但在创建生成的 tsvector 列时我一直收到错误。

ERROR:  generation expression is not immutable
SQL state: 42P17

我有一个文本“标题”列和文本[]“作者”列。我试图将两者结合起来创建一个 tsvector 列

这是出错的代码

ALTER TABLE book
ADD COLUMN tscol tsvector
GENERATED ALWAYS AS (to_tsvector(title || ' ' || immutable_array_to_string(coalesce(authors, '{}'), ' '))) STORED;

immutable_array_to_string 函数的代码:

CREATE OR REPLACE FUNCTION immutable_array_to_string(text[], text) 
RETURNS text as $$ SELECT array_to_string($1, $2); $$
LANGUAGE sql IMMUTABLE;

最佳答案

您正在调用 to_tsvector 而没有 regconfig,因此使用默认值。在这种情况下,函数只是稳定的。如果你想让它不可变,你必须通过 regconfig

to_tsvector('english',title || ' ' || immutable_array_to_string(coalesce(authors, '{}'), ' ')) 

PS:可以调用\df+ to_tsvector查看不同签名函数的波动情况。

关于postgresql - Postgres- "ERROR: generation expression is not immutable"为什么我的表达式不是一成不变的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68731843/

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