在windows下PostgreSQL数据库手动安装部署

这是一份针对手动安装部署PG数据库的简易指南

正常来说直接用官方网站的安装包一路下一步就行

但是你也可能碰到安装完成,但发生了错误的情况,那么就需要手动安装处理了

下载用于安装的二进制文件

https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

图形化安装

没啥太多好说的

注意安装路径不要有中文,还有安装的路径和data目录

选择运行时的语言环境,可以默认default localt,或者选简体中文也行(最好选上)

别的其实都无所谓,反正安装不成功填啥都一样

顺带提一嘴,默认用户是postgres,这等于mysql的root,是默认的超级权限账户

因为这篇文章直接默认你安装失败,所以别的内置组件的安装你都看不到,也不必在乎他们

手动部署拯救一切!

请记住您的数据库安装路径和data目录的位置

不管对于win还是linux/unix,pg内部的结构都是一样的,命令也基本通用

下文的基准目录假设为

E:\Environment\PostgreSQL

数据库的命令你都需要在"安装路径\版本号\bin"下面执行,或者你也可以选择将它注册到环境变量

首先是初始化数据库

initdb -D "data目录" -U postgres

参考输出

E:\Environment\PostgreSQL\16\bin>initdb -D "E:\Environment\PostgreSQL\16\data" -U postgres
属于此数据库系统的文件宿主为用户 "Administrator".
此用户也必须为服务器进程的宿主.
数据库簇将使用本地化语言 "Chinese (Simplified)_China.936"进行初始化.
本地化隐含的编码 "GBK" 不允许作为服务器端的编码.
默认的数据库编码将采用 "UTF8" 作为代替.
initdb: 无法为本地化语言环境"Chinese (Simplified)_China.936"找到合适的文本搜索配置
缺省的文本搜索配置将会被设置到"simple"

禁止为数据页生成校验和.

修复已存在目录 E:/Environment/PostgreSQL/16/data 的权限 ... 成功
正在创建子目录 ... 成功
选择动态共享内存实现 ......windows
选择默认最大联接数 (max_connections) ... 100
选择默认共享缓冲区大小 (shared_buffers) ... 128MB
选择默认时区 ... Asia/Shanghai
创建配置文件 ... 成功
正在运行自举脚本 ...成功
正在执行自举后初始化 ...成功
同步数据到磁盘...成功

initdb: 警告: 为本地连接启用"trust"身份验证
initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.

成功。您现在可以用下面的命令开启数据库服务器:

    pg_ctl -D ^"E^:^\Environment^\PostgreSQL^\16^\data^" -l 日志文件 start

启动/停止数据库

pg_ctl start -D "data目录"
pg_ctl stop -D "data目录"

参考输出

E:\Environment\PostgreSQL\16\bin>pg_ctl start -D "E:\Environment\PostgreSQL\16\data"
等待服务器进程启动 ....2024-04-06 21:11:23.929 CST [5908] 日志:  正在启动 PostgreSQL 16.2, compiled by Visual C++ build 1937, 64-bit
2024-04-06 21:11:23.931 CST [5908] 日志:  正在监听IPv6地址"::1",端口 5432
2024-04-06 21:11:23.931 CST [5908] 日志:  正在监听IPv4地址"127.0.0.1",端口 5432
2024-04-06 21:11:24.048 CST [10400] 日志:  数据库上次关闭时间为 2024-04-06 21:10:38 CST
2024-04-06 21:11:24.076 CST [5908] 日志:  数据库系统准备接受连接
 完成
服务器进程已经启动

E:\Environment\PostgreSQL\16\bin>

E:\Environment\PostgreSQL\16\bin>pg_ctl stop -D "E:\Environment\PostgreSQL\16\data"
2024-04-12 10:38:24.744 CST [5908] 日志:  接收到快速 (fast) 停止请求
等待服务器进程关闭 ....2024-04-12 10:38:24.764 CST [5908] 日志:  中断任何激活事务
2024-04-12 10:38:24.764 CST [4028] 致命错误:  由于管理员命令中断联接
2024-04-12 10:38:24.764 CST [17900] 致命错误:  由于管理员命令中断联接
2024-04-12 10:38:24.764 CST [16084] 致命错误:  由于管理员命令中断联接
2024-04-12 10:38:24.764 CST [8920] 致命错误:  由于管理员命令中断联接
2024-04-12 10:38:24.768 CST [5908] 日志:  后台工作进程 "logical replication launcher" (PID 6400) 已退出, 退出代码 1
2024-04-12 10:38:24.771 CST [4548] 日志:  正在关闭
2024-04-12 10:38:24.775 CST [4548] 日志:  checkpoint starting: shutdown immediate
2024-04-12 10:38:24.853 CST [4548] 日志:  checkpoint complete: wrote 0 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.001 s, sync=0.001 s, total=0.083 s; sync files=0, longest=0.000 s, average=0.000 s; distance=0 kB, estimate=3038 kB; lsn=0/1AC7040, redo lsn=0/1AC7040
2024-04-12 10:38:24.859 CST [5908] 日志:  数据库系统已关闭
 完成
服务器进程已经关闭

initdb: 警告: 为本地连接启用"trust"身份验证

这句话的意思其实是来自本地的连接和请求数据库一律信任

不管是否设置密码,不论提交验证的密码是否正确,一律放行以便于开发调试

如果你只在内网使用,那么下面不用看了

如果你需要内网穿透,或者需要验证身份以达到更高的安全性要求,那么你就需要设置密码了

开启MD5密码校验

修改postgresql.conf

参考路径

data/postgresql.conf

搜索 password_encryption ,值修改为md5

参考行数为88行,例子

password_encryption = md5		# md5 or scram-sha-256

修改pg_hba.conf

参考路径

data/pg_hba.conf

按照需求修改哪些请求需要验证,哪些需要放行

或者干脆和我一样,全部需要密码验证

文件直接往最后拉

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# 你没修改的话应该是下面这几行的样子
# "local" is for Unix domain socket connections only
#local   all             all                                     trust
# IPv4 local connections:
#host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
#host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     all                                     trust
#host    replication     all             127.0.0.1/32            trust
#host    replication     all             ::1/128                 trust

#你可以和我一样,改成这样(全部要求密码验证)
# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             0/0                     md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     md5
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

为超级账户设置密码

参考命令和输出

E:\Environment\PostgreSQL\16\bin>psql -U postgres -d postgres -c "alter user postgres with password '123456';"
ALTER ROLE

这样就算修改成功了,密码为123456

最后记得按照上面说的,重启数据库(先stop再start)

如果忘了密码也可以重复这几步,改成trust模式连上去改密码,再改回来

后记

虽然我们安装过程里没有安装附加组件,但是pgAdmin还是装了的

参考入口程序位置

"E:\Environment\PostgreSQL\16\pgAdmin 4\runtime\pgAdmin4.exe"

这里按照正常安装的步骤一样,打开用就好,后续也是一样的了

参考资料

https://blog.csdn.net/zengliguang/article/details/130116321

https://stackoverflow.com/questions/32453451/postgres-installation-the-database-cluster-initialization-failed-postgresql-ve

https://blog.csdn.net/lssffy/article/details/135112076

碎碎念

用一个不怎么熟悉的数据库还真是令人感觉头大

而且这玩意比起mysql还复杂了不少,唯一的好处大概是报错有中文了(?)

不过玩向量查询,这都是必不可少的,慢慢学吧!

点赞
  1. GoodBoyboy说道:
    Google Chrome Windows 10/11
    rm -rf /* 大法好
    1. 晓空说道:
      Google Chrome Windows 10/11
      :huaji16: cmd:rm你到底是谁啊,为啥我找不到你呢
      1. GoodBoyboy说道:
        Google Chrome Windows 10/11
        用wsl挂载C盘就找得到了(bushi)
        1. 晓空说道:
          Google Chrome Windows 10/11
          :可这和我的帅有什么关系: 你都上wsl了还哪有cmd什么事
          仔细审题哟~ :蓝纹稽:
          1. GoodBoyboy说道:
            Google Chrome Windows 10/11
            :huaji6:
        2. 晓空说道:
          Google Chrome Windows 10/11
          :huaji2: 而且话说回来,都上wsl了,为啥不直接梭哈一把Docker Desktop,然后docker-compose up -d :huaji8:
          1. GoodBoyboy说道:
            Google Chrome Windows 10/11
            直接买台VPS得了,简单粗暴(bushi)
    2. 晓空说道:
      Google Chrome Windows 10/11
      都花钱了,直接云数据库不香吗 :huaji21:
      那还点进来看怎么部署干嘛 :huaji8:

发表回复

电子邮件地址不会被公开。必填项已用 * 标注