{#drop-graph-drop-graph}
# DROP GRAPH
그래프를 지우며, `CASCADE`를 쓰면 그 안의 모든 레이블·정점·간선까지 지웁니다.
{#drop-graph-synopsis}
## 개요
DROP GRAPH[IF EXISTS]graph_name[, ...][CASCADE|RESTRICT]
굵게 키워드 · 기울임 직접 채우는 자리 · [ ] 생략 가능 · ... 반복 가능. 구문 표기 규약을 참고하십시오.
{#drop-graph-description}
## 설명
`DROP GRAPH`는 그 그래프의 카탈로그 행과 스키마를 지웁니다. 그래프가 담고 있는 모든 것이 그
스키마에 의존합니다. 레이블, 그 뒤의 테이블, 그 행, 인덱스, 제약, 시퀀스가 그렇습니다. 그래서
기본값인 `RESTRICT`는 그중 무엇이라도 남아 있으면 거부합니다.
그냥 쓴 [`CREATE GRAPH`](create-graph.md)로 만든 그래프는 결코 비어 있지 않습니다. `ag_vertex`,
`ag_edge`, `ag_label_seq`가 함께 만들어지기 때문입니다. 그래서 그렇게 만든 그래프는 모두 `CASCADE`가
필요합니다. 그 셋을 하나도 만들지 않는 `CREATE GRAPH ONLY`로 만든 그래프만 `CASCADE` 없이 지울 수
있습니다.
- 그래프를 지우는 데 그 레이블이 비어 있어야 하는 것은 아닙니다. `CASCADE`가 테이블과 함께 행도
가져갑니다.
- 지운 그래프가 세션의 `graph_path`였다면 그 설정이 비워집니다.
- 그래프의 스키마만 따로 지울 수는 없습니다. 그것에 `DROP SCHEMA`를 쓰면 거부되고 이 문장을 가리킵니다.
{#drop-graph-parameters}
## 매개변수
IF EXISTS
: 존재하지 않는 그래프에 대해 오류가 아니라 알림을 냅니다. 같은 문장의 다른 이름은 그대로
지워집니다.
graph_name
: 지울 그래프의 이름입니다. 쉼표로 구분해 여러 개를 줄 수 있습니다.
CASCADE
: 그 그래프에 의존하는 객체를 지웁니다. 그 레이블, 그 테이블과 행, 그리고 레이블 id 시퀀스입니다.
RESTRICT
: 그 그래프에 의존하는 것이 있으면 거부합니다. 이것이 기본값입니다.
{#drop-graph-examples}
## 예제
{#drop-graph-drop-a-graph-and-everything-in-it}
### 그래프와 그 안의 모든 것 지우기
```cypher
CREATE GRAPH clearance;
SET graph_path = clearance;
CREATE VLABEL film;
CREATE (:film {title: 'Arrival'});
```
`CASCADE`가 없으면 지우기가 거부되고, 메시지가 무엇이 막고 있는지 나열합니다:
```cypher
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`에 있던 정점도 함께 가져갑니다:
```cypher
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`였으므로 그 설정이 이제 비었습니다:
```sql
SHOW graph_path;
```
```
graph_path
------------
(1 row)
```
{#drop-graph-drop-several-graphs-skipping-the-ones-that-are-gone}
### 여러 그래프 지우기, 이미 없는 것은 건너뛰기
```cypher
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
```
없는 이름은 보고되고, 존재하는 둘은 지워집니다:
```psql
\dG archive*
```
```
No matching graphs found.
```
{#drop-graph-notes}
## 참고
그래프를 지우지 않고 비우려면 `MATCH (n) DETACH DELETE n`을 실행하고, 그다음 더 이상 필요하지 않은
레이블을 지우십시오. 스키마와 기반 레이블은 그대로 남습니다. [`DROP VLABEL`](drop-label.md)이
레이블을 지우려면 그 레이블이 비어 있어야 하므로, 그 삭제가 보통 첫 단계입니다.
`DROP GRAPH ... CASCADE`는 그 요구 조건을 아예 건너뜁니다. 레이블을 하나씩 지우는 것이 아니라
테이블을 지우기 때문입니다.
{#drop-graph-compatibility}
## 호환성
{#drop-graph-isoiec-39075-gql}
### ISO/IEC 39075 (GQL)
GQL의 ``(§12.5)는 `DROP [PROPERTY] GRAPH [IF EXISTS] `입니다.
AgensGraph는 그중 `DROP GRAPH`와 `IF EXISTS` 부분을 받습니다. 그리고 GQL에는 없는 이름 목록과
`CASCADE`/`RESTRICT` 선택을 더했습니다. `PROPERTY` 표기는 받아들여지지 않습니다.
`DROP PROPERTY GRAPH clearance`는 구문 오류입니다.
{#drop-graph-postgresql}
### PostgreSQL
`DROP GRAPH`는 `DROP SCHEMA`에 대응하고, `IF EXISTS`와 이름 목록, `CASCADE`/`RESTRICT`도 거기서와
같이 동작합니다. 다른 점은 반쯤 지워진 그래프를 남기기를 거부한다는 것입니다. 그래프의 스키마에
`DROP SCHEMA`를 쓰면 `cannot drop schema clearance because graph clearance requires it`으로
실패하므로, 카탈로그 행과 스키마는 언제나 함께 사라집니다.
{#drop-graph-see-also}
## 관련 항목
- [`CREATE GRAPH`](create-graph.md)
- [`DROP VLABEL`·`DROP ELABEL`](drop-label.md)
- [그래프가 어떻게 저장되는가](../../concepts/graph-on-postgresql.md)