提前感谢您的帮助!

我想设置一个Lisp程序,当我的Postgr数据库表更新时,它会做一些事情.我使用的是令人惊叹的后现代图书馆,这是绝对的了不起.

正如在这个问题(client side notification on table change in Common Lisp with Postmodern package)中讨论的,我不想轮询数据库(因为OP抱怨答案),而是希望数据库告诉我的程序什么时候做一些事情.

回答者指出后现代功能"等待通知":https://github.com/marijnh/Postmodern/blob/22aab0ec25d5f6affd390e690827a7515aeafd4f/cl-postgres/public.lisp#L358-L370

我有点担心这个功能,因为1.它是后现代的内部,因此(如果我在这里说错了,请告诉我)不适合公众消费.它把"数据库连接"作为一个参数,我无法追踪.

就这样.

  1. 有谁能为我指明正确的方向来理解和正确地使用"数据库连接"?
  2. 告诉我我在这里找错了树,如果是的话,告诉我正确的方向,学习如何让我的Lisp程序在我的表更改时做一些事情?

谢谢你!

推荐答案

  1. 它是后现代的内部,因此(如果我在这里说错了,请告诉我)不是为公众消费,

有不同的层,wait-for-notification是从cl-postgres包导出的符号,定义在一个名为public.lisp的文件中,所以直接使用它应该是可以的.后现代是一个更高层次的抽象,但根据你的需要,你可以直接调用cl-postgres个函数.

  1. 它把"数据库连接"作为一个参数,我无法追踪.

当你拨打open-database时,你得到的是连接.像with-connection这样的辅助宏绑定特殊的*database*变量.通常,这是由query和其他命令不可见地使用的,这些命令查看*database*的当前绑定.然而,如果你想了解更多它是如何使用的,https://marijnhaverbeke.nl/postmodern/cl-postgres.html处的文档似乎相当不错.

Remark

如果要等待表中的更改,则很可能需要使用专用线程.文件说:

如果应用程序是线程化的,则每个线程都应该使用自己的连接.连接是有状态的,try 为多个线程使用同一连接可能会出现问题.

Postgresql相关问答推荐

Postgres BULK INSERT如何影响Debezium?

将CSV文件复制到临时表

即使存在 GIN 索引,整理默认的类似查询也无法执行

在特定距离内创建点的唯一索引

使用来自 docker 图像的 postgres 设置 Keycloak 21

JOOQ:数据库版本早于 COCKROACHDB 支持的方言:13.0.0

如何在plpgsql中找到一行中的最大值?

我在try 访问我的数据库表时在 postgresql 中收到 aclcheck_error 错误

MERGE 语句的锁定级别

是否可以使用 pgAdmin4 自动格式化/美化 SQL 查询?

sql:转换参数 $1 类型:不支持的类型 []int,in 的一部分

PostgreSQL:在timestamp::DATE 上创建索引

如何使用 ActiveRecord json 字段类型

SELECT INTO 具有多个归因

在 PostgreSQL 中Explain与explain analyze

如何在构建时链接 docker 容器?

使用 postgres regexp_replace 将字符串列表替换为始终相同的字符串

在 PostgreSQL 中显示正在运行的查询的全文

如何将参数值添加到 pgadmin sql 查询?

使用 Hibernate 查询:colon gets treated as parameter / escaping colon