如何在 PostgreSQL 上安装 Apache AGE 并把 Semantica 图存储首次跑通? 📅 发布时间:2026/9/15 10:54:07 👁 浏览次数: 如何在 PostgreSQL 上安装 Apache AGE 并把 Semantica 图存储首次跑通【免费下载链接】semanticaGraph-Native Infrastructure for Context and Accountable AI Systems项目地址: https://gitcode.com/GitHub_Trending/sema/semanticaSemantica 的graph_store模块提供统一的图数据库接口其中backendage可以把图数据直接存进 PostgreSQL Apache AGE不需要单独的图数据库服务——适合团队已经在运行 PostgreSQL、又想用 openCypher 查询图数据的场景。本文的目标是装好依赖、连上一个已安装 AGE 扩展的 PostgreSQL 实例跑通第一次节点写入和查询并用文档给出的方式验证结果。前提版本要求来自项目文档组件要求PostgreSQL12Apache AGE1.4需自行编译安装到 PostgreSQL 实例中psycopg22.9Python3.8推荐 3.11需要特别注意一点Apache AGE 必须编译并安装进你的 PostgreSQL 实例这部分在 PostgreSQL/AGE 一侧完成Semantica 文档不会替你安装它。Semantica 侧只负责通过psycopg2驱动连接并初始化扩展。准备条件安装 Semantica 和驱动第一步是安装 Semantica 本体。根据 安装文档pip install semantica验证安装是否成功文档给出的验证命令python -c import semantica; print(semantica.__version__)AGE 后端的 Python 驱动是psycopg2需要额外安装pip install psycopg2-binary如果缺少psycopg2ApacheAgeStore构造时会记录警告connect()时会直接抛出ProcessingError提示安装psycopg2-binary。关于 AGE 扩展本身文档给出两种准备方式已有 PostgreSQL 12自行按 Apache AGE 的官方安装流程把扩展编译安装进去文档指向 AGE 官方的 setup 指南此处不再赘述因为 Semantica 仓库不包含该流程。可选分支用 Docker 起步。AGE 图存储文档 提供了一个 compose 片段用apache/age:latest镜像起一个自带 AGE 的 PostgreSQL端口映射为5432:5432环境变量POSTGRES_USERpostgres、POSTGRES_PASSWORDsecret、POSTGRES_DBagedbservices: age: image: apache/age:latest ports: - 5432:5432 environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: secret POSTGRES_DB: agedbdocker compose up -d注意docker compose up -d会启动一个后台容器并占用本机 5432 端口如果该端口已被占用需要先解决端口冲突或修改映射。连接 Semantica 图存储两条路径连接参数只有两个核心项connection_stringPostgreSQL 连接串和graph_nameAGE 图名。文档给出了两种入口。主路径统一门面GraphStore。接口与 Neo4j、FalkorDB 后端一致backend 可写age或apache_agefrom semantica.graph_store import GraphStore store GraphStore( backendage, connection_stringhostlocalhost dbnameagedb userpostgres passwordsecret, graph_namesemantica, ) store.connect()可选分支直接使用ApacheAgeStore。需要 AGE 专属行为时例如直接调用底层的execute_query并指定colsfrom semantica.graph_store.age_store import ApacheAgeStore store ApacheAgeStore( connection_stringhostlocalhost dbnameagedb userpostgres passwordsecret, graph_namemy_graph, ) store.connect()两点必须做到构造时不会自动连接。文档明确警告GraphStore不会在构造时连接任何操作前必须先调用store.connect()或者使用上下文管理器写法with GraphStore(...) as store:自动关闭连接。connection_string中的 host、dbname、user、password 要替换为你环境中的实际值上面用的是文档示例中的 Docker 配置。配置也可以通过环境变量或编程方式提供等效于直接传参环境变量说明默认值GRAPH_STORE_AGE_CONNECTION_STRINGPostgreSQL 连接串hostlocalhost dbnameagedb userpostgres passwordpostgresGRAPH_STORE_AGE_GRAPH_NAMEAGE 图名semanticafrom semantica.graph_store.config import graph_store_config graph_store_config.set(age_connection_string, hostdb.example.com dbnameprod_age userapp) graph_store_config.set(age_graph_name, production)connect() 在做什么connect()执行的是幂等初始化可以重复调用内部依次完成见 AGE 文档 与 age_store.py 中的connect实现CREATE EXTENSION IF NOT EXISTS age;—— 加载 AGE 扩展LOAD age;—— 在当前会话激活 AGESET search_path ag_catalog, $user, public;—— 设置搜索路径若目标图不存在则创建。任何一步失败都会回滚并抛出ProcessingError形如Failed to connect to AGE: ...其中带出的原始错误信息就是下一步排查的线索。首次跑通写入节点和关系并验证下面这段按文档 Quick Start 示例组织用统一门面写入两个Person节点和一条KNOWS关系再查询回来from semantica.graph_store import GraphStore store GraphStore( backendage, connection_stringhostlocalhost port5432 dbnameagedb userpostgres passwordsecret, graph_namesemantica, ) store.connect() alice store.create_node(labels[Person], properties{name: Alice, age: 30}) bob store.create_node(labels[Person], properties{name: Bob, age: 25}) store.create_relationship(alice[id], bob[id], KNOWS, {since: 2023}) result store.execute_query(MATCH (p:Person) RETURN p, colsp agtype) print(result[records]) store.close()运行后result[records]应包含刚写入的两个节点文档中直连示例展示过create_node的返回形态文档示例ID 数值会随你的环境不同{id: 844424930131969, labels: [Entity], properties: {semantica_id: ent-001, value: test}}另外可以用store.get_stats()查看图统计返回包含node_count、relationship_count、label_counts等字段的字典用来确认节点和关系确实落库。AGE 不支持cypher()调用内的$param参数绑定Semantica 的 AGE 后端会把参数安全地转成 Cypher 字面量并自动转义所以下面这种写法可以直接用result store.execute_query( MATCH (p:Person) WHERE p.age $min_age RETURN p, parameters{min_age: 25}, colsp agtype, )自定义查询时cols用来指定 SQL 包装的AS子句例如colsa agtype, r agtype, b agtype省略时后端会尝试从RETURN子句推断列。首次跑不通时检查哪些项按文档给出的现象对应排查报ProgrammingError连接或执行 Cypher 时文档明确说明这表示你的 PostgreSQL 实例里没装 AGE 扩展。backendage依赖 AGE 扩展函数必须先完成扩展的编译安装。ProcessingError: psycopg2 is not available...驱动缺失执行pip install psycopg2-binary后重试。构造后直接调用写操作报错确认已经先调用了store.connect()或使用with写法connect()未调用前不会建立连接。连接串问题核对connection_string的 host、port、dbname、user、password 是否与实际 PostgreSQL 实例一致用环境变量配置时对应GRAPH_STORE_AGE_CONNECTION_STRING默认值为hostlocalhost dbnameagedb userpostgres passwordpostgres。两个必须知道的限制跑通之后文档强调了两个 AGE 特有约束会直接影响后续数据设计AGE 内部 ID 与应用语义 ID 是两套东西。AGE 自动生成的顶点/边 ID大整数暴露在每个返回 dict 的id字段里用于delete_node()、get_node()等图操作你自己的业务标识应存进semantica_id属性。文档明确警告不要把两者混用——图操作删除、更新、遍历用node[id]应用层查找用node[properties][semantica_id]。AGE 每个顶点只支持一个标签。Semantica 对此做了透明处理labels[0]作为主标签labels[1:]存入顶点的labels属性数组读取节点时会重建完整标签列表。因此传labels[Person, Employee]不会报错但在 AGE 侧只有一个Person标签。参考与下一步Apache AGE 图存储文档完整 API 表create_node、create_relationship、get_neighbors、shortest_path、create_index等、事务行为说明成功COMMIT、异常ROLLBACK并以ProcessingError重抛。Graph Store 模块参考统一 API 的方法清单、QueryEngine参数化查询与缓存、批量加载create_nodes()的用法。存储后端总览说明 Apache AGE 适配器的状态为 built-in并提示 Cypher 兼容性和属性处理可能与独立 LPG 引擎存在差异。如果你的数据是在 Semantica 内部构建的知识图GraphBuilder(merge_entitiesTrue, graph_storestore)可以配合已连接的 AGE store 直接把图持久化进去见 Quickstart 中“Persistent graph store”一节这是把 AGE 存储接入完整流水线的下一步。【免费下载链接】semanticaGraph-Native Infrastructure for Context and Accountable AI Systems项目地址: https://gitcode.com/GitHub_Trending/sema/semantica创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考