Postgres 中的 LTREE 祖先查询未按预期工作
Posted
技术标签:
【中文标题】Postgres 中的 LTREE 祖先查询未按预期工作【英文标题】:LTREE ancestor query in Postgres not working as expected 【发布时间】:2020-03-18 18:25:23 【问题描述】:我有一个带有LTREE
列的表,数据如下所述。
ID Label Path
1. ABC. 1
2. DEF. 1.2
26. GHI. 1.2.26
假设我想找到标记为GHI
的节点的所有祖先。我正在使用的查询是
SELECT *
FROM
my_table as tbl
WHERE
tbl.path @> (
SELECT
path
FROM
my_table
WHERE
id=26
)
但是,这仅返回最后一行,而我想要所有三行。我做错了什么?
【问题讨论】:
【参考方案1】:我也是 Ltree 的新手,但我想我可以帮助你!
您的设置应与 Ltree 的 GIST 索引匹配。
请参阅官方文档的F.21.3
部分。 https://www.postgresql.org/docs/current/ltree.html
我相信没有它,运营商无法正确地弄清楚你想要什么。除此之外,查询似乎是正确的。我在本地环境中运行了相同的代码(尽管我使用的是最新版本的 Postgres)。
【讨论】:
【参考方案2】:要查找给定路径的所有后代,请使用
SELECT *
FROM my_table as tbl
WHERE path <@ '1.12.26'
欲了解更多信息https://www.postgresql.org/docs/current/ltree.html#LTREE-OP-TABLE
【讨论】:
以上是关于Postgres 中的 LTREE 祖先查询未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章
Postgres - 使用 ltree 计算级别(下)的孩子