Postgresql 如何使用SQLAlchemy/Python延迟缓慢的数据库操作

Postgresql 如何使用SQLAlchemy/Python延迟缓慢的数据库操作,postgresql,rest,asynchronous,sqlalchemy,fastapi,Postgresql,Rest,Asynchronous,Sqlalchemy,Fastapi,我有一个数据库的REST接口,用Python FastAPI+SQLAlchemy实现。我想对我的数据运行一些(相对)昂贵的操作,例如计算加密哈希或签名。我希望能够: 执行插入,以便数据库检查所有引用完整性 将REST响应返回到前端(insert的主键) 异步计算代价高昂的哈希/签名/任何内容,并更新到DB(同一个表) 我更希望有一个跨数据库的解决方案,但在插入/更新时运行触发器似乎是一个不错的选择。如果是这样,我的生产目标是PostgreSQL 有没有人有他们喜欢的建议方法?我会尝试将这些问题

我有一个数据库的REST接口,用Python FastAPI+SQLAlchemy实现。我想对我的数据运行一些(相对)昂贵的操作,例如计算加密哈希或签名。我希望能够:

  • 执行插入,以便数据库检查所有引用完整性
  • 将REST响应返回到前端(insert的主键)
  • 异步计算代价高昂的哈希/签名/任何内容,并更新到DB(同一个表)
  • 我更希望有一个跨数据库的解决方案,但在插入/更新时运行触发器似乎是一个不错的选择。如果是这样,我的生产目标是PostgreSQL


    有没有人有他们喜欢的建议方法?

    我会尝试将这些问题分开

    • 构建一个执行第1项和第2项的快速REST服务(关注点:一致的数据持久性)
    • 创建一个在后台使用或s/th类似(关注点:数据“装饰”)执行项目3的计划作业,或使用notify/listen设置调用单独的进程

    运行触发器将同步执行这些操作。据我所知,这不是你的意图。

    你的回答让我意识到,我错误地假设触发器是异步的,但这是错的!它们必须在事务上下文中运行。而decorator是这个图案的完美词汇。pgAgent看起来非常有用!但我在这里试图实现的时机更接近实时。带有独立守护进程侦听器的pglisten/notify可能是一个很好的替代解决方案。插入或更新后的
    触发器仅发出通知(使用
    pg_notify
    函数)并迅速离开,然后守护进程侦听器跳入并执行繁重的操作。我编辑了我的答案,把它包括在内。我认为这是一个超级组合的选项。我将尝试开发它,以便pgAgent也可以调用守护进程,这样,如果错过了任何工作,就可以按计划执行清理。FastAPI的概念是,也许它会满足您的要求。