如何从另一个Node.js程序向Heroku上的PostgREST发送SIGHUP信号?

时间:2018-03-11 11:10:35

标签: node.js caching heroku signals postgrest

我使用PostgREST在Heroku上部署了the buildpack个实例。

Postgres模式由使用node-pg-migrate的Node.js程序创建。

迁移完成后,架构会发生变化,PostgREST需要reload the schema来更新其架构缓存。

要刷新缓存而不重新启动PostgREST服务器,可以选择向服务器进程发送SIGHUP信号:killall -HUP postgrest

由于我从Node.js程序(npm run migrate:up)运行迁移,因此使用迁移后脚本发送该信号似乎是有意义的。我甚至不确定是否可以从其他服务器向PostgREST实例发送此类信号。

基本上,我要问的是如何从另一台服务器上的Node.js程序向Heroku上的PostgREST发送SIGHUP信号。

1 个答案:

答案 0 :(得分:2)

在服务器之间触发架构重新加载的一种方法是让迁移后脚本在PostgREST附加到的数据库中运行NOTIFY postgrest_reload;。然后在与PostgREST相同的服务器上运行类似pg_listen的工具来捕获该事件并发送sighup。例如:pg_listen <db-uri> postgrest_reload "killall -HUP postgrest"

https://postgrest.com/en/v4.4/admin.html#schema-reloading

中所述,您甚至可以在架构更改时使用PostgREST自动重新加载架构缓存(使用DDL触发器)。