DROP GRAPH#
그래프를 지우며, CASCADE를 쓰면 그 안의 모든 레이블·정점·간선까지 지웁니다.
개요#
굵게 키워드 · 기울임 직접 채우는 자리 · [ ] 생략 가능 · ... 반복 가능. 구문 표기 규약을 참고하십시오.
설명#
DROP GRAPH는 그 그래프의 카탈로그 행과 스키마를 지웁니다. 그래프가 담고 있는 모든 것이 그
스키마에 의존합니다. 레이블, 그 뒤의 테이블, 그 행, 인덱스, 제약, 시퀀스가 그렇습니다. 그래서
기본값인 RESTRICT는 그중 무엇이라도 남아 있으면 거부합니다.
그냥 쓴 CREATE GRAPH로 만든 그래프는 결코 비어 있지 않습니다. ag_vertex,
ag_edge, ag_label_seq가 함께 만들어지기 때문입니다. 그래서 그렇게 만든 그래프는 모두 CASCADE가
필요합니다. 그 셋을 하나도 만들지 않는 CREATE GRAPH ONLY로 만든 그래프만 CASCADE 없이 지울 수
있습니다.
그래프를 지우는 데 그 레이블이 비어 있어야 하는 것은 아닙니다.
CASCADE가 테이블과 함께 행도 가져갑니다.지운 그래프가 세션의
graph_path였다면 그 설정이 비워집니다.그래프의 스키마만 따로 지울 수는 없습니다. 그것에
DROP SCHEMA를 쓰면 거부되고 이 문장을 가리킵니다.
매개변수#
- IF EXISTS
존재하지 않는 그래프에 대해 오류가 아니라 알림을 냅니다. 같은 문장의 다른 이름은 그대로 지워집니다.
- graph_name
지울 그래프의 이름입니다. 쉼표로 구분해 여러 개를 줄 수 있습니다.
- CASCADE
그 그래프에 의존하는 객체를 지웁니다. 그 레이블, 그 테이블과 행, 그리고 레이블 id 시퀀스입니다.
- RESTRICT
그 그래프에 의존하는 것이 있으면 거부합니다. 이것이 기본값입니다.
예제#
그래프와 그 안의 모든 것 지우기#
CREATE GRAPH clearance;
SET graph_path = clearance;
CREATE VLABEL film;
CREATE (:film {title: 'Arrival'});
CASCADE가 없으면 지우기가 거부되고, 메시지가 무엇이 막고 있는지 나열합니다:
DROP GRAPH clearance;
ERROR: cannot drop graph clearance because other objects depend on it
DETAIL: sequence clearance.ag_label_seq depends on schema clearance
vlabel ag_vertex depends on schema clearance
elabel ag_edge depends on schema clearance
vlabel film depends on schema clearance
HINT: Use DROP ... CASCADE to drop the dependent objects too.
CASCADE는 그 넷을 모두 가져가고, film에 있던 정점도 함께 가져갑니다:
DROP GRAPH clearance CASCADE;
NOTICE: drop cascades to 4 other objects
DETAIL: drop cascades to sequence clearance.ag_label_seq
drop cascades to vlabel ag_vertex
drop cascades to elabel ag_edge
drop cascades to vlabel film
DROP GRAPH
clearance가 세션의 graph_path였으므로 그 설정이 이제 비었습니다:
SHOW graph_path;
graph_path
------------
(1 row)
여러 그래프 지우기, 이미 없는 것은 건너뛰기#
CREATE GRAPH archive_2024;
CREATE GRAPH archive_2025;
DROP GRAPH IF EXISTS archive_2024, archive_2025, archive_2026 CASCADE;
NOTICE: graph "archive_2026" does not exist, skipping
NOTICE: drop cascades to 6 other objects
DETAIL: drop cascades to sequence archive_2025.ag_label_seq
drop cascades to vlabel ag_vertex
drop cascades to elabel ag_edge
drop cascades to sequence archive_2024.ag_label_seq
drop cascades to vlabel ag_vertex
drop cascades to elabel ag_edge
DROP GRAPH
없는 이름은 보고되고, 존재하는 둘은 지워집니다:
\dG archive*
No matching graphs found.
참고#
그래프를 지우지 않고 비우려면 MATCH (n) DETACH DELETE n을 실행하고, 그다음 더 이상 필요하지 않은
레이블을 지우십시오. 스키마와 기반 레이블은 그대로 남습니다. DROP VLABEL이
레이블을 지우려면 그 레이블이 비어 있어야 하므로, 그 삭제가 보통 첫 단계입니다.
DROP GRAPH ... CASCADE는 그 요구 조건을 아예 건너뜁니다. 레이블을 하나씩 지우는 것이 아니라
테이블을 지우기 때문입니다.
호환성#
ISO/IEC 39075 (GQL)#
GQL의 <drop graph statement>(§12.5)는 DROP [PROPERTY] GRAPH [IF EXISTS] <name>입니다.
AgensGraph는 그중 DROP GRAPH와 IF EXISTS 부분을 받습니다. 그리고 GQL에는 없는 이름 목록과
CASCADE/RESTRICT 선택을 더했습니다. PROPERTY 표기는 받아들여지지 않습니다.
DROP PROPERTY GRAPH clearance는 구문 오류입니다.
PostgreSQL#
DROP GRAPH는 DROP SCHEMA에 대응하고, IF EXISTS와 이름 목록, CASCADE/RESTRICT도 거기서와
같이 동작합니다. 다른 점은 반쯤 지워진 그래프를 남기기를 거부한다는 것입니다. 그래프의 스키마에
DROP SCHEMA를 쓰면 cannot drop schema clearance because graph clearance requires it으로
실패하므로, 카탈로그 행과 스키마는 언제나 함께 사라집니다.