【问题标题】:Finding the intersection between two integer arrays in postgres在 postgres 中查找两个整数数组之间的交集
【发布时间】:2021-11-14 05:47:30
【问题描述】:

在 postgres documentation 中我发现如果我有两个 intarray 我可以使用 & 运算符来获取两个数组之间的公共元素(交集),但是这个语句:

SELECT  ('{190,80}'::integer[]) & ('{190,80, 50}'::integer[])

引发此错误:

ERROR:  operator does not exist: integer[] & integer[]
LINE 1: SELECT  (('{190,80}'::integer[]) & ('{190,80, 50}'::integer[...

我有 postgresql 版本 13

我想知道为什么这不起作用,我该如何修复查询或尝试另一种有效的替代方法。

【问题讨论】:

  • 我很好奇您是否尝试在语句之外初始化您的数组以解决您的问题。
  • 即使我使用表中已经是 integer[] 类型的两列,它也不起作用,因此在语句不起作用之前进行初始化,我只是发布了这个查询,因为它更容易大家来重现这个问题。

标签: sql arrays database postgresql


【解决方案1】:

您发送的文档用于扩展。要使用它,您必须在数据库上运行 CREATE EXTENSION intarray 以便这些命令起作用。这会将扩展加载到数据库中,从那时起,您将能够在该数据库上的所有查询中使用它。

您可以阅读更多关于扩展程序here 以及如何加载它们的信息here

【讨论】:

  • 谢谢你这对我有用。
  • 我什么时候应该每次连接数据库时运行CREATE EXTENSION intarray,或者运行一次就足够了
  • 扩展是在数据库上创建的,所以你只需要在我在答案上添加文档后运行它
  • 谢谢,非常感谢。
【解决方案2】:

正如@NuLo 所说,您应该首先在您的数据库中创建扩展:

create extension intarray;

select (array [190, 80] & array [190, 80, 50]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 2022-07-30
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    相关资源
    最近更新 更多