使用Wikipedia的转储我想为其类别构建层次结构.我已经下载了主转储(enwiki-latest-pages-articles)和类别SQL转储(enwiki-latest-category).但我找不到层次结构信息.
例如,SQL类别的转储包含每个类别的条目,但我找不到任何关于它们如何相互关联的信息.
另一个转储(latest-pages-articles)表示每个页面的父类别,但是以无序方式.它只是陈述了所有的父母.
我见过wikiprep的类别层次结构(http://www.cs.technion.ac.il/~gabr/resources/code/wikiprep/)......这个是如何构建的?Wikiprep列出了类别ID,而不是其名称.有没有办法获得每个ID的名称?
对不起 - 这有点含糊......
这里:(在 CTE 中找到无限递归循环)讨论了如何防止递归查询中出现无限循环。在“查询级别”上阻止了递归 - 至少在关于 Postgresql 的答案中是这样。
Postgresql (10) 有没有办法实现某种安全网来防止无限递归?这是一种可行的方法,statement_timeout还是有其他广泛接受的方法?
假设有如下模式:
CREATE TABLE node (
id SERIAL PRIMARY KEY,
name VARCHAR,
parentid INT REFERENCES node(id)
);
Run Code Online (Sandbox Code Playgroud)
此外,我们假设存在以下数据:
INSERT INTO node (name,parentid) VALUES
('A',NULL),
('B',1),
('C',1);
Run Code Online (Sandbox Code Playgroud)
有没有办法防止创建周期?例:
UPDATE node SET parentid = 2 WHERE id = 1;
Run Code Online (Sandbox Code Playgroud)
这将创造一个循环 1->2->1->...
我正在尝试编写一个查询,以生成给定根的树中所有节点的列表,以及路径(使用父级给他们孩子的名称)到达那里的路径.我工作的递归CTE是直接来自这里的文档的教科书CTE ,然而,事实证明在这种情况下使路径工作很困难.
在git模型之后,由于遍历树创建的路径,父母会将名称提供给子级.这意味着映射到git的树结构等子id.
我一直在网上寻找递归查询的解决方案,但它们似乎都包含使用父ID或物化路径的解决方案,这些都会破坏Rich Hickey的数据库作为价值谈话的结构共享概念.
想象一下,对象表很简单(为简单起见,我们假设整数id):
drop table if exists objects;
create table objects (
id INT,
data jsonb
);
-- A
-- / \
-- B C
-- / \ \
-- D E F
INSERT INTO objects (id, data) VALUES
(1, '{"content": "data for f"}'), -- F
(2, '{"content": "data for e"}'), -- E
(3, '{"content": "data for d"}'), -- D
(4, '{"nodes":{"f":{"id":1}}}'), -- C
(5, '{"nodes":{"d":{"id":2}, "e":{"id":3}}}'), -- B
(6, …Run Code Online (Sandbox Code Playgroud) 我想检测层次结构中的潜在循环。我有三张表,每张表都有一个父列和一个子列:

表1包含一些节点(在子列中)及其父节点(在父列中);Table2 包含 Table1 的所有父级(在 child 列中)及其父级(在 parent 列中),依此类推。
例如,如果 A 是 B 的孩子,B 是 C 的孩子,C 是 A 的孩子,那么我有一个循环。
是否可以使用 sql 命令检测周期?