PostgreSQL 中表达式索引的实际限制

2024-01-26

我需要使用 HSTORE 类型和键索引来存储数据。

CREATE INDEX ix_product_size ON product(((data->'Size')::INT))
CREATE INDEX ix_product_color ON product(((data->'Color')))
etc.

使用表达式索引有哪些实际限制?就我而言,可能有数百种不同类型的数据,因此有数百种表达式索引。每个插入、更新和选择查询都必须针对这些索引进行处理,以便选择正确的索引。


我从来没有玩过 hstore,但当我需要 EAV 列时我会做类似的事情,例如:

create index on product_eav (eav_value) where (eav_type = 'int');

这样做的限制是您需要在查询中明确地使用它,即该查询不会使用上述索引:

select product_id
from product_eav
where eav_name = 'size'
and eav_value = :size;

但这一个会:

select product_id
from product_eav
where eav_name = 'size'
and eav_value = :size
and type = 'int';

在您的示例中,它可能应该更像是:

create index on product ((data->'size')::int) where (data->'size' is not null);

这应该避免在没有大小条目时添加对索引的引用。根据您使用的 PG 版本,查询可能需要进行如下修改:

select product_id
from products
where data->'size' is not null
and data->'size' = :size;

常规索引和部分索引之间的另一个大区别是后者不能在表定义中强制执行唯一约束。这将成功:

create unique index foo_bar_key on foo (bar) where (cond);

以下情况不会:

alter table foo add constraint foo_bar_key unique (bar) where (cond);

但这会:

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

PostgreSQL 中表达式索引的实际限制 的相关文章

  • 显示包含特定表的所有数据库名称

    我的 SQL Server 中有很多数据库 我必须只搜索包含特定表名的数据库名称Heartbitmaster 我有很多数据库 例如Gotgold DVD等 我只想从包含此表的查询中查找数据库名称Heartbitmaster 我搜索我尝试查询
  • Drupal 视图 - 自定义/修改 SQL

    我遇到了 配置文件复选框 模块的问题 该模块存储以逗号分隔的自定义配置文件字段 问题是我是否创建一个视图来按值过滤 SQL 结果最终是这样的 AND profile values profile interests value in Bus
  • PostgreSQL:有效地将 JSON 数组拆分为行

    我有一个表 表 A 其中包含一个包含 JSON 编码数据的文本列 JSON 数据始终是一个包含一到几千个普通对象的数组 我有另一个表 表 B 其中有几列 包括数据类型为 JSON 的列 我想从表 A 中选择所有行 将 json 数组拆分为其
  • 对 postgresql 中使用 array_agg 创建的文本聚合进行排序

    我在 postgresql 中有一个表 下表 动物 可以解释我的问题 name tiger cat dog 现在我正在使用以下查询 SELECT array to string array agg name FROM animals 结果是
  • 表达与空列表相同的 IN 条件的可移植方式是什么?

    例如 工作于sqllite3 select from orders where custid and status in 但它失败了postgres ksysdb select code applicable objecttype from
  • SELECT DISTINCT HAVING 计算唯一条件

    我已经搜索过这个问题的答案 但找不到如何根据条件获取这个不同的记录集 我有一个包含以下示例数据的表 Type Color Location Supplier Apple Green New York ABC Apple Green New
  • 存储过程总是返回0

    我试图从存储过程获取返回值 但它总是返回 0 c code cmd new SqlCommand cmd CommandType CommandType StoredProcedure cmd CommandText AbsentEntry
  • 在 MySQL 中插入时检查并防止相似字符串

    简要信息 我有3张桌子 Set id name SetItem set id item id position TempSet id 我有一个函数可以生成新的随机组合Item桌子 基本上 总是在成功生成之后 我在中创建一个新行Set表 获取
  • 用数字 1-1000 填充 Postgres 数据库?

    我是 pgAdmin3 的新手 我想用数字 1 1000 填充 pgAdmin3 中的数据库 我该怎么做呢 目前 我创建了一个名为 MyDatabase 的数据库 其中没有任何内容 每行应与其数值相对应 第 1 行应包含 1 第 2 行应包
  • mysql LIKE 查询时间太长

    SQL SELECT COUNT usr id as total results FROM users as usr LEFT JOIN profile as prof ON prof uid usr uid WHERE usr usern
  • 如何将列中的天数添加到 DB2 中的当前日期?

    我正在编写此 SQL 来动态计算一定的天数 如下所示 但我不知道如何让它工作 因为我不断收到错误 select Current Date Dynamic numbr of days calculation here from TableNa
  • 什么会导致 Oracle ROWID 更改?

    AFAIK Oracle 中的 ROWID 表示相应数据文件中记录的物理位置 在什么情况下记录的ROWID可能会改变 我所知道的一个是分区表上的更新 它将记录 移动 到另一个分区 还有其他情况吗 我们的大多数数据库都是 Oracle 10
  • db2中如何删除所有非数字字母

    我在 DATA 列 varchar 中有一些数据 如下所示 Nowshak 7 485 m Maja e Korabit Golem Korab 2 764 m Tahat 3 003 m Morro de Moco 2 620 m Cer
  • MySQL 跨表计数(*) 查询帮助

    SELECT name COUNT AS count FROM t1 t2 WHERE t2 id t1 id GROUP BY t2 id 我想从 t1 获取名称以及 t2 中 id 与 t1 相同的行数 到目前为止我已经得到了上面的内容
  • 数据库级别的别名列名 [MySQL]

    别名 可能是错误的词 因为它是在将列 表名称作为查询中的其他名称引用的上下文中使用的 我感兴趣的是是否有一种方法可以在数据库中为列指定两个名称 如果我要打印这样的表格 它看起来会是这样的 mysql gt SELECT FROM User
  • postgresql 中的锁定表

    我有一个名为 games 其中包含一个名为 title 该列是唯一的 数据库中使用PostgreSQL 我有一个用户输入表单 允许他插入新的 game in games 桌子 插入新游戏的功能会检查之前输入的游戏是否存在 game 与相同的
  • 提高 PostgreSQL 1 亿数据左连接查询性能

    我在用Postgresql 9 2 version Windows 7 64 bit RAM 6GB 这是一个Java企业项目 我必须在我的页面中显示订单相关信息 有三个表通过左连接连接在一起 Tables TV HD 389772 行 T
  • 如何在事务中使用链接服务器插入远程表?

    我的链接服务器设置正确 我能够执行以下查询 插入 远程服务器 表 SELECT FROM 本地服务器 表 然而当我做同样的事情时交易内 开始传输 插入 远程服务器 表 SELECT FROM 本地服务器 表 提交交易 我收到类似的错误 用于
  • 更新 SQLAlchemy 中的特定行

    我将 SQLAlchemy 与 python 一起使用 我想更新表中等于此查询的特定行 UPDATE User SET name user WHERE id 3 我通过 sql alchemy 编写了这段代码 但它不起作用 session
  • 有没有办法在 MySQL 中有效地对 TRUNCATE 或 DROP TABLE 进行 GRANT ?

    我最近在 MySQL 5 5 x 中尝试过 GRANT SELECT INSERT UPDATE DELETE TRUNCATE ON crawler TO my user localhost WITH GRANT OPTION 这会导致错

随机推荐

  • 如何调试 Django PayPal IPN?

    我在用着这个 Django 应用程序 http github com johnboxall django paypal实施 PayPal IPN 我正在使用 PayPal 进行测试IPN模拟器 https developer paypal
  • 为什么要避免在 JavaScript 中增加(“++”)和减少(“--”)运算符?

    中的一个提示jslint tool http www jslint com lint html is and The 增量 和 递减 众所周知 操作符会导致不良代码 鼓励过度狡猾 他们 仅次于错误的架构 使病毒和其他 安全威胁 有一个加号
  • Flutter:我需要在StatelessWidget(TextSpan/recognizer)中调用GestureRecognizer.dispose吗?

    我正在阅读此文档页面 https docs flutter io flutter painting TextSpan recognizer html https docs flutter io flutter painting TextSp
  • 如何在 PyOpenGL 上创建一个可以对鼠标移动进行“透视旋转”的相机?

    我正在创建一个第一人称视角 RPG 我想在移动鼠标时在 PyOpenGL 中旋转相机 就像 Minecraft 等其他游戏一样 我可以使用什么函数来执行此操作以及如何执行此操作 我尝试使用gluLookAt 但我不明白它是如何工作的 尽管我
  • 矢量可绘制扭曲

    我有许多使用矢量绘图作为源的图像视图 对于大多数人来说 它是材质图标 但当我导入更复杂的矢量时 它在 Lollipop 设备上显示扭曲 但在 Jellybean 设备上显示得很好 这应该是系统 但显然有问题 Layout
  • 显示带有 html 内容的 smarty 变量

    我有一个 smarty 变量 其中包含 html 内容 如下所示 html strong Content strong br etc etc 我尝试以 html 格式显示它 当显示它像 html 仅显示纯文本 不带格式 我尝试像 html
  • 获取线程CPU使用率

    我有一组消耗 CPU 的执行 每个执行都在低优先级的线程中运行 这些线程将在一个进程 如 IIS 中运行 该进程有许多其他线程 我不想减慢它们的速度 我想计算所有其他线程的 cpu 使用率 如果它大于 50 那么我会暂停其中一个线程 如果它
  • 绘图大小 - 在 IPython Notebook 中使用 ggplot2(通过 rmagic)

    我已经开始将 R 的使用集成到 Notebook 中 从我的角度来看 这是为了两全其美 Python 中的数据管理 同时利用 R 的相对分析 图形优势 不幸的是 我沉迷于一个看似简单的元素 调整 ggplot2 图形的绘图大小 使用 pan
  • 对于不带任何参数的方法来说,显式生命周期有什么意义?

    第 295 页Rust 编程 http shop oreilly com product 0636920040385 do您可以找到以下内容 幸运的是 标准库包含了总体实现 impl lt a T U gt AsRef u for a T
  • 如何打乱键值对?

    我有一组值需要在需要时进行洗牌 我不知道哪种变量类型最适合我 数据实际上是基于key value结构的 比如 100 white 200 black 300 red 就这样 我想做的是根据我还不知道的某种算法来更改键值对 但是它们需要像这样
  • 正则表达式,将多个斜杠替换为一个

    这似乎是一个很容易解决的问题 但它并不像看起来那么容易 我在 PHP 中有这个字符串 postname 这是一个 URL 我不想连续出现多个斜杠 我从来不想完全删除斜线 它应该是这样的 postname 因为结构可能看起来不同 所以我认为我
  • Django ORM 在 Postgres DB 上留下空闲连接

    最近 我的 Django 应用程序由于数据库连接错误而频繁崩溃 OperationalError FATAL sorry too many clients already 当我进入应用程序数据库时 我看到确实有近 100 个打开的连接 所有
  • Powershell 在第一个特殊字符出现后删除文本

    这是我必须解析的值 8 2 4 151 65 HBAAPI I v1 3 3 29 02 我需要删除第一个实例之后的所有内容 包括第一个实例 所以我需要我的最终结果是8 2 4 151 65 s 8 2 4 151 65 HBAAPI I
  • 事件源 -> 服务器批量返回事件流而不是块返回

    我有一个 php 脚本 可以通过验证从 csv 文件导入大数据 为此 我需要向用户展示进度 我为此使用了事件流 当我回显某些内容时 我希望将其一一传输到客户端 而不是服务器批量发送整个输出 我已经尝试过 ob start ob implic
  • 底部图例,两行包裹在 r 中的 ggplot2 中

    library ggplot2 library scales library reshape2 Rdates lt c 2007 01 31 2007 02 28 2007 03 30 2007 04 30 2007 05 31 2007
  • 在 C# 中显示/隐藏主窗体

    我正在开发一个程序 单击 form1 上的按钮将打开 form2 然后我将隐藏 form1 直到 form2 关闭 我遇到的问题是 form2 关闭后无法显示 form1 有想法该怎么解决这个吗 try Form1 ActiveForm H
  • 如何解决 SQLite 数据库的错误路径?

    Overview 我添加了一些代码来将现有数据库复制到设备的本地文件夹 到目前为止第一个条件如果现有数据库尚不存在工作正常 Issue 但是 当执行将现有数据库从解决方案文件夹复制到设备文件夹的代码行时 我收到 SQLite 错误 该错误告
  • 如何使用 ASP Classic 获取当前虚拟目录的名称?

    如何使用 ASP Classic 获取当前虚拟目录的名称 在 ASP NET 中你可以使用Request ApplicationPath找到这个 例如 假设您有一个如下 URL http localhost virtual director
  • Google Tv 模拟器 AVD 系统映像

    您好 我正在尝试在我的 Windows 机器中设置 google tv 模拟器 我能够安装 api level 13 中提供的 google tv add on 但是当我尝试创建 AVD 时 它会抛出错误消息 请安装 intel x86 但
  • PostgreSQL 中表达式索引的实际限制

    我需要使用 HSTORE 类型和键索引来存储数据 CREATE INDEX ix product size ON product data gt Size INT CREATE INDEX ix product color ON produ