Postgres:如何在数据库启动后立即启动一个过程?
问题描述:
我有几十个未记录的表格,而且doc说一个未记录的表格会在崩溃或不干净关机后自动截断。Postgres:如何在数据库启动后立即启动一个过程?
基于此,我需要在数据库启动后检查一些表,看看它们是否是“空的”并对它做些什么。
所以简而言之,我需要在数据库启动后执行一个过程。
如何最好的办法呢? PS:我在Ubuntu 12.04服务器上运行Postgres 9.1。
答
没有这样的功能(写作时,最新版本是PostgreSQL 9.2)。你唯一的选择是:
开始在PostgreSQL的init脚本的脚本轮询数据库和DB时,准备锁表并填充他们。
将启动脚本修改为使用
pg_ctl start -w
并在pg_ctl
返回时立即调用脚本;这有相同的竞争条件,但避免了民意调查。教你的应用程序运行一个测试,只要它打开一个新的池连接来检测这种情况,锁定表并填充它们;或
当它打开一个新的连接,不要使用此任务未注册的表,如果你的应用程序无法与他们为空应付
还有的是在pgsql-连接时间挂钩的讨论黑客,但没有可行的实施已经发布和合并。
可能你可以用PostgreSQL bgworkers做这样的事情,但它比从脚本中轮询数据库要困难得多。
也许是一个小的bash脚本,它将在数据库启动后立即启动?在这样的脚本中,您可以使用'psql'来调用数据库中的函数。 – 2013-04-22 19:32:53
不幸的是,我无法更改数据库启动脚本。我需要通过它自己的数据库来完成它。 – Christian 2013-04-22 21:01:16