Postgresql 按数据库中指定的时间运行程序

Postgresql 按数据库中指定的时间运行程序,postgresql,debian,Postgresql,Debian,项目(仅用于上下文) 我目前正在开发一个预订解决方案,客户可以通过将事件拖到日历中(也可以像谷歌日历一样移动、编辑、删除),从webapp预订资源。my webapp的持久化层将预订存储在postgres 9.3的一个表中,带有开始和结束(作为带有时区的时间戳,因为用户/客户将位于不同的时区)。这个零件很好用。webapp在Debian上运行,可与Play一起使用!如果有必要的话,用scala编写 问题 现在我试图解决的问题是,在预订的开始时间,需要运行一个程序来配置客户端对资源的访问(在停止时

项目(仅用于上下文)

我目前正在开发一个预订解决方案,客户可以通过将事件拖到日历中(也可以像谷歌日历一样移动、编辑、删除),从webapp预订资源。my webapp的持久化层将预订存储在postgres 9.3的一个表中,带有开始和结束(作为带有时区的
时间戳,因为用户/客户将位于不同的时区)。这个零件很好用。webapp在Debian上运行,可与Play一起使用!如果有必要的话,用scala编写

问题

现在我试图解决的问题是,在预订的开始时间,需要运行一个程序来配置客户端对资源的访问(在停止时间,还需要禁用访问)。此外,它还需要以某种方式传递参数,或者至少了解启动的原因(以明确此时是否预订了多个资源)。配置程序将使用java或scala编写(如果有必要),并将在不同于数据库的机器上运行

编辑:它不需要GUI或任何它只需要运行的东西

我已经读过的

我读了一些关于
倾听
通知
的内容,但不确定如何使用它来启动我的程序。我对数据库的整个主题都很陌生。这样做对吗

tl;dr


我尝试在postgres数据库中存储的时间上运行一个程序,但不知道如何运行。

您需要一个外部cron作业或其他定期任务调度程序,用于查询表并决定是否需要运行某些内容。如果您使用的是Java/Scala,那么可以使用一个在空闲期间休眠的简单线程来完成。或任何时间框架发挥!包括内部-看起来像在游戏中!1.2; 如果你用的是2.x,它也会有类似的东西。这个答案可能会帮助您:

您可以让程序短时间睡眠,然后轮询PostgreSQL连接上的新通知,并在收到通知时重新检查计划。当数据库中的计划表发生更改时,让触发器发送通知,以便轮询客户端知道更新其副本

轮询程序可以修改其睡眠间隔,使其睡眠到事件发生的确切时间,在该时间点启动指定的命令


PgJDBC在收到通知时不提供回调,因此在下一个事件或回调唤醒之前,您无法睡眠。你必须做短暂的睡眠,然后醒来,使用

轮询通知。我不确定你想告诉我什么与链接的问题和时间有关,因为它不应该是webapp轮询数据库,还是应该是?也许这里有点误解,因为配置程序不会用play编写。但总而言之,在我的情况下,投票机制是不可避免的。其他DBMS是否使用JDBC实现回调,以便在没有轮询的情况下工作?@mgttlinger PgJDBC中的
LISTEN
所需的轮询仅在客户端。您不必点击数据库服务器,但是为了获得最可靠的结果,您可以发送一个空查询(
“”
)来强制客户机/服务器往返并刷新缓冲区。请参阅PgJDBC文档。这种轮询很便宜,因此您可以在短睡眠周期内进行轮询,以快速响应更改。至于投票结果如何,这取决于你。你可以使用你想要的任何东西,任何适合你的应用程序的东西。从
psql
运行的Shell脚本,带有
cron
,独立的java守护进程,您可以随意选择。在webapp中只是一个选项。只想将链接添加到