在转换为数组的文本列上创建 postgresql 索引

发布于 2024-12-01 02:08:24 字数 498 浏览 0 评论 0原文

我有一个 postgresql 表,其中有一列数据类型='text',我需要在其中创建一个索引,该索引涉及将该列类型转换为整数[]。但是,每当我尝试这样做时,都会收到以下错误:

错误:索引表达式中的函数必须标记为 IMMUTABLE

这是代码:

create table test (a integer[], b text);

insert into test values ('{10,20,30}','{40,50,60}');

CREATE INDEX index_test on test USING GIN ((   b::integer[]      ));

请注意,一个潜在的解决方法是创建一个标记为 IMMUTABLE 的函数,该函数接受列value 并在函数内执行类型转换,但问题(除了增加开销之外)是我有许多不同的“目标”数组数据类型(例如:text[]、int2[]、int4[]等...... ),并且它不可能为每个潜在的目标数组数据类型创建单独的函数。

I have a postgresql table that has a column with data type = 'text' in which I need to create an index which involves this column being type casted to integer[]. However, whenever I try to do so, I get the following error:

ERROR: functions in index expression must be marked IMMUTABLE

Here is the code:

create table test (a integer[], b text);

insert into test values ('{10,20,30}','{40,50,60}');

CREATE INDEX index_test on test USING GIN ((   b::integer[]      ));

Note that one potential workaround is to create a function that is marked as IMMUTABLE that takes in a column value and performs the type casting within the function, but the problem (aside from adding overhead) is that I have many different 'target' array data types (EG: text[], int2[], int4[], etc...), and it would not be possible to create a separate function for each potential target array data type.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

若水般的淡然安静女子 2024-12-08 02:08:24

在 PostgreSQL 上在此线程中回答邮件列表。单击帖子后链接中的“后续”或“下一个线程”,以关注有关该主题的(短)线程。

那里没有给出任何秘诀,但 Tom 只是谈论定义从 text[]integer[] 的显式转换。如果时间允许,我会用一个例子来充实这个答案。

Answered in this thread on the PostgreSQL mailing lists. Click on "Follow-ups" or "next by thread" in the links after the post to follow the (short) thread on the topic.

There's no recipe given there, but Tom's just talking about defining an explicit cast from text[] to integer[]. If time permits I'll flesh this answer out with an example.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文