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

问题描述 投票:2回答:2

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

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

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

怎么做最好的方法呢?

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

postgresql
2个回答
3
投票

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

  • 从PostgreSQL初始化脚本启动一个脚本,该脚本轮询数据库,当数据库准备好时,锁定表并填充它们;
  • 修改启动脚本以使用pg_ctl start -w并在pg_ctl返回时立即调用您的脚本;这具有相同的竞争条件,但避免了轮询的需要。
  • 教你的应用程序运行测试,只要它打开一个新的池连接来检测这种情况,锁定表并填充它们;要么
  • 如果应用程序在打开新连接时无法处理它们为空,请不要将未记录的表用于此任务

关于pgsql-hackers的连接时间钩子已经讨论过了,但是没有发布和合并的可行实现。

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.