Neo4j отбрасывает ограничение, если оно существует

Есть ли способ отбросить ограничение, только если оно существует через запрос? Я использую драйвер болта для 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

Но я не хочу открывать журнал программно и анализировать его.

Есть ли способ отбросить ограничение, только если оно существует? Я не нашел ничего полезного.

Единственное, о чем я могу думать, - это сначала попытаться создать два узла, которые будут конфликтовать с ограничением (которое возвращает более явную ошибку), но я бы предпочел что-то более чистое.

2 ответа

Можете добавитьIF EXISTSдо конца заявления:

      DROP CONSTRAINT SOME_CONSTRAIN IF EXISTS

официальная документация: https://neo4j.com/docs/cypher-manual/5/constraints/examples/#administration-constraints-drop-a-non-existing-constraint

Если вы знаете все нужные вам индексы и ограничения, вы можете использовать процедуру 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│
└────────────┴───────┴──────┴───────┘
Другие вопросы по тегам