# DROP GRAPH Removes a graph, and with `CASCADE` every label, vertex and edge in it. ## Synopsis
DROP GRAPH [ IF EXISTS ] graph_name [, ... ] [ CASCADE | RESTRICT ]

bold keywords · italic placeholders you supply · [ ] optional · ... repeatable. See Syntax conventions.

## Description `DROP GRAPH` drops the graph's catalog row and its schema. Everything the graph holds depends on that schema: labels, the tables behind them, their rows, indexes, constraints and sequences. So `RESTRICT`, which is the default, refuses while any of it is there. A graph made by the plain [`CREATE GRAPH`](create-graph.md) is never empty: `ag_vertex`, `ag_edge` and `ag_label_seq` are created with it. So every such graph needs `CASCADE`. Only a graph made with `CREATE GRAPH ONLY`, which creates none of those, can be dropped without it. - Dropping a graph does not require its labels to be empty. `CASCADE` takes the rows with the tables. - If the dropped graph is the session's `graph_path`, the setting is cleared. - The graph's schema cannot be dropped on its own: `DROP SCHEMA` on it is refused and points you here. ## Parameters IF EXISTS : Issue a notice instead of an error for a graph that does not exist. Other names in the same statement are still dropped. graph_name : Name of the graph to drop. Several names may be given, separated by commas. CASCADE : Drop the objects that depend on the graph: its labels, their tables and rows, and the label-id sequence. RESTRICT : Refuse if anything depends on the graph. This is the default. ## Examples ### Drop a graph and everything in it ```cypher CREATE GRAPH clearance; SET graph_path = clearance; CREATE VLABEL film; CREATE (:film {title: 'Arrival'}); ``` Without `CASCADE` the drop is refused, and the message lists what stands in the way: ```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` takes all four, and the vertex in `film` with them: ```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` was the session's `graph_path`, so the setting is now empty: ```sql SHOW graph_path; ``` ``` graph_path ------------ (1 row) ``` ### 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 ``` The missing name is reported and the two that exist are dropped: ```psql \dG archive* ``` ``` No matching graphs found. ``` ## Notes To empty a graph without dropping it, run `MATCH (n) DETACH DELETE n` and then drop the labels you no longer want. The schema and the base labels stay in place. A label has to be empty before [`DROP VLABEL`](drop-label.md) will remove it, so that delete is the usual first step. `DROP GRAPH ... CASCADE` skips the requirement altogether, because it drops the tables rather than the labels one at a time. ## Compatibility ### ISO/IEC 39075 (GQL) GQL's `` (§12.5) is `DROP [PROPERTY] GRAPH [IF EXISTS] `. AgensGraph accepts the `DROP GRAPH` and `IF EXISTS` parts of that. It adds a name list and the `CASCADE`/`RESTRICT` choice, which GQL does not have. The `PROPERTY` spelling is not accepted: `DROP PROPERTY GRAPH clearance` is a syntax error. ### PostgreSQL `DROP GRAPH` corresponds to `DROP SCHEMA`, and `IF EXISTS`, the name list and `CASCADE`/`RESTRICT` behave as they do there. It differs in refusing to leave a half-dropped graph behind. `DROP SCHEMA` on a graph's schema fails with `cannot drop schema clearance because graph clearance requires it`, so the catalog row and the schema always go together. ## See also - [`CREATE GRAPH`](create-graph.md) - [`DROP VLABEL` and `DROP ELABEL`](drop-label.md) - [How a graph is stored](../../concepts/graph-on-postgresql.md)