news 2026/10/22 16:32:35

CentOS 7.9上安装PostgreSQL 9.6的完整指南与避坑记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CentOS 7.9上安装PostgreSQL 9.6的完整指南与避坑记录

最近接手一台老服务器的部署任务,系统是 CentOS 7.9,业务方点名要装 PostgreSQL 9.6。说实话第一反应是“这版本都停维护了还装它干嘛”,但等看到项目背景就明白了:一套跑了很多年的业务系统,存储过程、SQL 写法、甚至客户端驱动全都跟着 9.6 的行为走,升到 10、11 那些版本,轻则性能下降,重则直接跑不起来。在这种场景下,老老实实把 9.6 装好、调稳,就是最务实的方案。

这篇内容就围绕 CentOS 7.9 上安装 PostgreSQL 9.6 的完整过程展开,从 YUM 源选择、初始化数据目录、systemd 管理,到连接配置、参数调优、常见坑排查,全部按实际操作的顺序来讲。适合正在维护老项目、做系统迁移、或者因为特殊兼容性要求必须装旧版数据库的朋友参考。

1. 为什么是 CentOS 7.9 配 PostgreSQL 9.6

1.1 这套组合还活着的现实原因

按时间线看,PostgreSQL 9.6 发布于 2016 年,CentOS 7.9 是 RHEL 7 系的最终版本,两者放到一起显得“老上加老”。但现实里这套组合其实不少见,尤其是企业内部系统。原因不外乎几个:第一,应用层代码深度依赖 9.6 的查询计划行为,比如某些子查询提升、窗口函数执行方式,升级大版本后 EXPLAIN 结果变了,SQL 就走歪了;第二,历史数据是直接用 9.6 的物理文件备份的,跨大版本恢复需要额外走 dump/restore 流程,时间长、风险高;第三,项目组根本没预算做回归测试,能不动就不动。

很多人不理解“新版更好为什么不用”,但数据库不是普通软件,换版本等于换心脏,不是一句“兼容”就能解决的。所以遇到这种需求,我的态度很明确:不劝人升级,先把当前版本装好、用稳,这是对存量系统最负责的做法。

1.2 版本兼容性盘点

CentOS 7.9 的 glibc 是 2.17,PostgreSQL 9.6 官方发布的二进制包就是针对这个平台编译的,兼容性没问题。RHEL 7 系和 CentOS 7 可以直接用同一个 RPM 仓库源,这是最省事的地方。

需要特别注意一点:PostgreSQL 9.6 官方支持已经在 2021 年结束了,这意味着没有安全补丁更新。如果你的场景是面向公网的,要慎重;如果只是内网系统,且网络隔离做得比较到位,那么继续使用是很多团队的现实选择。另外,9.6 的小版本 EOL 后,不要指望 yum update 帮你修 bug,数据库本身的 bug 只能通过业务层面规避。

1.3 安装前必须确认的三件事

动手装之前,先花三分钟检查一下环境,能省掉后面很多麻烦。

第一,确认系统版本。执行cat /etc/redhat-release,必须是 CentOS Linux release 7.9.x 这种输出,别拿 8、9 的机器硬套 7 的源。

第二,确认是否有历史数据目录。如果这台机器之前装过 PostgreSQL,数据默认在/var/lib/pgsql下面,新装前一定要看清楚里面有没有旧数据,否则初始化数据目录时可能直接报错或者覆盖式失败。

第三,确认 5432 端口没被占用。ss -lntp | grep 5432看一眼,如果有进程监听,装好后启动会起不来,排查起来反而费劲。

2. 安装源的选择与系统环境准备

2.1 系统自带源里的 PG 版本为什么不行

CentOS 7 自带的软件源里有一个postgresql包,但它是 9.2 版本。很多新手会直接yum install postgresql-server,装完之后发现版本不对,一脸懵。原因很简单:操作系统发行版的默认源只负责提供“能用”的基础版本,不会跟着 PostgreSQL 官方新版本走。9.2 这个版本对你的项目来说基本没有意义,因为绝大多数依赖 9.6 的程序连连上去都会报协议或功能不兼容。

要装指定的 9.6,必须引入 PostgreSQL 官方维护的 YUM 源,也就是 PGDG(PostgreSQL Global Development Group)源。这个源专门按大版本分类维护 RPM 包,9.6 就在独立的仓库里。

