问题标签 [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 回答
322 浏览

postgresql - 如何从格式为 nnnn 的 ltree 中选择并在每个级别排序为数字?

ltree 列的默认排序为文本。示例:我的表 id、parentid 和 wbs 中有 3 列。ltree 列 - wbs 已1.1.12, 1.1.1, 1.1.2存储在不同的行中。按 wbs 列排序的选择查询返回1.1.1, 1.1.12, 1.1.2.

我需要它返回1.1.1, 1.1.2, 1.1.12

0 投票
1 回答
98 浏览

postgresql - ltree 连接在使用字段时失败,但在使用文字时成功

像这样一个非常简单的表

我正在尝试运行以下查询:

但它不起作用,我明白了syntax error at position 8

如果我使用文字文本,它会起作用

我怀疑我需要将 obj 转换为某些东西,但我无法弄清楚它需要是什么。

我试过了varchar,,,textltree

编辑:我在 postgresql 11.1

0 投票
1 回答
1324 浏览

sql - Postgres LTREE 通过分组父母和孩子来显示

我有一个示例 Ltree 结构,而不是将其作为 JSON 结构返回。我试过搜索堆栈溢出,但结果给出了错误的响应。

我有这些数据

这就是我想用我的查询收集的

我试过recursive with ..了,但它一直在循环,没有返回正确的值。

0 投票
1 回答
522 浏览

html - Postgresql Ltree 查询以获取嵌套 json/array 的评论线程并从中构建 HTML

我正在构建一个类似于 Reddit 的评论部分。所以可以有根评论,用户可以回复根评论,然后用户可以回复子评论等等。基本上是嵌套的评论线程。

我使用了本教程并且有点让它工作:

http://www.postgresonline.com/article_pfriendly/173.html

这是我构建表并插入数据并查询它:

这是输出:

这是将评论线程作为行获取的查询和输出:

这是一个查询和输出,用于获取最底部的叶子评论的路径:

尽管如此,我还是很难思考和弄清楚如何将此输出转换为实际的 HTML 以将注释显示为嵌套线程。

我已经使用 nodejs 和 EJS 视图的组合构建了 HTML,我可以在其中使用嵌套 div 显示嵌套注释。

我也熟悉使用“pg-promise”nodejs 模块来查询数据库。我理解这部分。

但我无法弄清楚如何从数据库中获取输出并将其转换为 HTML。就像现在一样,输出只是告诉我有一个嵌套线程,例如GreatGreatGrandma->GreatGrandma->Grandma->Ma->Daughter->GrandDaughter. 但由于这不是 JSON 或数组,我不确定如何遍历它来构建我的 HTML?

我在想如果有一些 SQL 给我一个嵌套的 JSON,那么我可以构建 HTML。但是不知道怎么获取?

0 投票
1 回答
151 浏览

sql - 为什么在 Postgres 中查询 LTREE 时字符串连接不起作用?

以下 SQL 完美运行:

但是以下给了我一个错误:

错误是:

除了串联之外,我不确定两者之间的区别。

0 投票
1 回答
211 浏览

javascript - 如何将我的 ltree 点符号层次结构改进为嵌套的 JSON 脚本?

我从数据库中接收到一组行,其中一parentPath列格式化为表示层次结构的 ltree 字符串(点表示法)。我想从我的 nodejs 服务器返回具有嵌套类别的相同数据。

我拥有的数据:

我想要的是 :

我成功地使用以下代码获得了我想要的东西:

但是这个脚本有几个弱点:

  • 它不适用于 4 层或更多层的嵌套
  • 如果按此顺序呈现行(在 2 级嵌套之前的 3 级嵌套),它将不起作用:

这里有天才知道我们如何进行吗?

0 投票
1 回答
87 浏览

java - 休眠:在保存无效的 ltree 列时捕获异常

我有一个具有类型列的实体,ltree并且这种类型的字符接受范围相当窄,因此会发生异常。现在我需要能够抓住他们。这就是我保存实体的方式:

当它抛出异常时,它看起来像这样:

我的问题是如何抓住这个?它永远不会落入 catch 块..

休眠:5.3.9.Final spring-boot-starter-parent:2.1.4.RELEASE

0 投票
1 回答
2143 浏览

postgresql - Postgres 物化路径 - 使用 ltree 有什么好处?

Materialized Path 是一种在 SQL 中表示层次结构的方法。每个节点都包含路径本身及其所有祖先 ( grandparent/parent/self)。

django-treebeardMP(文档)的实现:

  1. 路径的每一步都是固定长度,以实现一致的性能。

  2. 每个节点都包含depthnumchild字段(以最低的写入成本快速读取)。

  3. 路径字段被索引(使用标准的 b 树索引):

    物化路径方法在数据库中大量使用 LIKE,其中包含 WHERE path LIKE '002003%' 之类的子句。如果你认为 LIKE 太慢了,你是对的,但是这种情况下 path 字段在数据库中是索引的,所有不以 % 字符开头的 LIKE 子句都会使用索引。这就是使物化路径方法如此快速的原因。

实施get_ancestors链接):

将节点与包含当前路径子集的路径匹配(steplen是步长的固定长度)。

实施get_descendants链接):

匹配深度大于自身的节点和以当前路径开始的路径。

这种方法的潜在缺点:

  1. 深度嵌套的层次结构会导致路径过长,这会损害读取性能。
  2. 移动一个节点需要更新所有后代的路径。

Postgres 包含ltree提供自定义GiST索引 ( docs ) 的扩展。

我不清楚哪些好处ltree提供了 overdjango-treebeard的实施。本文认为只能ltree回答这个get_ancestors问题,但如前所述,找出节点的祖先(或后代)是微不足道的。

[顺便说一句,如果找到这个 Djangoltree库 - https://github.com/mariocesar/django-ltree]

两种方法都使用索引(django-treebeard使用 b-tree,ltree使用自定义 GiST)。我有兴趣了解ltreeGiST 的实现,以及为什么对于这个特定用例(物化路径),它可能是比标准 b 树更有效的索引。

附加链接

在关系数据库中存储分层数据的选项有哪些?

https://news.ycombinator.com/item?id=709970

0 投票
0 回答
83 浏览

postgresql - 在 PostgreSQL 中使用 ltree 获取两条路径之间的节点

我正在使用带有ltree扩展的 PostgreSQL。

考虑我的数据库中有以下结构:

节点图

给定C节点 (path: A.C) 作为开始节点,I节点 (path: A.C.F.G.I) 作为结束节点,我想选择它们之间的所有节点,包括边界。因此,结果应包括:CFGI,但不包括其他节点。

ltree有没有可以用来编写查询的内置函数的组合?

0 投票
1 回答
819 浏览

spring - 带有 Postgres ltree 扩展的 Spring JPA

我正在尝试使 ltree 索引与 Spring JPA 一起工作。我有一个包含这样路径的实体

LTreeType 类是从这里复制粘贴在 hibernate 中映射 PostgreSQL LTREE 列时出现错误

索引在数据库中正确完成,添加了 ltree 扩展。仍然当我运行以下查询时

我明白了 org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111

当我将查询更改为

我犯了同样的错误。

为了

我明白了

对于:

我得到:

如您所见,我几乎尝试了所有组合,但仍然没有结果。我还尝试了与实体管理器上的本机查询相同的查询,但没有区别。我在这里想念什么?