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

sql - Postgresql ltree 查询以查找具有最多孩子的父母;不包括根

我正在使用 PostgreSQL,并且有一个表,其路径列的类型为ltree.

我要解决的问题是:给定整个树结构,除根外,哪个父级拥有最多的子级。

示例数据如下所示:

所以,在这个例子中,id 为1824的行(根)有 11 个孩子,id 为1928的行有 11 个深度为 2 的孩子;这是我追求的那一行。

我是 ltree 和 sql 的新手。

(这是一个修订后的问题,在Ltree find parent with most children postgresql关闭后添加了示例数据)。

0 投票
1 回答
804 浏览

postgresql - 在 plpgsql 函数中使用 ltree 查询作为 PostgreSQL 中的参数

我想在 plpgsql 函数中使用 ltree 参数执行查询......但我不明白如何在这个函数中使用引号......

这个怎么做 ???

在 psql 中执行此代码后,我收到错误:

最终工作版本:

0 投票
2 回答
4003 浏览

java - JDBC 中的 Java 类型到 Postgres ltree

有谁知道什么 Java 类型映射到 Postgres ltree 类型?

我创建一个像这样的表:

几个插入:

那里没有什么奇怪的。现在我想使用 PreparedStatment 批量处理:

}

这会产生以下错误:

显然我错过了一些东西。为什么我可以使用纯 SQL 而不是 JDBC 插入“某些东西”?

0 投票
2 回答
2176 浏览

sql - Postgres - 使用 ltree 计算级别(下)的孩子

我有一张桌子

几个插入

现在我只想计算ROOT下的节点。我想我应该这样做:

我希望 3 但我得到 0。有什么想法吗?

0 投票
2 回答
1244 浏览

postgresql - Postgres ltree 多路径

好的,所以我在名为 path 的列上有一个带有 ltree 的表。我想选择多个路径,但我不想有大量的 OR 语句。这是可能的还是最好的方法?

路径:

  • 'schools.myschool.*'
  • '公司.about.*'
  • '测试.信息.内容。*'

询问:

SELECT content, path FROM threads WHERE path ~ 'schools.myschool.*' OR path ~ 'companies.about.*' OR path ~ 'testing.information.content.*

0 投票
1 回答
1163 浏览

hibernate - 休眠查询中的 Postgres ltree

我使用 Play Framework 1.2.5.3 和 PostgreSQL 9.x。

我有类WorkArea作为带有字段的数据库模型

