INSERT#
GQL 절 2.18에 추가
패턴이 기술하는 정점과 간선을 만듭니다. Cypher가 CREATE라고 부르는 절의 GQL 이름입니다.
개요#
굵게 키워드 · 기울임 직접 채우는 자리 · [ ] 생략 가능 · ... 반복 가능. 구문 표기 규약을 참고하십시오.
설명#
INSERT와 CREATE는 이름이 둘인 같은 절입니다. 파서가 둘에 대해 똑같은 트리를
만들므로, 같은 패턴을 받고, 같은 오류를 내고, 같은 실행 계획을 만듭니다.
패턴의 모든 요소가 만들어집니다. 이미 유효 범위의 변수에 바인딩된 요소만 예외입니다. 그 요소는 끝점으로 재사용되고 중복해서 만들어지지 않습니다.
INSERT는 입력 행마다 한 번 실행됩니다. 앞에 절이 없으면 한 번 실행됩니다.패턴이 바인딩하는 변수는 뒤따르는 절과, 같은
INSERT안의 뒤쪽 패턴에서 보입니다.모든 간선에는 레이블 하나와 방향이 정확히 있어야 합니다. 레이블을 암시적으로 만들도록
enable_graph_ddl을 켜 두지 않았다면, 레이블이 이미 존재해야 합니다.
매개변수#
- path_variable
패턴이 만든 경로 전체에 바인딩되는 이름이며, 생략할 수 있습니다. 그것을 반환하면 새 정점과 간선을 순서대로 나열한
graphpath값이 나옵니다.- pattern
구문에 설명된 정점 패턴 또는 경로 패턴입니다. 속성 맵은 그 자리에 (
{title: 'Tenet'}처럼) 적을 수도 있고, SQL 서브쿼리를 포함한 표현식에서=로 통째로 줄 수도 있습니다.
예제#
모든 예제는 예제 데이터셋에서 실행됩니다.
영화 하나를 넣습니다. INSERT와 CREATE는 바꿔 쓸 수 있습니다. 탭을 바꿔 비교해 보십시오:
INSERT (:movie {title: 'Tenet', year: 2020, genre: 'Action'});
CREATE (:movie {title: 'Tenet', year: 2020, genre: 'Action'});
UPDATE 1
두 형태는 실행 계획이 똑같습니다:
EXPLAIN (COSTS OFF) INSERT (:movie {title: 'Tenet'});
QUERY PLAN
--------------
Graph Create
-> Result
(2 rows)
만든 것을 반환하기#
INSERT도 다른 절과 마찬가지로 자기 변수를 바인딩하므로, 뒤따르는 RETURN이 그것을 보고할 수
있습니다:
INSERT (p:person {name: 'John David Washington', born: 1984}) RETURN p.name AS person;
person
-------------------------
"John David Washington"
(1 row)
그래프에 이미 있는 것에 새 요소를 붙이기#
앞선 MATCH가 바인딩한 변수는 새 정점이 아니라 끝점이므로, 간선만 만들어집니다:
MATCH (p:person {name: 'Christopher Nolan'}), (m:movie {title: 'Tenet'})
INSERT (p)-[:directed]->(m)
RETURN count(*) AS edges;
edges
-------
1
(1 row)
한 절에서 여러 패턴 만들기#
패턴은 쉼표로 구분하며, 앞선 패턴이 바인딩한 변수를 가리킬 수 있습니다:
MATCH (m:movie {title: 'Tenet'})
INSERT (a:person {name: 'Robert Pattinson', born: 1986}),
(b:person {name: 'Elizabeth Debicki', born: 1990}),
(a)-[:acted_in {role: 'Neil'}]->(m),
(b)-[:acted_in {role: 'Kat'}]->(m);
UPDATE 4
이 태그는 한 절이 만든 요소 네 개를 셉니다:
MATCH (p:person)-[r:acted_in]->(:movie {title: 'Tenet'})
RETURN p.name AS actor, r.role AS role ORDER BY actor;
actor | role
---------------------+--------
"Elizabeth Debicki" | "Kat"
"Robert Pattinson" | "Neil"
(2 rows)
SQL 쿼리에서 속성 맵 가져오기#
= expression 형태는 맵 전체를 한 번에 줍니다. 테이블에서 속성을 적재할 때 쓰십시오:
INSERT (:movie = (SELECT jsonb_build_object('title', 'Dunkirk', 'year', 2017)));
UPDATE 1
MATCH (m:movie {title: 'Dunkirk'}) RETURN m.year AS year;
year
------
2017
(1 row)
참고#
이 절은 CREATE 태그가 아니라 평범한 그래프 쓰기 명령 태그인 UPDATE n을 보고합니다. 쓰기는
하고 투영은 하지 않으려면 FINISH와 함께 쓰십시오.
INSERT라고 썼어도 거부 메시지는 CREATE를 이름으로 부릅니다. 두 표기가 같은 절을 만들기
때문입니다. 알아 둘 만한 것들입니다:
패턴 |
오류 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
참고
insert는 2.18에서 예약 키워드가 됐습니다. 문법이 모호해지지 않는 자리에서는 따옴표 없이도
여전히 받아들여집니다. 변수 이름(MATCH (insert:person))과 패턴 안의 레이블
이름(MATCH (n:insert))이 그렇습니다. CREATE VLABEL 이름, RETURN 별칭을 가리키는 ORDER BY
키, SQL 테이블·컬럼 이름으로는 받아들여지지 않습니다. 그 자리에는 "insert"로 쓰거나 이름을
바꾸십시오.
호환성#
GQL 적합성
§16.5의 insert graph pattern에 대한 GQL INSERT 문장(ISO/IEC 39075:2024 §13.2)을 구현합니다.
지원 — 정점과 간선 삽입, 문장 하나에 여러 패턴, 바인딩된 요소를 끝점으로 재사용하는 것, 인라인 속성 맵, 그리고 삽입한 패턴 전체에 대한 경로 변수.
미지원 — 그래프 타입을 요구하는 표준의 타입 그래프 검사(§18). AgensGraph의 그래프에는 타입이 없으므로, 삽입은 선언된 정점·간선 타입이 아니라 실제로 있는 레이블에 견주어 검증됩니다.
진행 상황은 GQL 적합성 표에서 확인하십시오.
openCypher#
openCypher는 이 절을 CREATE로 표기하며, AgensGraph는 그것을 같은 뜻으로 받습니다. INSERT라는
이름은 GQL과 SQL에서 왔고, SQL에서는 테이블에 대해 같은 일을 합니다.