2.2 官方 YUM 仓库的引入与验证

PGDG 仓库的引入方式,最常见的是先下载pgdg-redhat-repo这个 RPM 包安装,它会帮我们把.repo文件放到/etc/yum.repos.d/,同时导入 GPG 密钥。命令如下:

sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

如果下载过程比较慢,或者 wget 404 了,可以换用 rpm 本地安装的方式:

wget https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo rpm -ivh pgdg-redhat-repo-latest.noarch.rpm

安装完成后验证一下仓库状态:

yum repolist | grep pgdg

正常情况下会看到pgdg96这个仓库。如果 GPG 密钥没自动导入,后面 yum 安装时会报“GPG key retrieval failed”之类的错误,那就要手动导入:

sudo rpm --import https://download.postgresql.org/pub/repos/yum/RPM-GPG-KEY-PGDG

这里有个细节:PGDG 的仓库配置有时候会把pgdg-common、pgdg96等好几个仓库一起启用。如果只想用 9.6,可以在/etc/yum.repos.d/pgdg-redhat-all.repo里把其他仓库的enabled=1改成enabled=0,只保留pgdg96。这样做的好处是避免后续误装其他版本的 PostgreSQL 扩展包。

2.3 依赖环境与 yum 方式安装

仓库就绪后,安装命令其实就一行:

sudo yum install -y postgresql96-server postgresql96

注意包名,是postgresql96-server,不是postgresql-server,这个 96 后缀是 PGDG 源的命名规则。如果你只装 server,它会自动把postgresql96、postgresql96-libs这些核心依赖带上来,不需要手动处理依赖关系。

安装完成后,检查一下关键文件的位置:

rpm -qa | grep postgresql ls /usr/pgsql-9.6/bin/

/usr/pgsql-9.6/bin下面就是psql、pg_ctl、initdb、pg_dump等工具。这个路径不默认在 PATH 里,建议临时加一下,或者直接写全路径。我个人习惯在/etc/profile.d/pgsql.sh里写一行:

export PATH=$PATH:/usr/pgsql-9.6/bin

然后source /etc/profile.d/pgsql.sh,这样当前会话就能直接敲psql了。但要注意,systemd 启动服务时不会加载这个 PATH,所以服务配置里还是用绝对路径,这个后面会提到。

3. 初始化数据目录与服务启动

3.1 数据目录规划与权限

PGDG 的 RPM 包装完后,会自动创建操作系统用户postgres,默认家目录在/var/lib/pgsql,数据目录默认放在/var/lib/pgsql/9.6/data。如果你只想快速跑起来,用默认路径就行,但我的建议是提前想好数据盘。

数据目录最好别跟根分区放在一起,否则磁盘写满后系统直接卡死。常见的做法是把数据盘挂到独立的目录,比如/data/pgsql/data:

sudo mkdir -p /data/pgsql/data sudo chown postgres:postgres /data/pgsql/data sudo chmod 700 /data/pgsql/data

权限必须设成 700,属主必须是 postgres,这是 PostgreSQL 的硬性检查。它之所以这么严格,是为了防止其他系统用户直接读取数据文件。很多启动失败或者“could not open file”的报错,就是权限不对导致的。

如果是全新安装且数据目录是由 RPM 自动创建的,那就不用手动改权限,直接进入下一步。

3.2 initdb 初始化参数详解

初始化数据库是安装过程中最关键的一步,命令是:

sudo -u postgres /usr/pgsql-9.6/bin/initdb -D /var/lib/pgsql/9.6/data --encoding=UTF8 --locale=en_US.UTF-8

解释一下几个参数的含义:

  • -D指定数据目录,也就是pgdata。
  • --encoding指定数据库默认编码。中文业务系统基本无脑 UTF8,否则后面建库时字符集不一致会出乱码。
  • --locale指定区域设置。en_US.UTF-8是通用选择,如果选 C 或者 POSIX,排序规则会简单一些,但对中文排名、字符串处理不友好。
  • 默认超级用户名是 postgres,也就是执行 initdb 时所用的系统用户;如果不想要 postgres 这个名字,可以加-U指定。
  • -W会提示设置超级用户密码。如果是内网可信环境,可以初始化完再改;生产环境建议加上。

