Neo4j删除约束(如果存在)

l3zydbqr  于 2023-01-05  发布在  其他
关注(0)|答案(2)|浏览(321)

有没有什么方法可以只删除通过查询存在的约束?我使用的是javascript的螺栓驱动程序。
我最初以为我只会捕捉到错误,但我得到的错误不够清楚:

{"code":"Neo.DatabaseError.Schema.ConstraintDropFailed"}
{ Error: An unexpected failure occurred, see details in the database logs, reference number .... }

在日志中,我确实得到:

Unable to drop CONSTRAINT ... No such constraint CONSTRAINT

但我不想以编程方式打开日志并解析它。
有没有办法只在约束存在时才删除它?我还没有找到任何有用的东西。
我能想到的唯一方法是先尝试创建两个与约束冲突的节点(这会返回更明显的错误),但我更喜欢更干净的方法。

g2ieeal7

g2ieeal71#

如果您知道所需的所有索引和约束,则可以使用apoc过程apoc.schema.assert使它们存在,并删除所有其他现有索引和约束。
此文档部分提供了一个如何使用此过程的示例。以下是显示调用此过程及其结果的代码片段:

Let’s create some indexes and constraints, note that other indexes and constraints will be dropped by this.

CALL apoc.schema.assert(
  {Track:['title','length']},
  {Artist:['name'],Track:['id'],Genre:['name']});

╒════════════╤═══════╤══════╤═══════╕
│label       │key    │unique│action │
╞════════════╪═══════╪══════╪═══════╡
│Track       │title  │false │CREATED│
├────────────┼───────┼──────┼───────┤
│Track       │length │false │CREATED│
├────────────┼───────┼──────┼───────┤
│Artist      │name   │true  │CREATED│
├────────────┼───────┼──────┼───────┤
│Genre       │name   │true  │CREATED│
├────────────┼───────┼──────┼───────┤
│Track       │id     │true  │CREATED│
└────────────┴───────┴──────┴───────┘
jecbmhm3

jecbmhm32#

您可以在语句末尾运行add IF EXISTS

DROP CONSTRAINT SOME_CONSTRAIN IF EXISTS

正式文件:https://neo4j.com/docs/cypher-manual/5/constraints/examples/#administration-constraints-drop-a-non-existing-constraint

相关问题