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

标签 sql postgresql ltree

我有以下简单表格:

create table nodes(
    id text primary key,
    path ltree
);

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

insert into nodes (id, path) values ('A', 'A');
insert into nodes (id, path) values ('B', 'A.B');
insert into nodes (id, path) values ('C', 'A.C');

所以树看起来像:

       A

  /          \

B             C

现在我想将 A 的 id 重命名为 X 以便树

       X

  /          \

B             C

表格看起来像

insert into nodes (id, path) values ('X', 'X');
insert into nodes (id, path) values ('B', 'X.B');
insert into nodes (id, path) values ('C', 'X.C');

有人可以给个提示吗 - 是否可以用单个查询来做?

非常感谢任何帮助,谢谢

最佳答案

使用来自 http://patshaughnessy.net/2017/12/14/manipulating-trees-using-sql-and-the-postgres-ltree-extension 的方法,特别是“移动分支”部分:

UPDATE nodes SET id = 'X' WHERE id = 'A';
UPDATE nodes SET path = 'X' || subpath(path, 1) WHERE path <@ 'A';

关于sql - Postgres ltree 模块,使用所有子相关路径更新节点的 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48514107/

相关文章:

mysql - 如何将数据库中的所有表转换为一种排序规则?

bash - 在 BASH 中使用与 PostgreSQL 的开放数据库连接?

ruby-on-rails - ActiveRecords 未调用正确的 SQL 语句

postgresql - 从 pg_dump 文件恢复数据库会创建奇怪的表

django - 在 Django 中创建模型之前如何在 postgresql 中安装扩展?

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

c# - 在打开表单之前设置所有标签字体

sql - 如何在递归查询中获取项目的级别和计数

java - 在 hibernate 中映射 PostgreSQL LTREE 列时出错

SQL Server Reporting Services 将报表布局更改为纵向