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│
└────────────┴───────┴──────┴───────┘