问题标签 [ltree]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3272 浏览

postgresql - Postgres - 将文本转换为 ltree

我是 postgres 的新手,我希望将 ltree 用于分层数据结构。

我在 varchar 列中有数据和 ltree 结构(即 domain.class.sublass),并且需要将 ltree 结构转换为具有正确 ltree 数据类型的另一列。

我已将 text2ltree 确定为可能管理此问题的最佳方法,但即使在阅读 ltree 文档和 ltree 函数信息之后也没有取得太大进展

我尝试了以下的许多组合

但收到以下错误:

我还尝试了以下方法并收到相同的错误:

如何将 ltree 层次结构从 varchar 列转换为具有 ltree 数据类型的列?

谢谢!

0 投票
1 回答
708 浏览

sql - Postgres ltree 模块,使用所有子相关路径更新节点的 id

我有以下简单的表格:

假设我将一些数据放到表格中:

使树看起来像:

现在我想将 id 重命名A为,比方说,X这样树

桌子看起来像

有人可以给一个提示 - 这可能与单个查询有关吗?

将不胜感激任何帮助,谢谢

0 投票
1 回答
248 浏览

sql - 使用 ltree、json 等 postgres 数据类型是否与 NoSQL 有关?

当我在 PostgreSQL 中设计一个表时,我计划使用 ltree 或 path 数据类型来实现我的功能。但是团队成员被告知,如果我们使用 ltree,那么我们的整个表设计将变成 NoSQL 格式。

这是真的吗?

如果是,那么我如何才能以 SQL 格式实现这种 ltree 设计?如果否,请您指导我理解这一点吗?

0 投票
1 回答
453 浏览

postgresql - PostgreSQL:快速检查一个 LTREE [] <@ LTREE[] 的所有元素

我有以下表格(简化):

对于每个项目,都有一个该项目所属的组列表。组由其完整路径表示。最多可能有 10M 个项目,每个项目属于大约 20 个组。

我需要设计以下查询。给定 (a) 一个“父”组和 (b) 最多 10 个附加组的列表,找到“父”组的直接后代,它们的子树中至少有一个项目包含在搜索条件。

