postgresql - Postgres : how to start a procedure right after database start?

标签 postgresql

我有几十个未记录的表,文档说未记录的表在崩溃或不正常关闭后会自动截断。

基于此,我需要在数据库启动后检查一些表,看看它们是否为“空”并采取一些措施。

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

最好的方法是怎样做?

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

最佳答案

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

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

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

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

  • 如果您的应用程序在打开新连接时无法处理未记录表为空的情况,请不要使用未记录表来执行此任务

有人讨论了 pgsql-hackers 上的连接时 Hook ,但尚未发布和合并可行的实现。

您可以使用 PostgreSQL bgworkers 执行类似的操作,但这比简单地从脚本轮询数据库要困难得多。

关于postgresql - Postgres : how to start a procedure right after database start?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16155096/

相关文章:

c# - NpgSQL 连接 RDS AWS

postgresql - 如何在psql中切换数据库?

sql - 逻辑搜索字段数据库选择问题

postgresql - 启动 postgresql 服务器时出错 - 蛇油键出错

java - postgresql jdbc 中的结果集关闭问题

php - 在哪里可以下载适用于 Windows 的 PHP 扩展?

postgresql - 具有多列的 Postgres 全文搜索,为什么在索引中而不是在运行时连接?

database - 使用 pgcrypto 扩展对加密数据的 postgresql 主键约束

node.js - Sequelize : query to include a parent model's data if it has associated children; don't return the child model's data

java - postgresql在where子句中查询json子元素或postgresql中json_exists() oracle函数的替代方法