标签: ltree

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

使用 django 1.8 + Postgres 9+,我有带有自定义 PG 数据类型(如 ltree)的模型。从零创建数据库失败,因为

CREATE EXTENSION ltree;
Run Code Online (Sandbox Code Playgroud)

不被执行。我尝试进行空迁移,但在模型创建运行。是否存在在模型创建之前运行 sql 的方法?

django ltree postgresql-9.3 django-migrations

3
推荐指数
1
解决办法
2977
查看次数

如何使用 PostgreSQL 按路径过滤

我的数据库中有一些资源继承到它们的子资源。当我查询资源时,我还需要能够获取继承的资源。我有一个名为path我计划使用的字段。始终path包含与我们当前正在处理的资源相关的所有资源的完整路径。

例子:

+-----------------------------------------+
| id | res_id    | path                   |
|-----------------------------------------|
| 1  | res_1     | res_1                  |
| 2  | res_1.1   | res_1.res_1.1          |
| 3  | res_1.2   | res_1.res_1.2          |
| 4  | res_1.1.1 | res_1.res_1.1.res_1.1.1|
+-----------------------------------------+
Run Code Online (Sandbox Code Playgroud)

如果我查询res_1.1,我还必须获取 ,res_1因为它是 的父级res_1.1。如果我得到res_1.1.1,我还必须得到第 1 行和第 2 行,因为它们包含在 的路径中res_1.1.1。希望得到一些关于如何使用 Postgres 执行此操作的建议。如果这是重要信息,我也用来sqlmodel编写查询。

编辑。对于含糊的介绍,我深表歉意,该参数path已经是sqlalchemy Ltree字段。我希望这能让事情变得更简单一些?

python sql postgresql ltree sqlmodel

3
推荐指数
1
解决办法
466
查看次数

如何将 Postgres ltree 加入标签表?

使用 Postgres ltree 常用来存储产品类别的推荐方法是什么?

例如,我的列可以包含一个 ltree 路径,例如"1.2.3"where 123是可以显示给用户的类别标签表的外键:

categories

id | name
---+-----------
 1 | Hardware
---+-----------
 2 | Computers
---+-----------
 3 | Video Cards
---+-----------
Run Code Online (Sandbox Code Playgroud)

现在,对于给定的产品,我想选择它的类别并将其具体化,例如"Hardware > Computers > Video Cards".

postgresql ltree

2
推荐指数
1
解决办法
1280
查看次数

PostgreSQL可以使用HASH排除约束以获得唯一性吗?

由于哈希值比冗长的文本小,在我看来,为了确保列的唯一性,它们可能比b树更受欢迎。

仅出于确保唯一性的目的,是否有任何理由在PG 10中不符合以下条件?

CREATE TABLE test (
  path ltree,
  EXCLUDE USING HASH ((path::text) WITH =)
);
Run Code Online (Sandbox Code Playgroud)

我认为哈希冲突是在内部处理的。否则将毫无用处。

我将使用GiST索引来增强查询。

postgresql indexing unique-index ltree postgresql-10

2
推荐指数
1
解决办法
323
查看次数

Postgres - 将文本转换为 ltree

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

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

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

我尝试了以下多种组合

 alter table codes
alter column joinedclassname type ltree using text2ltree(joinedclassname);
Run Code Online (Sandbox Code Playgroud)

但收到以下错误:

ERROR:  syntax error at position 26
********** Error **********

ERROR: syntax error at position 26
SQL state: 42601
Run Code Online (Sandbox Code Playgroud)

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

alter table codes
alter column joinedclassname type ltree using joinedclassname::ltree;
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

postgresql ltree

2
推荐指数
1
解决办法
2763
查看次数

PostgreSQL ltree - 如何从使用 ltree 构造的二叉树中获取最左/最右路径和子级?

我正在使用 PostgreSQL 和 ltree 构建大量二叉树数据。对于特定逻辑,我必须获取给定节点的最左/最右路径。

我的二叉树示例

在此输入图像描述

我的表格内容示例

在此输入图像描述

