我在连接到 postgres 数据库的 Windows 上运行 powershell 脚本。
在正常情况下一切正常,但我正在努力使系统更强大,并在断电或重新启动后自动重新启动一切。
问题是,虽然脚本和数据库在启动时都成功启动,但脚本运行得更快——事实上它在数据库可用之前重新启动。
该脚本与包含此内容的连接字符串连接。...
Timeout=60;CommandTimeout=8
我的理解(也许有缺陷?)是Timeout=60
指连接超时,应该意味着“尝试连接到数据库长达 60 秒,如果没有连接则退出并显示错误消息”。但是,在实践中,连接尝试会立即失败并出现错误
the database system is starting
为什么它立即失败而不等待 60 秒?在尝试连接之前,是否有任何方法可以测试数据库是否已重新启动?还是我只需要继续尝试连接直到成功?
超时仅在数据库启动并运行并处于适合“协商”和接受连接的状态时按预期工作。当“谈判”花费太长时间时,您就会超时。
但是,在数据库进入该状态之前,它实际上并不存在,就好像服务器已关闭一样,因此超时参数不起作用。
您的 PostgreSQL 集群可能会作为 Windows 服务启动。
服务之间可以有依赖关系,以便它们以“正确的顺序”启动。您可能必须打包您的脚本,以便它们可以通过相同的服务基础设施进行控制。
或者你只是在你的脚本中调用timeout并让它“等待”一会儿,希望数据库在它继续运行时准备好。