Postgres:如何在数据库启动后立即启动程序?

时间:2013-04-22 19:24:33

标签: postgresql

我有几十个未记录的表,并且doc表示在崩溃或不干净关闭后,未记录的表会自动截断。

基于此,我需要在数据库启动后检查一些表,看看它们是否为“空”并对其做了些什么。

简而言之,我需要在数据库启动后立即执行一个过程。

最好的方法是什么?

PS:我在Ubuntu 12.04服务器上运行Postgres 9.1。

2 个答案:

答案 0 :(得分:3)

没有这样的功能(在撰写本文时,最新版本是PostgreSQL 9.2)。您唯一的选择是:

  • 从PostgreSQL初始化脚本启动一个脚本,该脚本轮询数据库,当数据库准备就绪时锁定表并填充它们;

  • 修改启动脚本以使用pg_ctl start -w并在pg_ctl返回后立即调用您的脚本;这具有相同的竞争条件,但避免了轮询的需要。

  • 教您的应用程序在打开新的池连接时检测此情况,锁定表并填充它们时运行测试;或

  • 如果您的应用程序在打开新连接时无法处理它们为空,请不要使用未记录的表

有关pgsql-hackers的连接时间挂钩的讨论,但没有发布和合并的可行实现。

你可以用PostgreSQL bgworkers做这样的事情,但它比简单地从脚本中轮询DB要困难得多。

答案 1 :(得分:0)

Postgres现在具有pg_isready来确定数据库是否已准备就绪。 https://www.postgresql.org/docs/11/app-pg-isready.html