从旧的 PostgreSQL 文件夹中获取数据库 (win 10)

Get databases from old PostgreSQL folder (win 10)

我需要从 Program Files (win 10) 中的旧 PostgreSQL 文件夹中获取数据库。

我尝试通过注册表更改数据路径 (ImagePath HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\postgresql-x64-12) 从当前到旧 PostgreSQL 数据文件夹的“-D”后的值。

我还尝试用旧文件替换 PostgreSQL 当前文件夹中的文件(替换了 C:\Program Files\PostgreSQL\data\base and C:\Program Files\PostgreSQL\data\global) 的数据。

在这两种情况下,尝试启动 postgresql-x64-12 服务时都发生了错误。错误消息:the postgresql-x64-12 service on local computer started and then stopped.某些服务如果未被其他服务或程序使用则自动停止。

如何从旧 ../Program Files/PostgreSQL 文件夹中获取数据库?

用旧文件夹替换文件夹 C:\Program Files\PostgreSQL\data\baseC:\Program Files\PostgreSQL\data\global 并尝试启动 postgresql-x64-12 服务后,出现一个包含以下内容的日志文件:

LOG: database system was shut down at ...
LOG: invalid primary checkpoint record
PANIC: could not locate a valid checkpoint record
LOG: startup process (PID 17452) was terminated by exception 0xC0000409
HINT: See C include file "ntstatus.h" for a description of the hexadecimal value.
LOG: aborting startup due to startup process failure
LOG: database system is shut down

由于消息 PANIC: could not locate a valid checkpoint record,我使用了 pg_resetwal:在 PowerShell 中,我打开文件夹 C:\Program Files\PostgreSQL\bin,然后 运行 命令 .\pg_resetwal.exe -f -D "C:\Program Files\PostgreSQL\data在某些情况下,不使用 -f 的命令是值得的,对于其他版本的 Postgres,可能需要不同的命令。更多信息:

之后服务也没有启动,日志中出现如下错误:

FATAL: could not access status of transaction
DETAIL: Could not read from file "pg_multixact/members/0000" at offset 8192: read too few bytes.

所以,我用旧文件替换了 C:\Program Files\PostgreSQL\data\pg_multixact 文件夹中的文件。

完成这些步骤后,postgresql-x64-12 服务启动无误,并且可以恢复旧数据库。