You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hasura插入repositories行时自动生成缓存行的实现方案咨询

实现插入repositories后自动添加缓存行的两种方案

如果不想用Hasura Events + Webhook的方式,有两种更轻量的方案可选:一种是通过Hasura配合Postgres自定义函数实现,另一种是直接用PostgreSQL触发器完成。

方案一:Hasura暴露Postgres自定义函数作为mutation

这种方式不需要外部服务,把插入主数据和缓存的逻辑封装在Postgres函数里,再通过Hasura暴露为mutation供用户调用:

  1. 创建Postgres函数,同时处理主表插入和缓存插入(假设缓存表名为repository_caches,按需调整字段映射):
CREATE OR REPLACE FUNCTION insert_repo_with_cache(new_repo repositories)
RETURNS repositories AS $$
BEGIN
  -- 插入主表并返回新增数据
  INSERT INTO repositories VALUES (new_repo.*) RETURNING * INTO new_repo;
  -- 插入缓存表,根据实际缓存需求调整字段和逻辑
  INSERT INTO repository_caches (id, name, url, cached_at)
  VALUES (new_repo.id, new_repo.name, new_repo.url, NOW());
  RETURN new_repo;
END;
$$ LANGUAGE plpgsql VOLATILE;
  1. 在Hasura控制台进入数据 -> 函数,找到这个函数并点击跟踪,配置其作为mutation(设置返回类型为repositories)。
  2. 用户调用这个自定义mutation(如insert_repo_with_cache)即可同时完成主数据和缓存的插入,无需额外操作。

方案二:PostgreSQL触发器自动处理

这种方案完全在数据库层面实现,用户无需修改原有调用方式,Hasura也不需要额外配置:

  1. 创建触发器函数,用于插入缓存行:
CREATE OR REPLACE FUNCTION insert_repo_cache()
RETURNS TRIGGER AS $$
BEGIN
  -- 插入缓存表,按需调整字段和缓存逻辑
  INSERT INTO repository_caches (id, name, url, cached_at)
  VALUES (NEW.id, NEW.name, NEW.url, NOW());
  RETURN NEW;
END;
$$ LANGUAGE plpgsql VOLATILE;
  1. 给repositories表绑定触发器:
CREATE TRIGGER trigger_insert_repo_cache
AFTER INSERT ON repositories
FOR EACH ROW EXECUTE FUNCTION insert_repo_cache();
  1. 配置完成后,用户正常调用insert_repositories_one mutation时,PostgreSQL会自动触发函数插入缓存行,整个过程对用户和Hasura完全透明。

方案对比

  • 方案一适合希望在Hasura层面统一数据插入入口的场景,用户需要切换到自定义mutation调用。
  • 方案二更轻量化,性能更好,不需要改变原有调用流程,适合不需要在Hasura层干预的场景。

内容的提问来源于stack exchange,提问作者Itamar Smirra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:30:12