2017-05-18 4 views
2

앱 시작시 표시와 제약 조건이 존재하는지 확인하고 싶습니다. Neo4J Cypher : 제약 조건 보장 (이미 존재하는 경우 오류 방지)

내가 응용 프로그램 시작시 다음과 같은 전화

, 이미 제약과 같은 오류가 발생하고있어 존재합니다

CREATE CONSTRAINT ON (node:MyLabel) ASSERT node.myProperty IS UNIQUE 

내가 제약 조건 오류를 던지고없이 존재을 확인 싶습니다.

Cypher에서이 작업을 수행 할 수있는 방법이 있습니까? Neo4J 문서에서 도움을 얻으려고 애 쓰고 있습니다.

답변

2

불행하게도 사이퍼이 좋은 지원이없고, 여기에서도 APOC 제공 인해 비 주장 인덱스 및 제약 조건을 삭제의 부작용에 잘 맞는 될 수 없습니다.

call db.constraints()call db.indexes()의 결과를 문자열 분석으로 인해 작성해야합니다.

1

APOC 스키마 어설 션 프로 시저를 사용하여 색인 및 제약 조건을 만들 수 있습니다. 결과는 indexLabelconstraintLabel 컬렉션에 지정된 인덱스/제약의 순수한 집합입니다.

CALL apoc.schema.assert({},{MyLabel:['myProperty']}) 
yield label, key, unique, action 
RETURN * 
+1

제안에 감사드립니다. Dave - 현재 저는 사용하고있는 Neo4J 인스턴스에 추가 플러그인을 추가하는 것을 포함하지 않는 더 간단한 솔루션을 찾고 있습니다. 마지 못해 CREATE CONSTRAINT 문을 try-catch 블록으로 둘러 쌉니다. –

+1

'apoc.schema.assert()'가 선언되어 있지 않은 모든 제약 조건/인덱스를 삭제한다는 점을 염두에 두어 조심하십시오. – InverseFalcon

+1

동의합니다. 처음으로 나는 그것을 실행했다. 모든 나의 unasserted 제약을 삭제했다. 그것은 단지 '테스트'모드를 가지고있어 좋을 것입니다. –