{#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)