CREATE GRAPH#
그래프를 만듭니다. 스키마 하나, 모든 레이블이 상속하는 기반 레이블 두 개, 그리고 레이블 id를 배정하는 시퀀스입니다.
개요#
CREATE GRAPH ONLY graph_name
굵게 키워드 · 기울임 직접 채우는 자리 · [ ] 생략 가능 · ... 반복 가능. 구문 표기 규약을 참고하십시오.
설명#
그래프는 스키마입니다. CREATE GRAPH는 그 스키마를 만들고 그 안에 객체 세 개를 넣습니다:
기반 정점 레이블인
ag_vertex,기반 간선 레이블인
ag_edge,레이블 id를 배정하는 시퀀스인
ag_label_seq입니다.
그 뒤에 만드는 모든 레이블은 ag_vertex나 ag_edge를 상속합니다. MATCH (n)처럼 레이블 없는
패턴에 뜻을 주는 것이 그 상속입니다. 그 객체들과 식별자 체계는
그래프가 어떻게 저장되는가가 온전히
설명합니다.
그 이름은 그래프 이름으로도, 스키마 이름으로도 비어 있어야 합니다. 그래프가 같은 이름의 스키마를 소유하기 때문입니다.
세션의
graph_path가 비어 있으면CREATE GRAPH가 그것을 새 그래프로 설정합니다. 이미 설정된graph_path는 그대로 둡니다.CREATE GRAPH ONLY는 스키마와 카탈로그 행만 만들고 그 밖에는 아무것도 만들지 않습니다.pg_dump가 내보내는 형태이며, 복원할 때 기반 레이블을 원래의 레이블 id로 직접 다시 만들 수 있게 하기 위한 것입니다. 이렇게 만든 그래프는 그 기반 레이블이 생기기 전까지 레이블을 담을 수 없습니다.
매개변수#
- IF NOT EXISTS
그 이름의 그래프가 이미 있을 때 오류가 아니라 알림을 냅니다. 아무것도 만들어지지 않고, 이미 있는 것도 바뀌지 않습니다.
- graph_name
만들 그래프의 이름입니다.
- AUTHORIZATION role_specification
그 그래프와 함께 만들어지는 객체를 소유하는 롤입니다. 롤 이름,
CURRENT_ROLE,CURRENT_USER,SESSION_USER중 하나를 씁니다. 이 절이 없으면 그래프는 그 문장을 실행한 롤에 속합니다.- ONLY
ag_vertex·ag_edge·ag_label_seq없이 스키마와 카탈로그 행만 만듭니다. 그냥 쓴 형태와 달리graph_path에 손대지 않습니다.
예제#
예제는 예제 데이터셋을 쓰지 않고 자체 그래프인
boxoffice를 만들고, 끝에서 그것을 지웁니다.
그래프 만들기#
CREATE GRAPH boxoffice;
CREATE GRAPH
이 문장이 비어 있던 graph_path를 차지했습니다:
SHOW graph_path;
graph_path
------------
boxoffice
(1 row)
그 그래프가 \dG에 나열됩니다:
\dG boxoffice
List of graphs
Name | Owner
-----------+-------
boxoffice | agens
(1 row)
그리고 그것은 이미 기반 레이블 두 개를 담고 있습니다:
\dGl boxoffice.*
List of labels
Graph | Name | Type | Owner
-----------+-----------+--------+-------
boxoffice | ag_edge | edge | agens
boxoffice | ag_vertex | vertex | agens
(2 rows)
없을 때만 그래프 만들기#
CREATE GRAPH IF NOT EXISTS boxoffice;
NOTICE: graph "boxoffice" already exists, skipping
CREATE GRAPH
이미 있는 그래프는 손대지 않습니다. 이것은 “만들거나 교체하기”가 아닙니다.
다른 롤이 소유하는 그래프 만들기#
CREATE ROLE curator;
CREATE GRAPH festival AUTHORIZATION curator;
CREATE GRAPH
\dG festival
List of graphs
Name | Owner
----------+---------
festival | curator
(1 row)
기반 레이블 없이 스키마만 만들기#
CREATE GRAPH ONLY skeleton;
CREATE GRAPH
그래프는 존재하지만 아무것도 담고 있지 않습니다:
\dGl skeleton.*
No matching labels found.
ag_vertex가 없으므로 그 안에 레이블을 만들 수 없습니다:
SET graph_path = skeleton;
CREATE VLABEL film;
ERROR: relation "skeleton.ag_vertex" does not exist
그래프 세 개와 그 롤을 정리합니다:
DROP GRAPH boxoffice CASCADE;
DROP GRAPH festival CASCADE;
DROP GRAPH skeleton;
DROP ROLE curator;
skeleton에는 그 안에 만들어진 것이 없으므로 CASCADE가 필요하지 않습니다. 그냥 쓴 형태로 만든
그래프는 항상 필요합니다. DROP GRAPH를 참고하십시오.
참고#
graph_path는 수식되지 않은 레이블 이름이 속하는 그래프를 지정합니다. 세션 단위 설정이므로 새
세션마다 설정하거나, 데이터베이스나 롤에 붙여 두십시오:
ALTER DATABASE <database> SET graph_path = boxoffice;
그래프 전체에 작용하는 문장이 두 개 더 있습니다. 둘 다 IF EXISTS 형태는 없습니다:
CREATE GRAPH receipts;
ALTER GRAPH receipts RENAME TO takings;
ALTER GRAPH takings OWNER TO CURRENT_USER;
SHOW graph_path;
graph_path
------------
takings
(1 row)
이름을 바꾸면 그 아래의 스키마도 그래프와 함께 옮겨지고, 세션의 graph_path도 그것을 따라갑니다.
그래서 위에서 receipts가 아니라 takings로 읽힙니다.
DROP GRAPH takings CASCADE;
호환성#
ISO/IEC 39075 (GQL)#
GQL은 <create graph statement>(§12.4)를
CREATE [PROPERTY] GRAPH <name> {<open graph type> | <of graph type>}로 정의합니다. 그래프는
어떤 내용이든 받는 ANY로 만들거나, 정점 타입·간선 타입·속성을 제약하는 그래프 타입에 맞춰
만듭니다. AgensGraph의 그래프는 언제나 열려 있으므로 그래프 타입을 적지 않고, 적을 수도 없습니다.
PROPERTY 표기는 받아들여지지 않습니다. CREATE PROPERTY GRAPH boxoffice는 구문 오류입니다.
그래프 타입은 GQL 적합성 표에 계획으로 기록돼 있습니다.
AUTHORIZATION과 ONLY는 AgensGraph 자신의 것이며, GQL에는 둘 다 없습니다. GQL의 OR REPLACE
형태도 받아들여지지 않습니다.
PostgreSQL#
CREATE GRAPH는 CREATE SCHEMA에 대응하고, IF NOT EXISTS와 AUTHORIZATION도 거기서와 같은
뜻입니다. 차이는 내용물입니다. CREATE SCHEMA는 빈 스키마를 만듭니다. CREATE GRAPH는 기반
레이블과 레이블 id 시퀀스까지 만들고, Cypher가 찾을 수 있도록 그 스키마를 ag_graph에 등록합니다.
CREATE SCHEMA만으로는 그래프가 만들어지지 않습니다.