这是一份针对手动安装部署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://blog.csdn.net/lssffy/article/details/135112076
碎碎念
用一个不怎么熟悉的数据库还真是令人感觉头大
而且这玩意比起mysql还复杂了不少,唯一的好处大概是报错有中文了(?)
不过玩向量查询,这都是必不可少的,慢慢学吧!
仔细审题哟~
那还点进来看怎么部署干嘛