如何在 PostgreSQL hstore 中查询带通配符的值

2024-01-23

我正在尝试查询 hstore 以获取与搜索条件匹配的某个键的所有值。

我可以像这样获取某个键的所有值:

SELECT DISTINCT
svals(slice(data, ARRAY['Supplier']))
FROM "products"

我还可以得到一个具体的值:

SELECT DISTINCT
svals(slice(data, ARRAY['Supplier'])) AS sup
FROM "products"
WHERE data @> 'Supplier => Toshiba'

我真正想要的是类似的东西(这不起作用):

SELECT DISTINCT
svals(slice(data, ARRAY['Supplier'])) AS sup
FROM "products"
WHERE data @> 'Supplier => %tosh%'

or:

SELECT DISTINCT
svals(slice(data, ARRAY['Supplier'])) AS sup
FROM "products"
WHERE lower(sup)
LIKE '%tosh%'

用于不区分大小写的搜索。这是怎么做到的?


您可以通过键从hstore列与->操作员 http://www.postgresql.org/docs/9.2/static/hstore.html#HSTORE-OP-TABLE.

SELECT data->'Supplier' AS sup
FROM products
WHERE lower(data->'Supplier') LIKE '%tosh%';

此外,就像 PostgreSQL 中的大多数表达式一样(除了诸如random()),您可以索引该值:

CREATE INDEX products_supplier_key ON products ((data->'Supplier'));
CREATE INDEX products_supplier_lowercase_key ON products ((lower(data->'Supplier')));

