先附上 PostgreSQL 的中文文档页中文下载页

为了测试修改的 PostgreSQL 脚本,故只能在 Windows10 也安装一份了,选择了最新的 PostgreSQL 14。

错误描述

安装到快结束时出现一个类似“可能没有安装成功”的报错,报错信息并没有说明具体错误。

不过错误信息会记载在安装日志里,在程序的安装目录(默认为 C:\Program Files\PostgreSQL\14)下的 installation_summary.log 中有类似这样一行:

Installation Log: C:\Users\weili\AppData\Local\Temp\install-postgresql.log

打开这个文件,就可以找到当时的相关报错信息:

Error running C:\Windows\System32\cscript //NoLogo "C:\Program Files\PostgreSQL\14/installer/server/initcluster.vbs" "NT AUTHORITY\NetworkService" "postgres" "****" "C:\Users\weili\AppData\Local\Temp/postgresql_installer_cacaa382e1" "C:\Program Files\PostgreSQL\14" "C:\Program Files\PostgreSQL\14\data" 5432 "Chinese(Simplified),China" 0: Program ended with an error exit code
Problem running post-install step. Installation may not complete correctly
 The database cluster initialisation failed.

此时安装程序在试图创建默认的数据库于 C:\Program Files\PostgreSQL\14\data ,但是失败了,这是安装程序默认的路径,其写入需要管理员权限(当然安装程序本身确实是以管理员权限运行的)。可能的解决方法是将该路径设置为其他不需要管理员权限即可写入的路径,不过我并没有验证。既然这是“post-install step”,意味着安装本身是正常完成了,事实证明也并不影响后续的使用。

自行解决

至少需要手动完成两个步骤,其一是建立和配置数据库,其二是创建系统服务。

配置环境变量

PostgreSQL 的二进制默认安装在 C:\Program Files\PostgreSQL\14\bin ,我们需要将其加入到系统Path中; pgAdmin 4 默认安装在 C:\Program Files\PostgreSQL\14\pgAdmin 4\bin\pgAdmin4.exe ,这个只需建立快捷方式双击使用。

建立和配置数据目录

下面的 数据目录路径 、 数据库名称 、 数据库用户名 等 请按自己的情况修改。

打开 powershell 建立数据目录:

initdb -D D:/postgresql_data/test

启动 pgsql :

pg_ctl -D D:\postgresql_data\test\ -l D:\postgresql_data\logfile start

重启 pgsql :

pg_ctl -D D:\postgresql_data\test\ -l D:\postgresql_data\logfile restart

停止 pgsql :

pg_ctl -D D:\postgresql_data\test\ -l D:\postgresql_data\logfile stop

查看帮助:

pg_ctl --help

如果启动成功那么服务默认会监听在 5432 端口,日志文件在 D:\postgresql_data\logfile ,但是 pgAdmin 无法连接。检查日志可以发现没有 postgres 用户,也没有要连接的数据库。

建立 test 数据库:

createdb test

创建 postgres 用户:

createuser -s -r postgres

编辑 pg_hba.conf ,添加一行:

local   test    postgres        scram-sha-256

由于我们是本地测试使用,所以这样添加即可。

创建系统服务

使用 pgAdmin 连接成功后,证明我们的配置是正常的,就可以建立系统服务:

pg_ctl register -N "pgsql-test"  -D  D:\postgresql_data\test\ -l D:\postgresql_data\logfile

如果要取消注册:

pg_ctl unregister -N "pgsql-test"

注册成功后就可以在方便地系统服务中启动和停止了。

by SDUST weilinfox