postgresql 13安装后启动错误解决

2024-01-10 13:45:53

安装

下载 pg 13 可执行文件,一路next,记住端口号,5432。

启动

D:\Program Files\PostgreSQL\13\bin>.\pg_ctl.exe start -D "D:\Program Files\PostgreSQL\13\data" -w

报错:

2024-01-10 11:52:47.171 CST [2508] 日志:  正在启动 PostgreSQL 13.13, compiled by Visual C++ build 1914, 64-bit
2024-01-10 11:52:47.172 CST [2508] 日志:  正在监听IPv6地址"::",端口 5432
2024-01-10 11:52:47.172 CST [2508] 日志:  正在监听IPv4地址"0.0.0.0",端口 5432
2024-01-10 11:52:47.240 CST [9480] 日志:  数据库上次关闭时间为 2024-01-10 11:52:40 CST
2024-01-10 11:52:47.437 CST [2508] 日志:  数据库系统准备接受连接
2024-01-10 11:55:47.378 CST [2508] 日志:  无法打开文件 "postmaster.pid": No such file or directory
2024-01-10 11:55:47.378 CST [2508] 日志:  由于数据目录锁文件非法而执行立即关闭
2024-01-10 11:55:47.378 CST [2508] 日志:  接收到立即 (immediate) 停止请求
2024-01-10 11:55:47.378 CST [2508] 日志:  无法打开文件 "postmaster.pid": No such file or directory
2024-01-10 11:55:47.389 CST [10824] 警告:  中断联接, 因为其它服务器进程崩溃
2024-01-10 11:55:47.389 CST [10824] 详细信息:  Postmaster 命令此服务器进程回滚当前事物并退出, 因为其它服务器进程不正常的退出可能毁坏了共享内存.
2024-01-10 11:55:47.389 CST [10824] 提示:  一会儿你将可以重联接数据库并且重复你的命令.
2024-01-10 11:55:47.439 CST [2508] 日志:  数据库系统已关闭

排查

是不是端口被占用:

netstat -ano | findstr "5432"

排除,刚学pg,不了解,搜索出解决方案:

pg_resetwal.exe -f ..\data

再次执行, 上面的 start 命令,成功。

总结

pg_resetwal.exe 是 PostgreSQL 数据库管理系统中的一款工具,主要设计用于重置数据库的预写日志(Write-Ahead Logging, WAL)以及其他相关的控制信息。该工具在数据库出现特定故障,需要手动干预恢复时使用。
该工具的 -f 选项是 --force 的简写形式,用于强制执行操作,而 ..\data 指定了数据库的数据目录。具体来说,pg_resetwal -f ..\data 的作用包括:

  1. 清除现有的预写日志: 在执行该命令后,所有的预写日志文件都会被清除。这意味着数据库将不再有当前的 WAL 日志信息。
  2. 重置控制文件: 除了清除 WAL 日志,该命令还会重置 pg_control 文件中的信息。pg_control 文件包含关于数据库状态的重要信息,如最后的检查点位置等。
  3. 重建 WAL 日志: 当数据库重启后,系统会重新开始生成 WAL 日志。由于之前的 WAL 日志已被清除,新的 WAL 日志将基于最后的检查点位置开始记录。
    应用场景主要包括:
  • 数据恢复: 当数据库因为某些异常情况(如文件系统损坏)导致无法正常启动时,可以使用 pg_resetwal 来重置数据库状态,为之后的恢复操作创造条件。
  • WAL 日志管理: 在某些情况下,可能需要清空所有的 WAL 日志以减少磁盘空间的占用,或者是因为其他的维护操作。
  • 故障切换: 在多副本的 PostgreSQL 集群中,如果主节点出现故障,备节点接管成为新的主节点后,可能需要使用 pg_resetwal 来确保新的主节点可以正常工作。
    在使用 pg_resetwal 工具时,应该非常谨慎,因为它会改变数据库的状态,并可能导致数据丢失。通常,在使用之前应该进行备份,并在理解了所有后果之后才执行。此外,强制执行(使用 -f--force)会绕过某些检查,因此在非紧急情况下不建议使用。在执行该操作之前,应仔细阅读官方文档,并考虑咨询有经验的数据库管理员。

pg_ctl.exe 是 PostgreSQL 数据库管理系统中用于控制数据库服务的工具。start 选项用于启动 PostgreSQL 数据库服务。-D 选项后跟的是数据目录的路径,而 -w 选项表示在启动过程中如果遇到错误,将等待直到服务可以正常启动。
具体来说,pg_ctl.exe start -D "D:\Program Files\PostgreSQL\13\data" -w 的作用包括:

  1. 启动数据库服务: 这个命令会启动 PostgreSQL 数据库服务,使得数据库开始接受新的连接和查询。
  2. 指定数据目录: -D 选项后面跟着的是数据目录的路径,这样 pg_ctl 就知道数据库文件存放在哪里。
  3. 等待服务启动: -w 选项表示如果服务启动失败,pg_ctl 将等待一段时间后重试,直到服务能够成功启动。这通常用于服务依赖其他服务(如网络服务)的情况,确保数据库服务在所有依赖服务都就绪后才开始。
    应用场景主要包括:
  • 正常启动数据库: 当你需要启动 PostgreSQL 数据库服务时,可以使用这个命令。
  • 在脚本中使用: 在自动化脚本中,你可能会在启动数据库服务后执行其他数据库相关的操作,使用 -w 可以确保数据库服务已经启动,不会因为服务未就绪而影响脚本执行。
  • 故障恢复: 在数据库服务因某些原因停止后,可以使用这个命令来重新启动服务。
  • 服务依赖管理: 如果 PostgreSQL 数据库服务依赖于其他服务(如 SQL Server 服务),使用 -w 可以确保在所有依赖服务启动后再启动数据库服务。
    在使用这个命令时,通常不需要 -w 选项,除非你知道数据库服务需要依赖其他服务或者有其他特定的启动需求。在大多数情况下,简单地使用 pg_ctl.exe start -D "D:\Program Files\PostgreSQL\13\data" 就足够了。

文章来源:https://blog.csdn.net/xingkongtianyuzhao/article/details/135500741
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。