这将允许 PostgreSQL 使用索引回答许多此类查询,而不是获取每一行并扫描hstore柱子。请参阅注释指数类型 http://www.postgresql.org/docs/9.2/static/indexes-types.html关于 LIKE 的索引使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 PostgreSQL hstore 中查询带通配符的值 的相关文章

  • 返回行位置 - Postgres

    我返回一个带有位置的表 select from select row number over as position from organization result where data1 Hello 返回这个 这是正确的 data1 H
  • Postgresql 中的 id 列位置重要吗?

    我正在测试删除主键列 id 的迁移 我想使用外键作为主键 当我运行并恢复迁移时 我看到表的状态是相同的 只是 id 列现在是最后一个 它会以任何方式改变我的数据库的行为吗 我是否应该费心去恢复迁移恢复代码中的列顺序 理论上一切都应该没问题
  • 从备份恢复 PostgreSQL 数据库,没有外键约束问题

    我有一个包含大约 85 个以上表的 postgresql 数据库 我定期使用pg dump 通过 php pgadmin 在复制模式下 备份文件的大小几乎为 10 12 MB 现在我面临的问题是 每当我尝试恢复数据库时 都会出现外键约束问题
  • 如何在数据库中存储年月?

    是否有在数据库中存储年份和月份的标准方法 我需要根据月份和年份制作一些报告 我无法使用日期和函数实时提取月份 因为表很大 所以我需要预处理 我会和 Michael 的建议是什么 https stackoverflow com a 81694
  • Postgresql插入触发器设置值

    假设在 Postgresql 中 我有一个表T它的一栏是C1 我想在新记录添加到表中时触发一个函数T 该函数应该检查列的值C1在新记录中 如果它为 null 空 则将其值设置为 X 这可能吗 您需要触发器是正确的 因为为列设置默认值对您不起
  • Postgresql 使用 IN 与 NOT IN 时的巨大性能差异

    我有两张桌子 transaksi 和 buku transaksi 大约有 25 万行 buku 大约有 17 万行 两个表都有名为 k999a 的列 并且两个表均不使用索引 现在我检查这两个陈述 声明一 explain select k9
  • 使用nodejs的sequelize更新多对多连接表

    我有一个产品表和一个类别表 一个产品可以有多个类别 一个类别可以有多个产品 因此我有一个 ProductsCategories 表来处理多对多连接 在下面的示例中 我尝试将我的一款产品 ID 为 1 与 3 个不同的类别 ID 为 1 2
  • 如何在postgres中获取数组大小大于1的数组

    我有一个看起来像这样的表 val fkey num 1 1 1 1 2 1 1 3 1 2 3 1 我想要做的是返回一组行 其中值按 val 分组 并带有一个 fkey 数组 但仅限于 fkey 数组大于 1 的情况 因此 在上面的示例中
  • pg gem Trace/BPT 陷阱:MAC OS X lion 上出现 5 错误

    我最近将我的雪豹升级为狮子 在我的一个应用程序中我得到了 gt Booting WEBrick gt Rails 3 0 4 application starting in development on http 0 0 0 0 4000
  • PHP json_encode 反斜杠和数组名称的问题

    我正在将一些 postgresql 数据转换为 PHP json encode 但我遇到了一些问题 json encode 将 BackSlash 添加到我的数据中的所有斜杠中 在描述中出现段落标记的结束 我认为是因为反斜杠问题 我不希望我
  • 如何从函数返回更新的行

    我对 postgres 很陌生 我想创建一个函数 如存储过程 来更新多行并选择受影响的行 这是我的声明 CREATE or replace FUNCTION set val val character varying 100 5 RETUR
  • Postgres 和 Django - DataError:无法识别时区

    我们从一些用户那里收到以下错误 DataError time zone Asia Qostanay not recognized 我们发现问题出在以下 SQL 查询上 SELECT FROM app foobar WHERE EXTRACT
  • Postgres 使用 TypeORM SET 运行时变量,如何在调用之间的连接生命周期中保留变量

    我有使用 GraphQL 的 NodeJS Web 服务器 使用 2 个连接 一个具有管理员访问权限 另一个具有 CRUD 访问权限 底层 Postgres DB 有行级安全策略 即 ALTER TABLE main user ENABLE
  • Postgresql:删除某些类型的数字之间的空格

    我有一列地址 例如 01031 970 S o Paulo SP BR 我想删除邮政编码之间的空格 邮政编码可以出现在地址的任何位置 例如 S o Paulo 01031 970 SP BR 结果应该是 S o Paulo 01031970
  • 新分配的序列不起作用

    在 PostgreSQL 中 我创建了一个新表并为其分配了一个新序列id柱子 如果我从 PostgreSQL 控制台插入记录 它可以工作 但是当我尝试从 Rails 导入记录时 它会引发异常 无法找到关联的序列 这是表格 d user me
  • PostgreSQL不使用PostGIS计算两点之间的距离

    当纬度和经度位于表格中的两个单独列中时 如何计算两点之间的距离 我无法使用 PostGIS 因为我使用 heroku Postgres 免费版本 你可以使用这样的东西 select SQRT POW 69 1 latitude float
  • 在 PostgreSQL 中存储图像

    好吧 我正在开发一个应用程序 该应用程序将使用运行 PostgreSQL 的 Linux 后端向 Windows 机器提供图像 前端用 C NET 编写 尽管前端应该不重要 我的问题是 在 Postgres 中存储图像的最佳方法是什么 每张
  • 微服务中的关系型数据库

    我有一个整体应用程序 当前使用 PostgreSQL 数据库 并且模式的设置与您对大多数关系数据库的期望相同 其中各种表数据通过 FK 链接回用户user id 我正在尝试了解有关微服务的更多信息 正在尝试将我的 python API 迁移
  • 在 Docker 中更改 Ubuntu 语言环境

    因此 我正在 pt BR 中使用 Ubuntu 和 Postgresql 设置 docker 映像 我想知道如何通过命令行更改默认区域设置而不重新启动系统 这在 Docker 构建中是不可能的 我设法在 Debian 中通过更改 LANG
  • 分区表查询仍然扫描所有分区

    我有一个包含超过十亿条记录的表 为了提高性能 我将其分区为30个分区 最常见的查询有 id 在他们的 where 子句中 所以我决定对表进行分区id column 基本上 分区是这样创建的 CREATE TABLE foo 0 CHECK

随机推荐