如果想通过服务脚本初始化,也可以用:

sudo /usr/pgsql-9.6/bin/postgresql96-setup initdb

这个脚本本质上是读取/etc/sysconfig/pgsql/postgresql-9.6里的环境变量再调用 initdb,适合不想手动敲参数的情况。但我个人更喜欢直接 initdb,参数看得清楚,出了错也容易排查。

initdb 执行完,输出末尾会有一句 "Success. You can now start the database server",说明初始化成功。这时候看一下.bash_profile或者环境变量,别搞混了PGSYSCONFDIR之类的配置。

3.3 systemd 管理、开机自启与状态检查

启动前先明确服务名:PGDG 的 RPM 包注册的服务叫postgresql-9.6,不是通用的postgresql。启动命令如下:

sudo systemctl start postgresql-9.6 sudo systemctl enable postgresql-9.6 sudo systemctl status postgresql-9.6

第一次启动如果失败,大概率是没初始化数据目录,或者目录权限不对。可以先看日志:

journalctl -u postgresql-9.6 -n 50

正常启动后,验证一下进程和连接:

ps -ef | grep postgres sudo -u postgres /usr/pgsql-9.6/bin/psql -c "select version();"

能看到PostgreSQL 9.6.x on x86_64-pc-linux-gnu就说明装对了。这里提醒一句:psql执行时以 postgres 用户身份连本机,走的是 Unix Socket,不需要密码,因为默认的pg_hba.conf里 local 连接方式是peer认证。

4. 核心配置修改和参数调优

4.1 postgresql.conf 关键参数

初始化完成后,主要配置文件在/var/lib/pgsql/9.6/data/postgresql.conf。这个文件默认是海量注释模板,我们需要根据机器配置做调整。先来看几个最基础的:

listen_addresses = 'localhost' port = 5432 max_connections = 100

listen_addresses默认只监听本机地址。如果应用和数据库不在同一台机器,必须改成应用服务器的 IP,或者直接'*'。但'*'意味着对所有网卡监听,如果机器有公网地址,风险很高。我的习惯是指定内网网段对应的 IP,比如'192.168.1.10'。

内存参数方面,9.6 是单进程多连接模型,shared_buffers是最核心的内存参数,默认只有 128MB。通常建议设为物理内存的 25% 左右,但不要超过 8GB。effective_cache_size可以设到物理内存的 50%~75%,这个值是给查询计划器参考的,不是真实分配的。work_mem是单个排序/哈希操作可用内存,不能盲目调大,因为每个连接都可能分配多个 work_mem,总量很容易把内存打爆。

举个 2GB 内存服务器的初始配置示例:

shared_buffers = 256MB effective_cache_size = 1GB work_mem = 4MB maintenance_work_mem = 64MB wal_buffers = 8MB checkpoint_completion_target = 0.7 random_page_cost = 1.1 effective_io_concurrency = 2

maintenance_work_mem是建索引、VACUUM 这类维护操作用的,可以比 work_mem 大很多,因为同一时间这类操作不多。random_page_cost在机械硬盘上默认 4.0,如果是 SSD,建议改成 1.1~1.3,优化器对索引扫描的评估会更准确。

4.2 pg_hba.conf 连接访问控制

连接认证配置在/var/lib/pgsql/9.6/data/pg_hba.conf。新初始化的文件默认比较简单,本地 Unix Socket 用peer,IPv4/IPv6 本地回环用md5。如果要允许远程连接,在文件末尾加一行:

host all all 192.168.1.0/24 md5

这行的意思是:允许来自192.168.1.0/24网段的客户端,通过 TCP 连接任意数据库,认证方式为 md5。如果你只想放行某一个应用服务器 IP,就把网段写成具体的/32:

host all all 192.168.1.50/32 md5

md5是 9.6 时代最常见的密码认证方式,但对新装的系统,我更推荐scram-sha-256,9.6 版本已经支持了,只要客户端驱动兼容就行。设置方式是在postgresql.conf里把password_encryption = scram-sha-256,然后pg_hba.conf对应行写scram-sha-256。

改完配置后,不需要重启服务,执行 reload 即可生效:

sudo systemctl reload postgresql-9.6

