使用 django 1.8 + Postgres 9+,我有带有自定义 PG 数据类型(如 ltree)的模型。从零创建数据库失败,因为
CREATE EXTENSION ltree;
Run Code Online (Sandbox Code Playgroud)
不被执行。我尝试进行空迁移,但在模型创建后运行。是否存在在模型创建之前运行 sql 的方法?
我的数据库中有一些资源继承到它们的子资源。当我查询资源时,我还需要能够获取继承的资源。我有一个名为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字段。我希望这能让事情变得更简单一些?
使用 Postgres ltree 常用来存储产品类别的推荐方法是什么?
例如,我的列可以包含一个 ltree 路径,例如"1.2.3"where 1、2和3是可以显示给用户的类别标签表的外键:
categories
id | name
---+-----------
1 | Hardware
---+-----------
2 | Computers
---+-----------
3 | Video Cards
---+-----------
Run Code Online (Sandbox Code Playgroud)
现在,对于给定的产品,我想选择它的类别并将其具体化,例如"Hardware > Computers > Video Cards".
由于哈希值比冗长的文本小,在我看来,为了确保列的唯一性,它们可能比b树更受欢迎。
仅出于确保唯一性的目的,是否有任何理由在PG 10中不符合以下条件?
CREATE TABLE test (
path ltree,
EXCLUDE USING HASH ((path::text) WITH =)
);
Run Code Online (Sandbox Code Playgroud)
我认为哈希冲突是在内部处理的。否则将毫无用处。
我将使用GiST索引来增强查询。
我是 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)
但收到以下错误:
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;
如何将 ltree 层次结构从 varchar 列转换为具有 ltree 数据类型的列?
谢谢!
我正在使用 PostgreSQL 和 ltree 构建大量二叉树数据。对于特定逻辑,我必须获取给定节点的最左/最右路径。
我的二叉树示例
我的表格内容示例
示例输入和预期输出:
输入 - 节点 1,最左边的子节点
输出 - 1, 1.L2, 1.L2.L3,...(仅最左边的子节点)
我想在 postgresql、ltree 查询中得到这个结果。
请帮我解决这个问题。
任何更好的 postgre 表设计也可以建议,但必须在处理大量数据时获得良好的性能。
我正在使用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) 我试图按如下方式映射休眠状态下的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) ltree假设路径始终从根开始,如何从 Postgres 中的类型中的给定路径获取直接子级?例如,如果给定的路径是A.B并且列名是ltree,path那么我能想到的最好的方法是:
SELECT distinct(subpath(path, (SELECT distinct(nlevel('A.B'))), 1)) FROM test_ltree WHERE path ~ 'A.B.*{1,}';';
编辑:我只想返回孩子,而路径中没有父母。
我有一个示例 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)