Obrigado antecipadamente pela ajuda!
Gostaria de configurar um programa Lisp que faça algo quando minha tabela de banco de dados Postgres for atualizada. Estou usando a incrível biblioteca Postmodern, que tem sido absolutamente fantástica.
Conforme discutido nesta questão ( notificação do lado do cliente sobre alteração de tabela no Common Lisp com pacote Postmodern ), não quero pesquisar o banco de dados (como o OP reclama da resposta), mas quero que o banco de dados diga ao meu programa quando fazer algo.
A pessoa que respondeu aponta para a função pós-moderna "wait-for-notifications": https://github.com/marijnh/Postmodern/blob/22aab0ec25d5f6affd390e690827a7515aeafd4f/cl-postgres/public.lisp#L358-L370
Estou um pouco preocupado com esta função porque 1. é interna ao pós-moderno e, portanto (deixe-me saber se estou errado aqui) não é para consumo público e 2. leva "conexão de banco de dados" como argumento, o que posso não rastreie.
Então:
- Alguém pode me indicar a direção certa para entender e trabalhar corretamente com a "conexão de banco de dados"?
- Diga-me que estou latindo para a árvore errada aqui e, em caso afirmativo, indique-me a direção certa para aprender como fazer meu programa Lisp fazer algo quando minha tabela mudar?
Muito obrigado!
Existem diferentes camadas,
wait-for-notification
é um símbolo exportado docl-postgres
pacote e definido em um arquivo chamadopublic.lisp
, portanto, não há problema em usá-lo diretamente. O pós-moderno está em um nível mais alto de abstração, mas dependendo de suas necessidades, você pode chamarcl-postgres
funções diretamente.Uma conexão é o que você obtém quando liga
open-database
. Macros auxiliares comowith-connection
vincular a variável especial*database*
. Geralmente isso é usado de forma invisível porquery
outros comandos, que analisam a ligação atual do*database*
. Porém se você quiser entender um pouco mais como ele é usado, a documentação em https://marijnhaverbeke.nl/postmodern/cl-postgres.html parece muito boa.Observação
Se você for esperar por alterações em suas tabelas, é provável que queira usar um thread dedicado. A documentação diz que: