postgresql 在Apache agedb中删除标签名称会产生错误

jaql4c8m  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(9)|浏览(147)

我使用以下示例查询创建一个带标签的节点。

SELECT *
FROM cypher('vg-graph', $$
    CREATE (m:Movie {name: "Movie Name", uid: "12345678", body: "Description"})
    $$) as (n agtype);

以下查询应从节点中删除标签“Movie”。

SET search_path TO ag_catalog;
SELECT *
FROM cypher('vg-graph', $$
    MATCH (n {uid:"12345678"})
    REMOVE n:Movie
    RETURN n
    $$) as (n agtype);

但产生ERROR: syntax error at or near ":"
我如何以其他方式完成同样的任务?

tpxzln5u

tpxzln5u1#

目前,您不能从节点或边中删除标签名称,因为节点/边的ID是从最初分配给标签的序列ID中给出的,因此将实体存在与其标签耦合。
因此,这样的无效操作将导致错误。
但是,正在将实体ID与标签ID分离。这将允许更新/删除现有标签并向实体添加多个标签。

ffscu2ro

ffscu2ro2#

目前,无法从节点或边中删除标签名称,因为实体的ID与标签相关联。删除标签将使实体的存在无效,从而导致错误。

lpwwtiir

lpwwtiir3#

从节点或边删除标签将在Apache AGE中返回错误,因为每个节点或边都与创建时传递的标签链接。

mwkjh3gx

mwkjh3gx4#

密码查询没有内置的子句来删除标签名称,相反,您可以使用以下查询重命名它。

MATCH (a:Label1)
SET a:Label2
REMOVE a:Label1

你可以从这个Github issue link得到更多的信息,因为它已经在那里提出了。

q43xntqr

q43xntqr5#

标签修改和拥有多个标签的功能尚未添加到Apache AGE中。目前AGE根据创建时给出的标签为顶点分配id。由于id是不可变的,并且基本上与标签名称相关,因此删除标签、修改标签或拥有多个标签都是不受支持的任务。
然而,也有一些项目正在实施同样的措施。你可以在这里关注他们https://github.com/apache/age/issues/772

xmd2e60i

xmd2e60i6#

当前不支持从AGE中的节点删除标签。然而,正在努力实现该功能。同时,您可以通过创建一个具有相同属性但不同标签的新节点来完成任务。

CREATE (a :Label {val: 13})

CREATE (b)
SET b = properties(a)
DELETE a
RETURN b
                                 res                                  
----------------------------------------------------------------------
 {"id": 281474976710663, "label": "", "properties": {"v": 13}}::vertex
(1 row)
vc9ivgsu

vc9ivgsu7#

目前,正在开发直接使用REMOVE子句删除节点。目前,您可以像上面的答案那样使用SET子句使用替代解决方案。

v2g6jxz6

v2g6jxz68#

您看到“语法错误at or near“:””的错误是因为从现在起,不允许从节点中删除标签名称,因为节点与标签链接。

wgxvkvu9

wgxvkvu99#

在github上有一个问题,解释为什么你不能从节点中删除标签。它还没有添加到APACHE年龄。
Issue

相关问题