DEV Community

Humza Tareen
Humza Tareen

Posted on

Interacting with Apache AGE: Best Practices for Application Developers

Apache AGE is a PostgreSQL extension that provides graph database functionality. It is based on the open-source AgensGraph project and supports openCypher queries. Here, we'll share some best practices for application developers working with Apache AGE.

Setting Up Apache AGE

Before you interact with Apache AGE, you'll need to set it up. First, install PostgreSQL (version 11 or later) and then add the Apache AGE extension to your database.

LOAD 'age';
SET search_path = ag_catalog, "$user", public;
Enter fullscreen mode Exit fullscreen mode

After executing the above commands, you're ready to create a graph path and start inserting data.

Create a Graph Path

In Apache AGE, you define a graph path to store and manipulate graph data. It's similar to creating a table in a relational database. Let's create a simple graph path:

SELECT create_graph('my_graph');
Enter fullscreen mode Exit fullscreen mode

Now you can use the my_graph path for your graph data.

Best Practices for Inserting and Querying Data

1. Inserting Data

In Apache AGE, you insert vertices (nodes) and edges (relationships) into the graph. Let's insert some data:

INSERT INTO my_graph
    VALUES (1, 'Person', '{"name": "John"}'),
           (2, 'Person', '{"name": "Jane"}'),
           (3, 'Likes', '{"since": "2022-01-01"}', 1, 2);
Enter fullscreen mode Exit fullscreen mode

This example creates two Person nodes with properties name (John and Jane) and an edge Likes with property since from John to Jane.

2. Querying Data

When querying data, you can use the openCypher query language, which offers a powerful and flexible syntax for graph data manipulation.

For instance, if you want to find out who John likes, you can write:

MATCH (p:Person)-[r:Likes]->(friend:Person) 
WHERE = 'John' 
Enter fullscreen mode Exit fullscreen mode

This query will return "Jane".

3. Update and Delete Data

Just like in a traditional SQL database, you can also update and delete data:

// update
SET (v:Person {name: 'John'}) = {name: 'John Doe'};

// delete
REMOVE e MATCH (n)-[e:Likes]->(m);
Enter fullscreen mode Exit fullscreen mode


Creating indexes on your graph can improve query performance. An index on a property allows Apache AGE to quickly find vertices or edges based on that property:

CREATE (v:Person {name: 'John'}) INDEX ON name;
Enter fullscreen mode Exit fullscreen mode

Transaction Handling

Apache AGE follows PostgreSQL's ACID properties. It means you can use COMMIT and ROLLBACK commands to ensure data integrity:

INSERT INTO my_graph VALUES (1, 'Person', '{"name": "Jack"}');
Enter fullscreen mode Exit fullscreen mode

If something goes wrong, you can roll back the transaction.

Using Prepared Statements

Prepared statements can be useful for executing the same or similar SQL statements repeatedly with high efficiency:

PreparedStatement stmt = connection.prepareStatement(
    "MATCH (p:Person)-[r:Likes]->(friend:Person) WHERE = ? RETURN"
stmt.setString(1, "John");
ResultSet rs = stmt.executeQuery();
Enter fullscreen mode Exit fullscreen mode


Apache AGE offers a powerful way to extend PostgreSQL with graph database functionality. As you develop applications using Apache AGE, follow these best practices to ensure that you're using it effectively and efficiently. And remember, always be mindful of your data schema and ensure it aligns with the graph model for best results. Happy coding!


Top comments (0)