4.3 防火墙与 SELinux 处理

CentOS 7 默认开启了 firewalld,即使 PostgreSQL 监听了0.0.0.0:5432,外部也连不进来。需要放行端口:

sudo firewall-cmd --permanent --add-port=5432/tcp sudo firewall-cmd --reload

也可以按服务名放行,但 CentOS 7 的 firewalld 里不一定有 postgresql 服务定义,直接操作端口最稳妥。

SELinux 是另一个容易踩的坑。默认 enforcing 模式下,PostgreSQL 用自己的postgresql_port_t端口标签没问题,但如果你改了监听端口,比如从 5432 改成 5433,SELinux 就会拦截。解决办法是给新端口打标签:

sudo semanage port -a -t postgresql_port_t -p tcp 5432

如果系统里没有semanage命令,先装工具包:

sudo yum install -y policycoreutils-python

检查 SELinux 状态用getenforce。如果输出Enforcing,那上面这个操作就是必须的。我不建议为了省事直接setenforce 0,因为重启后又会恢复原状,治标不治本。

4.4 初版内存参数建议

参数调优没有万能公式,但可以给一个按内存规模划分的起步配置参考:

物理内存shared_bufferseffective_cache_sizework_memmaintenance_work_mem
1GB128MB512MB4MB64MB
2GB256MB1GB4MB64MB
4GB1GB2GB8MB128MB
8GB2GB4GB16MB256MB

这套配置够大多数场景起步,后续应该用pgbench或者业务压测再去调,不要死磕参数。有个常见误区是把 work_mem 调得很大,觉得这样排序快,但实际上每个连接都能同时开多个 work_mem,十个连接就可能吃掉几个 GB。最终判断标准是看系统实际内存压力,不是看单值大小。

5. 常用运维操作与备份方案

5.1 数据库、用户和权限管理

装好数据库只是开始,日常使用中经常会需要建库建用户。建议按“应用用户”和“管理用户”分离的原则来建,不要让应用直连超级用户 postgres。创建用户和库的命令:

sudo -u postgres /usr/pgsql-9.6/bin/psql -c "CREATE USER app_user WITH PASSWORD 'StrongPass123';" sudo -u postgres /usr/pgsql-9.6/bin/psql -c "CREATE DATABASE app_db OWNER app_user ENCODING 'UTF8';"

先建用户再建库,并且把库的 OWNER 指定给该用户,这样 app_user 在这个库里有完全权限,但不会跨库乱搞。如果想限制连接数:

ALTER ROLE app_user CONNECTION LIMIT 20;

查看当前连接:

sudo -u postgres /usr/pgsql-9.6/bin/psql -c "SELECT datname, usename, client_addr, state FROM pg_stat_activity;"

这个命令在处理“连接数满了”的问题时特别有用,能一眼看出哪个库占用了多少连接。

5.2 逻辑备份与恢复实操

PostgreSQL 9.6 的备份最常用的是逻辑备份工具 pg_dump。建议使用自定义压缩格式,体积小、恢复灵活:

sudo -u postgres /usr/pgsql-9.6/bin/pg_dump -h 127.0.0.1 -U postgres -d app_db -F c -f /backup/app_db_$(date +%Y%m%d).dump

-F c是自定义格式,恢复时用 pg_restore:

sudo -u postgres /usr/pgsql-9.6/bin/pg_restore -d app_db -U postgres --clean --if-exists /backup/app_db_20251201.dump

--clean --if-exists会在恢复前尝试删除已存在的对象,适合定期恢复到测试环境。如果只备份某个表,pg_dump 也可以加-t 表名。

这里要特别提醒:9.6 的 pg_dump 备份文件,是不能直接用新版本 pg_restore 恢复到 12、13、14 这些新库的。版本升级的正确姿势是:用新版本的 pg_dump 从旧库导出,再用同版本 psql 恢复,或者走pg_upgrade。跨版本直接 restore 会报“unsupported version”之类的错。

生产环境建议写一个简单的定时任务。以下脚本基本够用:

#!/bin/bash BACKUP_DIR=/backup DB_NAME=app_db DB_USER=postgres export PGPASSWORD='yourpassword' /usr/pgsql-9.6/bin/pg_dump -h 127.0.0.1 -U $DB_USER -d $DB_NAME -F c -f $BACKUP_DIR/${DB_NAME}_$(date +%Y%m%d).dump find $BACKUP_DIR -type f -name "${DB_NAME}_*.dump" -mtime +7 -exec rm -f {} \;