示例输入和预期输出:

输入 - 节点 1,最左边的子节点

输出 - 1, 1.L2, 1.L2.L3,...(仅最左边的子节点)

我想在 postgresql、ltree 查询中得到这个结果。

请帮我解决这个问题。

任何更好的 postgre 表设计也可以建议,但必须在处理大量数据时获得良好的性能。

sql postgresql hierarchical-data ltree

2
推荐指数
1
解决办法
4002
查看次数

Postgresql ltree查询找到大多数孩子的父母; 排除根

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

我试图解决的问题是:给定整个树结构,除了根之外,哪个父项具有最多的子项.

示例数据如下所示:

path column = ; has a depth of 0 and has 11 children its id is 1824 # dont want this one because its the root
path column = ; has a depth of 0 and has 1 children its id is 1823
path column = 1823; has a depth of 1 and has 1 children its id is 1825
path column = 1823.1825; has a depth of 2 and has 1 children its id …
Run Code Online (Sandbox Code Playgroud)

sql postgresql tree ltree

1
推荐指数
1
解决办法
2239
查看次数

在休眠状态下映射PostgreSQL LTREE列时出现错误

我试图按如下方式映射休眠状态下的postgresql ltree列:

在实体中:

private String path;

@Column(name="org_path", columnDefinition="ltree")
public String getPath() {
   return path;
Run Code Online (Sandbox Code Playgroud)

表结构:

CREATE TABLE relationship (
    relationship_id int4 NOT NULL,
    parent_organization_id uuid NOT NULL,
    child_organization_id uuid NOT NULL,
    org_path ltree NOT NULL,
    CONSTRAINT relationship_pk PRIMARY KEY (relationship_id),
    CONSTRAINT organization_fk3 FOREIGN KEY (parent_organization_id) REFERENCES organization(organization_id) ON DELETE RESTRICT ON UPDATE RESTRICT,
    CONSTRAINT organization_fk4 FOREIGN KEY (child_organization_id) REFERENCES  organization(organization_id) ON DELETE RESTRICT ON UPDATE RESTRICT
)
Run Code Online (Sandbox Code Playgroud)

出现以下错误:

wrong column type encountered in column [org_path] in table [relationship]; found [“schemaName"."ltree" …
Run Code Online (Sandbox Code Playgroud)

java postgresql entity hibernate ltree

1
推荐指数
1
解决办法
964
查看次数

从 Postgres ltree 路径获取直接子级

ltree假设路径始终从根开始,如何从 Postgres 中的类型中的给定路径获取直接子级?例如,如果给定的路径是A.B并且列名是ltreepath那么我能想到的最好的方法是:

SELECT distinct(subpath(path, (SELECT distinct(nlevel('A.B'))), 1)) FROM test_ltree WHERE path ~ 'A.B.*{1,}';';

编辑:我只想返回孩子,而路径中没有父母。

postgresql ltree

1
推荐指数
1
解决办法
2260
查看次数

Postgres LTREE 通过对父母和孩子进行分组显示

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

create table node
(
    id   integer not null,
    name varchar(255),
    path ltree   not null
);
Run Code Online (Sandbox Code Playgroud)

我有这些数据

INSERT INTO node (id,name,path) VALUES (1,'Residential','1');
INSERT INTO node (id,name,path) VALUES (2,'Commercial','2');
INSERT INTO node (id,name,path) VALUES (3,'Industrial','3');
INSERT INTO node (id,name,path) VALUES (4,'Res type 1','1.4');
INSERT INTO node (id,name,path) VALUES (5,'Comm type 1','2.5');
INSERT INTO node (id,name,path) VALUES (6,'Industrial 1','3.6');
INSERT INTO node (id,name,path) VALUES (7,'Residential 2','1.4.7');
INSERT INTO node (id,name,path) VALUES (8,'Commercial 2','2.5.8');
INSERT INTO node (id,name,path) …
Run Code Online (Sandbox Code Playgroud)

sql postgresql psql ltree

0
推荐指数
1
解决办法
2325
查看次数