Postgres:如何在数据库启动后立即启动一个过程?

问题描述:

我有几十个未记录的表格,而且doc说一个未记录的表格会在崩溃或不干净关机后自动截断。Postgres:如何在数据库启动后立即启动一个过程?

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

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

如何最好的办法呢? PS:我在Ubuntu 12.04服务器上运行Postgres 9.1。

+0

也许是一个小的bash脚本,它将在数据库启动后立即启动?在这样的脚本中,您可以使用'psql'来调用数据库中的函数。 – 2013-04-22 19:32:53

+0

不幸的是,我无法更改数据库启动脚本。我需要通过它自己的数据库来完成它。 – Christian 2013-04-22 21:01:16

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

  • 开始在PostgreSQL的init脚本的脚本轮询数据库和DB时,准备锁表并填充他们。

  • 将启动脚本修改为使用pg_ctl start -w并在pg_ctl返回时立即调用脚本;这有相同的竞争条件,但避免了民意调查。

  • 教你的应用程序运行一个测试,只要它打开一个新的池连接来检测这种情况,锁定表并填充它们;或

  • 当它打开一个新的连接,不要使用此任务未注册的表,如果你的应用程序无法与他们为空应付

还有的是在pgsql-连接时间挂钩的讨论黑客,但没有可行的实施已经发布和合并。

可能你可以用PostgreSQL bgworkers做这样的事情,但它比从脚本中轮询数据库要困难得多。