放在 crontab 里每天凌晨执行即可。PGPASSWORD环境变量不推荐长期写在脚本里,更安全的方式是使用~/.pgpass,但中小型内部系统用脚本方式也很普遍,自己权衡。

5.3 查看日志和定位问题

PostgreSQL 默认日志配置不一定打开了。为了方便排查,建议在 postgresql.conf 里打开日志采集:

logging_collector = on log_directory = 'log' log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' log_statement = 'none' log_min_duration_statement = 1000

log_min_duration_statement = 1000表示把执行时间超过 1 秒的 SQL 记录下来,是排查慢查询的第一手资料。log_statement = 'none'避免把每个 SQL 都打出来,否则日志量太大,磁盘容易爆。

查看实时日志:

sudo tail -f /var/lib/pgsql/9.6/data/log/*.log

或者用 systemd 日志:

journalctl -u postgresql-9.6 -f

遇到连接失败、认证失败这类问题,日志里会有明确原因,比如FATAL: password authentication failed for user "xxx"或者FATAL: no pg_hba.conf entry for host ...,比瞎猜靠谱得多。

6. 常见问题排查实录

6.1 安装源 404 或 GPG 密钥失效

PGDG 的仓库地址偶尔调整,特别是老版本源,有时候官方会重新整理目录结构。遇到yum install报 404,或者下载 RPM 时报 GPG 密钥错误,不要慌。

先重新安装pgdg-redhat-repo-latest.noarch.rpm,看是否更新了仓库路径。如果网络不好,直接把.repo文件改成手动指向镜像,内容大概如下:

[pgdg96] name=PostgreSQL 9.6 for RHEL/CentOS 7 - x86_64 baseurl=https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64 enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG

保存到/etc/yum.repos.d/pgdg96.repo,然后yum makecache fast再装。密钥的问题,执行rpm --import https://download.postgresql.org/pub/repos/yum/RPM-GPG-KEY-PGDG就行。

6.2 服务启动失败或报数据目录权限错误

启动失败最典型的报错是:

could not change directory to "/var/lib/pgsql/9.6/data": Permission denied

原因几乎都是目录属主不对,或者权限不是 700。解决方法:

sudo chown -R postgres:postgres /var/lib/pgsql/9.6/data sudo chmod 700 /var/lib/pgsql/9.6/data

还有一种情况:数据目录是新建的,但忘了初始化,日志会提示data directory "/var/lib/pgsql/9.6/data" does not exist。这种就回到 3.2 节老老实实跑一遍 initdb,不要尝试用空目录直接启动。

6.3 psql 连接被拒绝

连接报could not connect to server: Connection refused时,按顺序排查:

第一步看服务是否在跑:

sudo systemctl status postgresql-9.6

第二步看端口监听:

sudo ss -lntp | grep 5432

如果只显示127.0.0.1:5432而不是0.0.0.0:5432或某个内网 IP,那就是 postgresql.conf 里的 listen_addresses 没改。改完记得重启,这个参数需要重启生效。

第三步看防火墙。能本地连、但远程连不上,多半是 firewalld 没放行,按 4.3 节处理。

6.4 包版本冲突 libpq

有时候机器上以前装过系统自带的postgresql-libs,再装postgresql96-libs会出现冲突,报错大概是“file xxx conflicts between attempted installs”。这属于 RPM 包层面的文件冲突。

解决思路是先把 PG 相关旧包卸载,再装 PGDG 版本。但卸载前要看依赖,确认系统上没有应用依赖postgresql-libs。如果只是 libpq 冲突,可以试试:

sudo yum swap postgresql-libs postgresql96-libs

这个命令会把旧 libs 替换成新 libs。如果 yum 不支持 swap 或者依赖关系过于复杂,干脆手动rpm -e postgresql-libs --nodeps,但 --nodeps 有一定风险,我只在测试机这么干。

6.5 字符集与中文乱码

乱码问题在 9.6 上经常和客户端编码有关。先确认数据库编码:

SHOW server_encoding; SHOW client_encoding;

如果 server 是 UTF8,client 却是 SQL_ASCII,中文一定乱。解决办法是连接前设置环境变量:

export PGCLIENTENCODING=UTF8

还有一个坑是 locale 选择不当。initdb 时如果选--locale=C,数据库能正常存中文,但 order by 排序时按字节排,中文语义不友好。所以初始化的时尽量用--locale=en_US.UTF-8,不要图省事选 C。

如果已经初始化完了才发现 locale 不对,改起来比较麻烦,最稳的是把数据导出来、重新 initdb、再导入。数据库刚上线时怎么折腾成本都低,跑了两三年再改就要命了,所以初始化这步一定要想清楚。

我个人在实际操作中最大的体会是:装 PostgreSQL 9.6 这类老版本,真正难的往往不是安装本身,而是很多细节都在“默认配置”里藏着坑。比如初始化时 locale 选错了、日志没开、pg_hba.conf 里认证方式和客户端驱动不匹配,这些问题当时看不出来,等跑上业务才逐渐冒头。所以务必要养成一个习惯:装完数据库后,先把日志打开、把默认端口改好、把 pg_hba.conf 的具体认证方式写清楚,这三件事做好,后面能少加一半的班。

另外,CentOS 7.9 现在已经进入生命周期末期,它和 PostgreSQL 9.6 都属于“维护模式”,组合在一起特别适合那些长期运行、不能停机的存量系统。如果你的项目还能选型,我建议新项目尽量上新版本,但如果确实被历史包袱锁住了,那 9.6 配 CentOS 7 这套方案,照着上面的步骤一步一步来,是完全可以稳稳跑起来的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/22 16:30:54

前端自学365天知识体系构建计划:从零基础到架构思维

很多人问我:前端自学到底要多久才能出师?我的回答通常会让人愣一下——三个月确实可以找到一份工作,但想让“前端”这两个字变成真正属于自己的知识体系,三百六十五天是最保守、也最不容易崩盘的时间线。这份365天前端知识体系构建…

作者头像 李华
网站建设 2026/10/22 16:29:49

贾谊理论与《阴符经》:机变平衡与智慧主权重构元典体系

开头:仅依赖玄学字面,读不懂《阴符经》也读不透贾谊 我第一次把贾谊的《治安策》和《黄帝阴符经》并列摊开时,旁边一位做思想史的朋友问我在做什么奇怪实验。也难怪,一个是汉初士人写给君王的政论长文,一个是道门秘传…

作者头像 李华
网站建设 2026/10/22 16:29:24

零基础AI漫剧智能量产:从剧本到成片的完整流程与避坑指南

1. 从零起步做AI漫剧量产,我踩过的坑和摸出的路“零基础 AI 漫剧智能量产创作营”这个标题,第一次看到的时候我愣了一下。漫剧这个词,放在两年前可能还没多少人提,但现在它已经成了短视频内容赛道里一个非常特殊的存在——介于漫画…

作者头像 李华
网站建设 2026/10/22 16:28:52

Java AI框架停更引发焦虑?从工程化视角拆解技术选型与迁移策略

1. 一个框架停更引发的技术选型焦虑前几天在技术群里看到有人转了一篇帖子,标题大意是某个Java生态的AI框架停止维护了,底下跟了一堆"Java已死""Java在AI时代彻底掉队"的评论。我当时的第一反应是:又来了。每隔几年就会有…

作者头像 李华
网站建设 2026/10/22 16:28:41

规格驱动开发落地指南:Spec-Kit 需求分析思维切换与工作流搭建

1. 需求分析阶段最容易被跳过的三种思维切换做规格驱动开发这些年,我见过太多团队把"需求分析"四个字当成流程里的一个过场——开个会、记几笔、丢给开发,然后到了编码阶段才发现到处都是坑。问题往往不出在工具上,而出在思维没有完…

作者头像 李华
网站建设 2026/10/22 16:27:43

9月开源项目盘点:AI落地、本地优先与Rust/Go重写

每个月最后一周,我会固定留出半天时间,把 GitHub 的 trending、star 增量、release 动态和 issue 活跃度整体过一次。9 月这趟翻下来,最大的感受是:能进筛选名单的项目越来越不像"玩具"了,大量工具直接长在了…

作者头像 李华