预先感谢您的帮助!
我想设置一个 Lisp 程序,在我的 Postgres 数据库表更新时执行某些操作。我正在使用令人惊叹的后现代图书馆,这绝对是太棒了。
正如这个问题中所讨论的(Common Lisp with Postmodern package中的表更改的客户端通知)我不想轮询数据库(因为OP抱怨答案),而是希望数据库告诉我的程序何时做某事。
回答者指向后现代功能“等待通知”:https://github.com/marijnh/Postmodern/blob/22aab0ec25d5f6affd390e690827a7515aeafd4f/cl-postgres/public.lisp#L358-L370
我有点担心这个函数,因为 1. 它是后现代的内部函数,因此(如果我错了,请告诉我)不供公众使用,2. 它以“数据库连接”作为参数,我对此无法追踪。
所以:
非常感谢!
- 它是后现代内部的,因此(如果我错了请告诉我)不适合公众消费
有不同的层,
wait-for-notification
是从cl-postgres
包导出的符号,并在名为public.lisp
的文件中定义,所以直接使用它应该可以。后现代处于更高的抽象级别,但根据您的需要,您可以直接调用 cl-postgre
函数。
- 它以“数据库连接”作为参数,我无法找到它。
当您拨打
open-database
时就会得到连接。像 with-connection
这样的辅助宏绑定特殊的 *database*
变量。通常,这由 query
和其他命令无形地使用,这些命令查看 *database*
的当前绑定。但是,如果您想更多地了解它的使用方式,https://marijnhaverbeke.nl/postmodern/cl-postgres.html 的文档似乎相当不错。
如果您要等待表中的更改,您很可能需要使用专用线程。文档说:
如果您的应用程序是线程化的,则每个线程应使用自己的连接。连接是有状态的,尝试对多个线程使用相同的连接可能会出现问题。