下载 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
的作用包括:
pg_control
文件中的信息。pg_control
文件包含关于数据库状态的重要信息,如最后的检查点位置等。pg_resetwal
来重置数据库状态,为之后的恢复操作创造条件。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
的作用包括:
-D
选项后面跟着的是数据目录的路径,这样 pg_ctl
就知道数据库文件存放在哪里。-w
选项表示如果服务启动失败,pg_ctl
将等待一段时间后重试,直到服务能够成功启动。这通常用于服务依赖其他服务(如网络服务)的情况,确保数据库服务在所有依赖服务都就绪后才开始。-w
可以确保数据库服务已经启动,不会因为服务未就绪而影响脚本执行。-w
可以确保在所有依赖服务启动后再启动数据库服务。-w
选项,除非你知道数据库服务需要依赖其他服务或者有其他特定的启动需求。在大多数情况下,简单地使用 pg_ctl.exe start -D "D:\Program Files\PostgreSQL\13\data"
就足够了。