例如,给定父组“NorthAmerica.USA”和其他组 [“CandyLovers.ChocolateLovers”、“Athletes.Footballers”],如果存在“George”这样的项目,则“NorthAmerica.USA.CA”是一个结果那是在像[“NorthAmerica.USA.CA.LosAngeles”,“Athletes.Footballers”,“CandyLovers.ChocolateLovers.ChocolateDonutLovers”这样的组中

我尝试了几种不同的方法来编写查询,但它们的扩展性很差:需要几分钟才能在搜索条件中返回一组 1M 项和 3-4 条路径的结果。例如:

结果如下:

我可以根据需要更改数据模型以优化此查询。我正在运行 PostgreSQL v9.5

非常感谢!对不起一个混乱的问题。

0 投票
1 回答
2879 浏览

javascript - Knex:嵌套原始查询,转义“?” 特点

我正在尝试将 Postgresql LTREE 与 knex 一起使用。
为了管理它,我必须使用 knex 的原始查询,因为显然 LTREE 在 knex 中不是本机的(它特定于 postgresql)

postgresql 和 LTREE 中的操作符是 character ?,在 knex.raw 中,?character 是用来绑定值的(众所周知),所以存在冲突。

再一次,这不是问题,因为我们可以使用它\\?来防止替换 knex?在原始查询中找到 a 的值。

我的问题是我需要对包含带有\\?字符的 knex.raw 的查询执行“SELECT EXISTS”,并且在 knex 中我使用 : knex.raw(myQuery).wrap('SELECT EXISTS(', ')')来执行我的 SELECT EXISTS。所以我嵌套了原始查询,一个用于选择存在,一个myQuery用于 postgresql ltree 条件。

在执行查询的过程中,第一个 knex.raw 将原来的\\?转换成 => ?是正常的,第二个 knex.raw 会做同样的工作,他会找到一个?并且想要绑定数据但我不给他数据所以 knex 抛出一个错误!

一个解决方案是用这个\\\\?代替\\?,第一个 knex.raw 将转换查询,\\?第二个 knex.raw 将转换最终查询,?这是我在 postgresql 中想要的(不尝试进行任何绑定)

这很棒!但是myQuery是由一个通用函数生成的,该函数在带有 SELECT EXISTS 的上下文中调用,但也在没有 SELECT EXISTS 的上下文中调用,如果我\\\\?只使用一个 knex.raw(没有 SELECT EXISTS 的上下文),它这次也会由 postgresql 引发错误(因为 postgresql 无法识别\\?)。

是否可以通过所有 knex.raw 转义 `?` 字符?

一个糟糕的解决方案(但一个可行的解决方案)是为生成查询的函数设置一个参数,以精确判断它是否是嵌套原始查询的上下文。

编辑 :

这是我们可以拥有的代码的简单示例:

这失败了,因为第一个 knex.raw 删除了第一个 double并且 .wrap\\\\?第二个 knex.raw 将等待绑定

0 投票
1 回答
360 浏览

php - 未定义函数:7 错误:运算符不存在:public.ltree public.< public.ltree[]

当我使用ltreefrom时,我在 PHP 中遇到问题PostgreSQL。我在 SQL 中执行此操作:

我在 phpmyadmin 中运行查询,它工作正常,但是当我复制和粘贴时,在 PHP 中它不起作用。我做了一些研究,发现在 PHP 中我需要"<@" and "@>" for "OPERATOR(public.<)" and "OPERATOR(public.>)"分别替换。

我在 php 中使用简单的 ltree 查询对其进行测试,例如:

它工作正常,但问题是在我想要执行的实际查询中,我在左侧有ltreean 在另一侧 an ltree[],当我使用“OPERATOR(public.<)”时,它给了我这个错误:

未定义函数:7 错误:运算符不存在:public.ltree public.<public.ltree[]

这就是我正在尝试做的...

任何建议.... tks。对不起,如果我的英语不好。

0 投票
2 回答
803 浏览

java - 使用 ltree 本机命名查询休眠

我正在尝试运行包含ltree函数和运算符的 PostgreSQL 本机查询。

这是定义:

像这样调用:

结果是错误ERROR: operator does not exist: ltree ~ character varying

当我尝试直接针对数据库运行查询时,它运行正常:

从错误中可以明显看出 hibernate(?) 不喜欢 th 运算符右侧的类型~,但是正如您所看到的,我在后面的查询中使用了该字符串并且工作正常。

那么我需要对休眠查询做什么才能成功运行查询呢?

编辑:当我替换我时okm_path ~ :pathLike"where okm_path ~ '*._root_.*' "我会得到:

org.postgresql.util.PSQLException: ERROR: syntax error at position 0错误

休眠:5.2.9.Final

PostgreSQL:9.2.23

0 投票
1 回答
621 浏览

postgresql - 使用主键和外键构建 ltree

我对 postgres 很陌生,尤其是对 ltree 很陌生。在网上搜索 ltree 给我带来了通过链接字符构建树的示例。但我想使用主键和外键。

因此我建立了下表:

我想要 1.3.5 而不是 ABG。在线示例中的根添加如下:

而不是 AI 想要拥有主键(当时我不知道)。有没有办法做到这一点?

添加孩子时,我遇到了同样的问题:

我知道父母的 id,但不知道我想附加的孩子的 id。

有没有办法做到这一点,或者我完全偏离了轨道?

非常感谢!

0 投票
1 回答
549 浏览

ruby-on-rails - 在层次结构中获取孩子、孙子

我正在使用名为 ltree_hierarchy( https://github.com/cfabianski/ltree_hierarchy ) 的带有 rails 和 gem 的分层数据模型。因为每个节点都会有一个父 ID(它是当前节点的直接父节点)。

层次结构是使用 postgres 的 ltree 扩展来实现的。并且在 gem ltree_hierarchy 中,将保存父级和路径。

我可以使用节点的 parent_id 获取兄弟、父和子。就像是,

是否有任何建议可以在单个查询中获取节点的子节点和孙节点?

0 投票
0 回答
298 浏览

json - PostgreSQL Ltree 转 JSON

我一直在试验 PostgreSQL 的 Ltree 扩展。我想用它来存储分层的待办事项列表数据(即带有子列表的列表)。它工作得很好,但是在花费了相当长的时间之后,我仍然找不到从数据库中以分层 JSON 格式检索信息的好方法。这是我想要实现的示例:

从这里,到下面的 json 输出:

有没有什么巧妙的方法可以做到这一点,也许是 Python 服务器端?真的在寻找想法!