Apache AGEのグラフを一括で消したい

AGEでcreate_graph()したグラフは、ag_catalogスキーマのag_graphテーブルに格納されており、以下のように格納されている。

\d ag_graph
                Table "ag_catalog.ag_graph"
  Column   |     Type     | Collation | Nullable | Default 
-----------+--------------+-----------+----------+---------
 graphid   | oid          |           | not null | 
 name      | name         |           | not null | 
 namespace | regnamespace |           | not null | 
Indexes:
    "ag_graph_graphid_index" UNIQUE, btree (graphid)
    "ag_graph_name_index" UNIQUE, btree (name)
    "ag_graph_namespace_index" UNIQUE, btree (namespace)
Referenced by:
    TABLE "ag_label" CONSTRAINT "fk_graph_oid" FOREIGN KEY (graph) REFERENCES ag_graph(graphid)

で、これを一括削除するには、drop_graph()を実行する必要があるので、以下のようになる、と。

DO $$
    DECLARE
        nm_value TEXT;
    BEGIN
        FOR nm_value IN
            SELECT name FROM ag_graph
        LOOP
            EXECUTE  format('SELECT drop_graph(%L, true);', nm_value);
        END LOOP;
END $$;

追記(2024.12.13):もちろん、以下のようにしておけば便利。

CREATE OR REPLACE FUNCTION drop_all_graphs()
RETURNS VOID AS $$
DECLARE
    nm_value TEXT;
BEGIN
    SET search_path = ag_catalog, "$user", public;
    FOR nm_value IN
        SELECT name FROM ag_graph
    LOOP
        EXECUTE  format('SELECT drop_graph(%L, true);', nm_value);
    END LOOP;
END
$$ LANGUAGE plpgsql;
SELECT drop_all_graphs();
タイトルとURLをコピーしました