我有几十个未记录的表,并且doc表示在崩溃或不干净关闭后,未记录的表会自动截断。
基于此,我需要在数据库启动后检查一些表,看看它们是否为“空”并对其做了些什么。
简而言之,我需要在数据库启动后立即执行一个过程。
最好的方法是什么?
PS:我在Ubuntu 12.04服务器上运行Postgres 9.1。
答案 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