Postgres - 将文本转换为 ltree

use*_*104 2 postgresql 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 数据类型的列?

谢谢!

use*_*104 6

弄清楚了:

ltree 不能很好地处理连字符和空格。一旦我连接了值并去除了连字符和空格,它就可以正常工作。

SELECT text2ltree(replace(concat_ws('.', Systemname::text, SubsystemName::text,ClassName::text,SubclassName::text),'-','_')) FROM codes;
Run Code Online (Sandbox Code Playgroud)