在 postgre 中,它是一个带有字段树的数据库表工作(类型ltree

我想将 Hibernate 查询与 postgres ltree 操作一起使用。例如:

或者

我怎样才能做到这一点?

0 投票
2 回答
2410 浏览

sql - Postgres ltree查询,计算每一级树上的连接项

我有 3 张桌子:

位置,位置描述,其中包含每个位置的语言等,1 代表商店。

LOCATION DESCRIPTION 表还在 ltree 路径字段中保存层次结构,如下所示:

STORE 表包含一个外键 location_id 来引用它所属的位置。

所以我想要做的是获取每个节点的存储数量的树,按它排序。

例如:

到目前为止,我所做的得到了树和计数(商店),但仅适用于地区而不是地区,并且没有想要的顺序。

==================================================== ================================= EDIT1:

更新了我的查询,我得到了父母和孩子的总记录(我相信有一种更有效的方法)。我仍然错过了订单:

0 投票
1 回答
4972 浏览

postgresql - 从 GUI 获得性能和移动节点的最佳 PostgreSQL 层次树?

由于我使用的是 PostgreSQL,因此有一个名为ltree的模块,它至少满足了我的一个需求,即性能(我不知道可伸缩性?有人说物化路径树不能很好地伸缩......)。

由于我正在开发的应用程序是一个完全围绕一棵大树、节点、子树等构建的 CMS,因此在对这些节点进行排队时,性能是绝对必要的,但由于它是一个分层的大树(随着它的增长),你正在处理和操作GUI(CRUD),我还想让用户在正确更新数据库中的树(子记录)的同时拖放以重新排序节点、子树等。

据我了解,在树中移动和重新排序节点/子树并不是 ltree/物化路径树的真正用途,所以我希望你能帮助我指出正确的树结构模型是最好的为了性能和移动子树和节点,或者……如果 ltree 确实不是过去的遗留物,但仍然值得使用,你如何使用 PostgreSQL 的 ltree 模块来实现这一点?在这种情况下为什么/为什么不使用 ltree?

要求:

  1. 查询性能当然是我的首要任务(所有节点、子树、叶子)。
  2. 树应该支持深层嵌套和排序
  3. 当然,树应该支持变大和扩展
  4. 如果不存在 1 个“万事通”树实现,或者太复杂而不值得,我可以在从 GUI 重新排序时忍受一点等待时间。

我也在考虑闭包表,也就是桥表(很多!),嵌套间隔(不确定我是否完全理解如何实现它,目前没有好的例子或要点?)或 B-tree 模型。我只是不太确定,这些将如何满足我的上述 4 个要求。以嵌套间隔重新组织子树和节点似乎很简单,性能似乎也不错。很难选择合适的。

因为我肯定需要性能(查询/读取性能)、可伸缩性、排序,所以我有点认为带有排序顺序的闭包表可能非常接近,但我无法想象闭包表和磁盘空间开销会变成我的树有多大节点变大。闭包表和可扩展性,我不太确定。我担心这个问题有错吗?这项任务的最佳解决方案可能是什么?

0 投票
1 回答
2073 浏览

postgresql - PostgreSQL ltree- vs 树模块 vs 整数/字符串数组或字符串分隔路径

您可能知道 PostgreSQL 有一个名为 ltree 的模块。此外,您还可以将 Array 类型用于整数(*1,请参见下面的评论),在此测试中,与 ltree 相比,它的递归查询实际上执行得稍慢 - 除了字符串索引(*2,请参阅下面的评论)。

不过,我不太确定这些测试结果的可信度。

我最大的问题实际上是关于相对未知且几乎没有文档的树模块。此处描述(也可以在其中找到文档!!)为:

对分层数据类型(某种词典树)的支持,应该转到 contrib/tree,由于缺乏适当的 文档而待定。

阅读完文档后,我有点困惑是否应该建立我的大型应用程序(一个 CMS,所有内容都将存储在分层树结构中 - 不仅是内容,还有文件等,所以你可以看到这会迅速扩大)围绕 ltree,普通的物化路径(路径枚举),以分隔的字符串或整数数组作为路径 - 或者如果理论上相对未知的“树”模块应该是两者的更快执行、更可扩展和更好的解决方案.

我已经分析了不同的树结构模型,并且由于节点和子树的查询性能、可伸缩性和重新排序是我的主要要求,我已经能够排除邻接列表(递归 CTE 无法解决性能问题,因为树的规模很大),嵌套集/间隔(在某些查询中速度不够快,考虑到它在操作树时的缺点),闭包表(在复杂树中非常大 - 对我这样的大型项目没有用处)等并决定使用物化路径,对于读取操作来说非常快,并且可以轻松地在层次结构中移动子树和节点。所以问题只是关于物化路径的最佳建议实现。

我特别好奇听到您在 PostgreSQL 中使用“树”的理论或经验。

0 投票
2 回答
3942 浏览

json - PostgreSQL 物化路径/Ltree 到分层 JSON 对象

我有这个使用 PostgreSQL 的 ltree 模块构建的物化路径树结构。

  • id1
  • id1.id2
  • id1.id2.id3
  • id1.id2.id5
  • id1.id2.id3.id4 ...等

我当然可以轻松地使用 ltree 从整个树或特定路径/子路径中获取所有节点,但是当我这样做时,自然得到的是很多行(这等于结束.. Golang/您使用的任何编程语言)

我所追求的是获取树 - 理想情况下从某个开始和结束路径/点 - 作为分层 JSON 树对象等

我从线性(非分层)行/数组/切片结果集中知道,我当然可以在 Golang 中爆炸路径并在那里创建必要的业务逻辑来创建这个 json,但是如果有一个方便的,它肯定会好得多直接用 PostgreSQL 实现这一点的方法。

那么,您将如何在 PostgreSQL 中将 ltree 树结构输出到 json - 可能是从开始到结束的路径?

如果你不知道 ltree,我想这个问题可以更概括为“Materalized path tree to hierachical json”

此外,我正在考虑在除了 ltree 路径之外的所有节点上添加 parent_id 的想法,因为至少那时我将能够使用递归调用使用该 id 来获取我猜想的 json ......我也有考虑过在该 parent_id 上放置一个触发器,以根据父 ID 发生更改的时间来管理路径(保持更新) - 我知道这是另一个问题,但也许你也可以告诉我你的意见,关于这个?

我希望一些天才可以帮助我解决这个问题。:)

为了您的方便,这里有一个示例创建脚本,您可以使用它来节省时间: