CentOS7安装PostgreSQL12
前言
不少环境仍停在 CentOS 7,需要继续装 PostgreSQL 12。
官方 EL-7 主源已下线,只改归档源也常装不上:系统 yum 失效、旧 pgdg 残留,或国外站点访问不了。
本文先修复系统源,再改用国内镜像安装,并补充改密、业务账号与客户端连接。
不涉及系统升级,也不展开更高版本 PostgreSQL 的迁移。
安装
下文以 CentOS 7(x86_64)安装 PostgreSQL 12.22 为例。
可先确认系统版本:
1 | cat /etc/os-release |
CentOS 7与PostgreSQL 12均已 EOL。
官方主源对EL-7已返回410 Gone;仅写归档源也不一定装得上——常见拦路虎是:系统 yum 源失效、旧pgdg仓库仍启用、GPG 密钥不对,或访问不了国外归档站。
下文按「先修系统源 → 换国内镜像 → 再装 PG」处理。
修复系统源
CentOS 7 官方镜像已停服,不修系统源时,装任何软件都可能失败。
可先备份并切到阿里云 centos-vault:
1 | sudo mkdir -p /etc/yum.repos.d/backup |
清理旧源
若以前装过官方 repo,旧配置会继续指向已失效地址。
先移走:
1 | sudo mv /etc/yum.repos.d/pgdg*.repo /etc/yum.repos.d/backup/ 2>/dev/null || true |
配置 PG 源
国内优先用阿里云镜像(仍保留 rhel-7 的 12 包),并导入 RHEL7 专用 GPG 密钥:
1 | sudo rpm --import https://yum.postgresql.org/keys/PGDG-RPM-GPG-KEY-RHEL7 |
若阿里云也访问异常,可把上面两个 baseurl 换成官方归档源:
1 | https://yum-archive.postgresql.org/12/redhat/rhel-7-x86_64 |
安装服务
安装客户端与服务端:
1 | sudo yum install -y postgresql12 postgresql12-server |
若 yum 仍失败,可改为直接装 RPM(版本号按镜像站实际文件调整):
1 | cd /tmp |
初始化启动
初始化数据目录:
1 | sudo /usr/pgsql-12/bin/postgresql-12-setup initdb |
启动服务并设置开机自启:
1 | sudo systemctl start postgresql-12 |
默认数据目录一般为:/var/lib/pgsql/12/data
配置
修改超级用户密码
安装后会创建 Linux 用户 postgres,以及同名超级用户与系统库,相当于 MySQL 里的系统库角色。
建议在改 pg_hba.conf 之前先设好密码:此时仍可用本机身份切换进入。
- 切换到
postgres用户:
1 | su postgres |
- 进入
psql:
1 | psql |
- 修改密码:
1 | ALTER USER postgres WITH PASSWORD 'NewPassword'; |
改完后可用 \q 退出。
之后若本机已改为 md5,再用超级用户登录请走:
1 | psql -h 127.0.0.1 -p 5432 -U postgres -d postgres |
远程与认证
- 开放端口:
1 | sudo firewall-cmd --add-port=5432/tcp --permanent |
- 修改监听地址。
编辑/var/lib/pgsql/12/data/postgresql.conf,将监听改为全网卡:
1 | vi /var/lib/pgsql/12/data/postgresql.conf |
在配置中加入或改成:
1 | listen_addresses='*' |
- 修改认证方式。
默认pg_hba.conf里,本机127.0.0.1/::1常是ident:要求 Linux 用户名与数据库用户名一致。
用业务用户langchain_user登录时就会报Ident authentication failed。
规则按从上到下匹配,只在文件末尾追加一行往往救不了本机连接。
编辑配置:
1 | vi /var/lib/pgsql/12/data/pg_hba.conf |
把本机与远程相关行改成密码认证(md5),例如:
1 | # TYPE DATABASE USER ADDRESS METHOD |
- 重启服务使配置生效:
1 | sudo systemctl restart postgresql-12 |
业务库与用户
先以超级用户进入 psql,再创建业务库与业务用户。
建库
创建业务库,并做基本切换检查:
1 | CREATE DATABASE langchain_db; |
建用户与授权
创建业务用户并授予库级权限:
1 | CREATE USER langchain_user WITH PASSWORD 'abcd1234'; |
切到目标库后,再补 schema / 表 / 序列权限,否则可能连得上却读写不了:
1 | \c langchain_db |
需要回收库级权限时再用:
1 | REVOKE ALL PRIVILEGES ON DATABASE langchain_db FROM langchain_user; |
常见权限码:
SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES、TRIGGER、CREATE、CONNECT、TEMPORARY、EXECUTE、USAGE
连接工具
业务用户与认证配好后,可用命令行或图形客户端连库。
连接参数
统一参数如下(按实际主机改 IP):
1 | Host: 127.0.0.1 |
连接串写法:
1 | postgresql://langchain_user:abcd1234@127.0.0.1:5432/langchain_db |
或:
1 | host=127.0.0.1 port=5432 dbname=langchain_db user=langchain_user password=abcd1234 |
psql
安装服务端时一般已带上客户端,适合本机验证与排错:
1 | psql -h 127.0.0.1 -p 5432 -U langchain_user -d langchain_db |
按提示输入密码。
若报 Ident authentication failed,回到「远程与认证」改 pg_hba.conf 后重试。
连上后可用 \conninfo 查看当前会话。
图形客户端
日常管理可用这些工具,填入同一套参数即可:
DBeaver:免费跨平台,兼容性较好,推荐优先使用pgAdmin 4:官方图形客户端,功能完整Navicat/DataGrip:商业工具,需注意版本是否支持 PostgreSQL 12
Navicat 注意
旧版 Navicat 连 PostgreSQL 12 时,打开对象树或表结构可能报:
1 | ERROR: column c.relhasoids does not exist |
原因是 relhasoids 在 PostgreSQL 12 已从系统表移除,旧客户端仍会查询该字段。
这通常不是库装坏了,而是客户端版本过旧。
建议使用 Navicat 16 及以上,或改用 DBeaver / pgAdmin 4 / psql。
常用操作
库表速查
在 psql 中常用:
1 | CREATE DATABASE langchain_db; |
退出 psql 用 \q。
主键自增
serial 类型
用 serial 实现自增;DROP 表时关联序列一般会一并删除:
1 | CREATE TABLE tuser01( |
自增序列
先创建序列:
1 | CREATE SEQUENCE seq_user_id START 1; |
再建表并引用序列:
1 | CREATE TABLE tuser02 ( |
若表已存在,需要补自增字段:
1 | ALTER TABLE tuser02 ADD COLUMN id int8 NOT NULL DEFAULT nextval('seq_user_id'); |
或只更新已有字段的默认值:
1 | ALTER TABLE tuser02 ALTER COLUMN id SET DEFAULT nextval('seq_user_id'); |