Should long free-text notes be stored/searched in Apache AGE graph nodes or PostgreSQL tables?
16:57 06 Feb 2026

I’m building an app that stores long, unstructured notes like:

“February 6th, 2026 – This is a note about Bob Maynard. He likes the color green…”

These notes can be fairly long and I need to:

  • Store them durably

  • Search them by keywords later

  • Also connect them to other entities (people, accounts, etc.) via a graph model

My backend stack is:

  • PostgreSQL

  • Apache AGE (for graph relationships)

Right now I’m trying to decide where the note text itself should live.

The two options I’m considering:

  1. Store the note body directly on Apache AGE nodes

    • Each (:Note) node would contain the full text

    • Relationships like (:Person)-[:HAS_NOTE]->(:Note)

    • But I’m unsure how well AGE handles large text and text search

  2. Store the note body in a PostgreSQL table (TEXT column)

    • Use AGE nodes to store only the note ID and relationships

    • Fetch/search note text via PostgreSQL (possibly full-text search)

    • Join graph traversal results back to the table

My questions:

  • Is Apache AGE appropriate for storing and searching long free-text notes?

  • Or is it better practice to keep the text in PostgreSQL and use AGE only for relationships?

  • Are there known performance or design pitfalls with either approach?

I don’t currently need fuzzy search or autocomplete (so Elasticsearch feels like overkill), but I do need good keyword search and graph traversal.

What’s the recommended architecture here?

postgresql elasticsearch text graph apache-age