我有几十个未记录的表,并且doc表示在崩溃或不正常关闭后,未记录的表会自动截断。
基于此,我需要在数据库启动后检查一些表,看看它们是否为“空”并对其进行一些操作。
简而言之,我需要在数据库启动后立即执行一个过程。
怎么做最好的方法呢?
PS:我在Ubuntu 12.04服务器上运行Postgres 9.1。
没有这样的功能(在撰写本文时,最新版本是PostgreSQL 9.2)。您唯一的选择是:
pg_ctl start -w
并在pg_ctl
返回时立即调用您的脚本;这具有相同的竞争条件,但避免了轮询的需要。关于pgsql-hackers的连接时间钩子已经讨论过了,但是没有发布和合并的可行实现。
你可以用PostgreSQL bgworkers做这样的事情,但它比简单地从脚本中轮询DB要困难得多。
Postgres现在有pg_isready
来确定数据库是否准备就绪。 https://www.postgresql.org/docs/11/app-pg-isready.html