☰
PostgreSQL 18beta2源码编译安装与新特性验证指南
2026/10/11 11:21:47 网站建设 项目流程

简介:PostgreSQL 18 beta2.tar.gz 是一份 PostgreSQL 18 第二个测试版源码包,适用于 Linux 平台,面向需要编译安装最新版本、评估新特性或研究数据库内核的开发者、DBA 和技术爱好者。压缩包内共包含 2000 个文件,以 1069 个 C 语言源文件和 885 个头文件为主体,另附少量 SQL 脚本、Shell 脚本、Markdown/TXT 文档和 Python/CSS 文件,整体大小约 27.79MB;从文件结构看,这是一套完整的源码树,而非预编译二进制包。目前已有 55 人学习/下载这一资源。借助这份源码,读者可以自行完成系统编译与部署,并深入研读存储管理、预写日志、查询规划、多版本并发控制等核心模块的实现细节;随包提供的构建脚本、SQL 样例与文档则为功能验证、二次开发和问题排查提供了基础。对于有意参与开源数据库测试或跟踪 PostgreSQL 演进方向的用户,这是一份紧凑而有价值的参考素材。

1. 从文件名说起:这个 postgresql-18beta2.tar.gz 到底适合谁

看到postgresql-18beta2.tar.gz这个文件名,先别急着解压。tar.gz 后缀意味着它不是一键安装包,而是一份需要自己 configure、make、make install 才能跑起来的 PostgreSQL 源码;beta2 则说明它是 18 大版本的第二个测试版,比 beta1 更接近正式版,但离生产环境还差着一次正式发布。这个包解决的是“提前适配”的问题——让中间件、驱动、扩展和运维脚本先跑到 18 上找问题,等正式版出来时你不至于手忙脚乱。它适合三类人:要做新特性评估的 DBA、给连接池和扩展做兼容性适配的开发者、以及需要在内网离线环境里准备安装包的运维工程师。只想快速装个库跑业务的人,现在并不适合碰它。

2. 为什么值得装 18beta2:新特性盘点与版本选型逻辑

2.1 从 17 到 18:这代测试版最值得关注的四个变化

PostgreSQL 18 的 beta2 相比 17 系列,我最关注的是四个会影响日常开发的变化。

第一是UUIDv7。17 里生成 UUID 主要靠gen_random_uuid(),那是完全随机的 UUIDv4,写入索引时叶子页到处跳。18 引入了uuidv7(),生成的是基于时间排序的 UUID,时间戳在前、随机数在后。对分布式系统和高并发写入场景来说,这能让索引写入的局部性显著变好,冷热数据也更集中。它的语法很简单,但背后解决的是主键索引碎片化这个老问题。

第二是SQL/JSON 构造函数。18 开始按 SQL:2023 标准把JSON()、JSON_ARRAY()这类构造语法内置进来。以前要从行数据构造 JSON,得写json_build_object一层套一层;现在可以直接用标准语法从行构造文档。对团队里习惯了 MySQL 或 SQL Server JSON 写法的人来说,迁移成本会低不少。

第三是增量排序的增强。17 已经有 Incremental Sort,18 这版把它的内存使用做了进一步优化。对ORDER BY a, b LIMIT n这种带前缀排序键的查询,内存占用更可控,走磁盘临时文件的概率更低。报表类SQL 里这种模式很常见,效果直接反映在慢查询日志上。

第四是逻辑复制和 WAL 层面的细节补齐。发布端、订阅端的易用性改了一轮,管理逻辑复制拓补时能少踩几个坑。另外异步 I/O 开始进入可配置阶段,但默认不启用,普通用户不用管。

需要提醒的是,beta2 不是功能冻结版本,但 API 形状已经比 beta1 稳定很多。选 beta2 而不是 beta1 的原因就在这里:beta1 往往刚合并完大功能,默认配置和 SQL 行为还在抖动,beta2 会修掉一批崩溃和编译问题。既然标题里给的是 beta2,说明官方已经消化了一轮社区反馈,这时候动手,返工概率小得多。

2.2 先回答热词里的问题:postgresql 下载哪个版本才不后悔

网上搜索“postgresql 下载哪个版本”的人,大多是被各种发行渠道搞晕了。这个问题放在 18beta2 上尤其现实:正式环境永远选最新的稳定版 17.x,或者等 18 正式版发布后再迁移;只有开发适配才选 beta。因为 beta 没有任何升级承诺——你不能把 17 的二进制数据目录直接拿到 18beta2 上启动,甚至 beta2 到 beta3 之间都可能要求重新 initdb。这不是吓唬人,是 PostgreSQL 测试版一直以来的规矩。

那谁应该现在就装?三类人:一是写扩展和外部组件的开发者,你的代码需要提前适配新内核;二是做技术选型 POC 的团队,想验证 UUIDv7、SQL/JSON 能不能解决手上的问题;三是维护 CI 矩阵的人,需要让测试流水线覆盖还在开发中的版本。反过来,如果你的库里有不能间断的业务数据,或者你刚接触 PostgreSQL 不久,先别碰 beta,老老实实装 17 稳定版。

下载之前还应该做一件事:打开官方发布页面,看 beta2 的发布说明和已知问题列表。PostgreSQL 每个测试版的说明里会明确写出“这个版本可能存在的风险”和“相比 beta1 修复了哪些崩溃”。把这些读完再动手,能替你省下不少排查时间。

2.3 源码包、Docker、发行版仓库与便携版:四选一的判断表

拿到“postgresql-18beta2.tar.gz”之后,有经验的工程师会先在四条安装路径里做选择,而不是闷头编译。

安装方式版本新鲜度离线友好度上手门槛是否适合 18beta2
源码 tar.gz 编译官方发布当天可获取高,一个包带走所有源码需要 gcc、make 等工具链最合适,可自定义编译参数
Docker 官方镜像镜像更新略滞后低,依赖 registry 拉取低,docker run 即可适合快速试玩,不适合深度定制
发行版仓库 apt/yum通常滞后一到两个大版本中,依赖内网源配置最低几乎不可能有 18beta2
便携版/绿色版一般跟随稳定版构建高低基本不会有 beta 便携版

我一般会这样判断:只是随手测一个新函数,Docker 最快,拉下来就能跑;要长期跟踪 18 的开发进度,或者要在内网离线环境里做适配,源码包最可靠——这也是我推荐这篇笔记里走源码编译的原因。发行版仓库和便携版对 beta 场景基本可以不用考虑,它们存在的意义是稳定和省事,而不是尝鲜。

3. 从 tar.gz 到能连库:Ubuntu 源码编译 PostgreSQL 18 的完整步骤

3.1 下载与完整性校验:先把官方包确认清楚再动手

拿到postgresql-18beta2.tar.gz的第一步是下载,但比下载更重要的是校验。源码包在传输过程中损坏、或者被第三方渠道悄悄改过,都会让后续编译行为变得不可捉摸。我一般从 PostgreSQL 官方 FTP 下载源码包和对应的 SHA256 校验文件,然后放在同一个目录里核对:

mkdir -p ~/pgbuild && cd ~/pgbuild # 从官方下载站点取源码包,版本号和文件名一定要和发布说明一致 wget https://ftp.postgresql.org/pub/source/v18beta2/postgresql-18beta2.tar.gz # 同时下载官方校验文件,别信第三方网页上贴的哈希值 wget https://ftp.postgresql.org/pub/source/v18beta2/postgresql-18beta2.tar.gz.sha256 # 用官方校验文件逐行核对,任何一行 FAILED 都立刻重新下载 shasum -a 256 -c postgresql-18beta2.tar.gz.sha256

这段命令的逻辑很直接:-c参数让 shasum 读取校验文件里记录的哈希值,与本地文件的真实哈希逐行比对。如果系统里没有 shasum,用sha256sum -c效果一样。校验通过后解压:

tar xzf postgresql-18beta2.tar.gz cd postgresql-18beta2 ls configure Makefile

解压后先确认configure脚本存在,这才说明源码包是完整的。很多翻车现场就发生在这一步:有人下载的“源码包”解压后没有 configure,原因是下载时被镜像站截断,或者拿到了错误的文件。

3.2 依赖清单与离线准备:Ubuntu 24.04 缺一不可的库

PostgreSQL 18 的编译依赖和 17 基本一脉相承,但在 Ubuntu 24.04 上用 apt 安装时要注意包名区分。我常用的安装命令是:

sudo apt update sudo apt install -y build-essential libreadline-dev zlib1g-dev \ libicu-dev libssl-dev pkg-config bison flex

逐个解释这些包为什么缺一不可:

  • build-essential:提供 gcc、make 等基础编译工具,缺了它第一步就卡住。
  • libreadline-dev:psql 交互式命令行的行编辑能力全靠它,没有它,psql 里按上下键、Tab 补全都会失灵。
  • zlib1g-dev:提供压缩库,pg_dump 的压缩备份和 WAL 归档会用到。
  • libicu-dev:ICU 国际化支持,决定 initdb 时能用哪些 collation。没有它,--with-icu只能放弃,中文等非 ASCII 文本的排序行为会退回 libc,表现经常和业务预期不一致。
  • libssl-dev:OpenSSL 开发头文件,编译支持 SSL 连接的 PostgreSQL 必需。
  • pkg-config、bison、flex:configure 阶段探测库路径、解析 SQL 语法生成器都需要它们。

离线环境是另一套逻辑。如果内网机器不能访问 apt 源,我一般会在同版本、同架构的一台联网机器上下载全部 deb 包,做好apt download的清单,再拷贝进内网安装。更省事的做法是直接在内网配置一个镜像源。不要试图跳过这些依赖——跳过 libicu 一时省事,后面 initdb 时 locale 选项会缩水,跳过 libreadline 则会让 psql 难用到怀疑人生。

3.3 configure:编译参数怎么定,最少配置与常用增强

进入源码目录后,第一步是 configure。这个脚本会探测系统里有哪些库、哪些编译器特性,然后生成 Makefile。我把常用的最小可靠配置写在这里:

cd ~/pgbuild/postgresql-18beta2 ./configure \ --prefix=/opt/postgresql/18beta2 \ --with-icu \ --with-ssl=openssl \ --with-readline \ --with-pgport=5433

逻辑说明:--prefix决定安装目录,我用独立目录而不是默认的/usr/local/pgsql,这样 17 和 18beta2 可以共存,不用动生产环境的 PATH。--with-pgport=5433是把默认端口改成 5433,避免和本机已有 PostgreSQL 的 5432 冲突——这是 beta 测试期最值得养成的习惯。

几个关键参数的取舍:

  • --with-icu:强烈建议开启,否则 initdb 时的 locale 选项会被砍掉一大截,很多应用的排序需求跑不出来。
  • --with-ssl=openssl:如果你只在本机开发测试,这个可以不加;但只要涉及远程连接,就建议加上,免得后面补装时重新编译一遍。
  • --enable-debug:只有准备跟内核源码、抓 core dump 时才加。加了之后编译出来的二进制体积明显变大,运行性能也会下降,普通测试环境不要碰。
  • --enable-cassert:这是给 PostgreSQL 内核开发者用的断言检查,会让性能明显变慢,非内核开发不要开。

configure 结束时,终端会打印一份配置摘要,显示启用了哪些特性。我的习惯是把这份摘要截图或复制留存,后面排查问题、和正式版对比默认参数时都用得上。

3.4 make 与 make install:并行编译、装到独立目录

configure 通过之后进入编译阶段。很多人在这里踩的第一个坑就是无脑make -j$(nproc),然后看着机器被 OOM kill。编译 PostgreSQL 时,每个并发编译进程大约占 300 到 500MB 内存,8 核机器如果只有 8G 内存,全核并行很容易把内存吃满。我一般这样控制:

# 先看内存总量再决定并行度,8G 以下建议 -j2 或 -j4 free -h # 编译核心程序与所有 contrib 扩展;world 表示把 contrib 一起编了 make -j4 world # 安装到 configure 时指定的目录 make install-world

逻辑说明:make -j4 world中的 world 会把 contrib 目录下的扩展(比如 postgres_fdw、pg_stat_statements)一并编译。很多人在生产环境装完 PostgreSQL 后才发现pg_stat_statements没装,就是因为只跑了不带 world 的make。install-world对应地把这些模块安装到 prefix 目录。

编译过程少则七八分钟,多则二三十分钟,取决于机器性能。如果中途报错,第一反应不是重跑,而是向上翻日志,看第一个 error 出现在哪个文件。常见的error: unknown type name之类,多半是依赖库没装全,回到 3.2 补齐再重新make clean && make -j4 world。正常结束后,检查安装产物:

ls -l /opt/postgresql/18beta2/bin/

这个目录下应该能看到postgres、initdb、pg_ctl、psql等可执行文件。看不到任何关键二进制,说明安装路径或权限出了问题。另外确保磁盘有至少 1GB 余量,编译过程会生成大量中间 .o 文件,磁盘写满时 make 的表现经常是莫名其妙的段错误。

3.5 initdb 与第一个连接:把数据目录建起来并验证

二进制装好只完成了一半,还要初始化数据目录。PostgreSQL 不允许 root 直接运行 initdb,所以先建一个专用系统用户:

sudo useradd -m pg18 sudo mkdir -p /data/pg18 sudo chown pg18:pg18 /data/pg18 sudo -u pg18 /opt/postgresql/18beta2/bin/initdb \ -D /data/pg18 \ --locale=C.UTF-8 \ --encoding=UTF8 \ --data-checksums

参数说明:-D指定数据目录;--locale=C.UTF-8用 C.UTF-8 而不是 en_US.UTF-8,能避免部分系统上 locale 缺失导致的 initdb 失败;--encoding=UTF8保证数据库编码;--data-checksums开启数据页校验和,磁盘坏块能在读取时立刻被发现,而不是等到备份恢复才暴露。以上路径完整,而且这些参数建议固定下来,新建测试库时保持一致。

初始化完成后启动服务:

sudo -u pg18 /opt/postgresql/18beta2/bin/pg_ctl \ -D /data/pg18 \ -l /data/pg18/server.log \ start

-l指定日志文件,这是排查启动问题的第一现场。启动后验证连接:

export PATH=/opt/postgresql/18beta2/bin:$PATH psql -p 5433 -d postgres -c "select version();"

如果看到PostgreSQL 18beta2 on x86_64...的输出,说明编译安装全程跑通了。这里有个新手容易忽略的点:psql -p 5433里的端口必须和 configure 时--with-pgport设置的一致,否则 psql 默认找 5432,会报 connection refused,让你误以为服务没起来。

4. 跑起来之后:让 PostgreSQL 18 的默认参数与配置不坑你

4.1 上线前的配置核查:shared_buffers、max_connections 等五个必改项

initdb 生成的postgresql.conf是保守的,它的目标是在任何机器上都能启动,而不是跑出性能。所以测试环境跑起来后,第一件事是按需改配置。我的习惯是先打开文件,改掉下面五个参数再继续:

shared_buffers = 1GB # 物理内存的 15%~25%,测试机别照抄 128MB 默认值 max_connections = 200 # 连接池可能会打满默认值,太小会话直接被拒 listen_addresses = '*' # 默认只听 127.0.0.1,远程工具连不上先查这里 wal_level = replica # 默认就是 replica,做逻辑复制时不需要再改 max_parallel_workers_per_gather = 4 # 并行查询开关,默认值 2 在分析型 SQL 上偏保守

注意,这不是生产配置模板。生产环境要结合 CPU 核数、磁盘类型、业务并发数来做压测调整。beta 测试环境只要确保比默认值更能反映真实运行状态即可。尤其shared_buffers,很多人拿默认的 128KB 跑测试,然后抱怨 PostgreSQL 慢——那不是 PostgreSQL 慢,是配置没动。

改完配置文件后重启:

sudo -u pg18 /opt/postgresql/18beta2/bin/pg_ctl \ -D /data/pg18 \ -l /data/pg18/server.log \ restart

重启后用一个简单 SQL 确认参数生效:

SELECT name, setting FROM pg_settings WHERE name IN ('shared_buffers', 'max_connections', 'listen_addresses');

pg_settings是 PostgreSQL 的运行时配置字典,setting列显示的是当前生效值,不是配置文件里的注释值。很多人配置文件改了但没生效,多半是忘了 restart 或改错了文件路径。

4.2 让日志、统计和自动清理正常工作

beta 版本最怕的是出了问题没有日志可查。我会先把日志配置打开:

logging_collector = on log_destination = 'csvlog' log_directory = 'log' log_min_duration_statement = 1000 log_connections = on log_disconnections = on autovacuum = on autovacuum_naptime = 1min

逻辑说明:logging_collector = on让 PostgreSQL 把日志收集到log_directory指定的目录,而不是直接丢到标准输出;log_destination = 'csvlog'生成 CSV 格式日志,每行是结构化字段,后面用脚本分析慢查询、连接断开会很方便;log_min_duration_statement = 1000把执行超过 1 秒的 SQL 全部记录下来,这是定位性能问题的第一手材料。

autovacuum是另一个重点。很多人在测试环境顺手把它关掉,理由是“省资源”,然后过几天发现表膨胀得厉害、查询越来越慢。PostgreSQL 的 MVCC 机制决定了更新会产生死元组,必须靠 autovacuum 清理。我见过不止一次生产事故是“DBA 觉得 autovacuum 抢资源就关了”,随之而来的是事务 ID 回卷危机。任何时候都别关 autovacuum,beta 测试环境同样如此。

4.3 最小特性验证:uuidv7 与 SQL/JSON 的动手实验

配置改完,接下来验证这代版本的核心新特性。这不是为了炫技,而是确认你编译出来的二进制里确实包含这些功能,也顺便看看它们的真实行为和文档描述是否一致。

-- 验证 UUIDv7:生成结果应该越来越有序 SELECT uuidv7() AS id, clock_timestamp() AS ts; -- 验证 SQL/JSON 构造函数:从行数据构造 JSON 文档 SELECT JSON { 'id': 1, 'name': 'pg18' } AS doc; -- 验证增量排序:需要一个带复合排序的场景观察执行计划 CREATE TABLE t_sort AS SELECT i AS a, i % 100 AS b FROM generate_series(1, 1000000) i; EXPLAIN ANALYZE SELECT * FROM t_sort ORDER BY a, b LIMIT 10;

第一句验证 UUIDv7 是否可用。注意uuidv7()是 beta 新接口,正式版发布前可能会有微调,所以这里只做“能不能跑”的验证,不做线上依赖。

第二句验证 SQL/JSON 构造函数。如果服务器报语法错误,先确认你确实连的是 18beta2 而不是系统里残留的 17 实例。我遇到过不止一次,psql默认连到了旧实例,然后到处怀疑新特性是假的。

第三句验证增量排序。EXPLAIN ANALYZE的输出里如果出现Incremental Sort节点,说明优化器在这条 SQL 上启用了增量排序;如果显示的是普通Sort,也别急着下结论,可能是 LIMIT 值太小导致优化器觉得直接排序更划算。至于enable_sort = off这种写法,只是为了强制观察路径,日常测试不要乱关。

5. 避坑:编译和启动 PostgreSQL 18beta2 的五个经典翻车现场

5.1 configure 阶段:readline 找不到,报错信息却只给一半

现象:./configure跑到快结束时输出configure: error: readline library not found,但明明已经执行过apt install libreadline-dev。

原因:最常见的是只装了libreadline8(运行时库)没装libreadline-dev(开发头文件)。另一个坑是 Ubuntu 24.04 上 readline 的 pkg-config 路径探测比较挑剔,configure 没找到头文件就报错。

解决:先确认开发包真的装了:

dpkg -l | grep readline

如果只有libreadline8,补装libreadline-dev。装完后重新执行 configure。如果还报错,检查/usr/include/readline/readline.h是否存在。实在不行就./configure --without-readline先跳过——但 psql 的交互体验会严重退化,不推荐。

5.2 make -j 并行编译被 OOM 杀死,日志没留下真凶

现象:make -j8跑了一二十分钟,终端突然显示Killed,重跑时同样的位置再次被杀。

原因:并行编译时每个编译进程吃 300MB 到 500MB 内存,8 个进程同时跑就能吃掉 4G 左右。内存小的机器上,内核 OOM killer 会把占用最大的 cc1 进程杀掉,然后 make 就断了。日志里不一定有明确报错,只有一行Killed。

解决:用free -h看内存总量,8G 以下的机器老老实实make -j2或make -j4。再保险一点,编译前关掉浏览器等大内存应用,或者临时扩容 swap。另外,configure 时加了--enable-debug会让编译期内存占用进一步变大,测试环境不需要调试符号就别加。

5.3 initdb 成功但 pg_ctl start 秒退:共享内存的隐形门槛

现象:initdb 正常完成,但pg_ctl start后进程立刻退出,server.log 里看到FATAL: could not create shared memory: Invalid argument。

原因:PostgreSQL 启动时要创建共享内存段。容器环境最常见——docker 默认/dev/shm只有 64MB,PostgreSQL 需要分配shared_buffers对应的共享内存,直接撞上限。物理机上则多半是kernel.shmmax设得太小。

解决:容器环境在docker run时加上--shm-size=1g,或者把shared_buffers调小到 256MB 先跑起来。物理机执行:

sysctl -w kernel.shmmax=1073741824 echo "kernel.shmmax=1073741824" >> /etc/sysctl.conf

这条命令把单个共享内存段上限提到 1GB,测试环境够用了。改完再sysctl -p生效,然后重新 start。

5.4 psql 连接被拒:Peer authentication 与 unix_socket_directories

现象:本机执行psql -p 5433 -d postgres,报错FATAL: Peer authentication failed for user "postgres"。

原因:initdb 生成的pg_hba.conf里,本地 Unix socket 连接默认用peer认证——它要求当前操作系统用户名和数据库用户名一致。你当前系统用户是ubuntu,数据库用户是postgres,自然被拒。

解决:测试环境直接用另一个系统用户去连,或者临时改认证方式。先用sudo -u pg18 psql -p 5433 -d postgres连进去,然后修改pg_hba.conf,把 local 行改成trust,再 reload。注意:trust 意味着本机任何用户免密登录,只适合开发测试环境,生产环境用这个等于裸奔。

5.5 新特性“不存在”:uuidv7() 不存在或 JSON() 语法报错

现象:执行SELECT uuidv7();报function uuidv7() does not exist;写 SQL/JSON 构造函数直接语法错误。

原因:八成是你连错了实例。系统里如果之前装过 PostgreSQL 17,PATH里的psql指向的还是旧版本,而 5433 端口的 18beta2 服务可能没起来。旧 psql 连旧库,自然没有这些新函数。

解决:排查三步走:先which psql看客户端路径;再psql -p 5433 -d postgres -c "select version();"确认 server_version 是 18beta2;最后确认uuidv7()是不是敲错了大小写。PostgreSQL 的函数名是大小写敏感的,UUIDV7()会被当成另一个函数名。连对实例后,这些新特性基本不会让人失望。

6. 进阶:用回归测试和自定义 SQL 给这个 beta 环境把关

6.1 跑官方回归测试:一条命令验证内核完整性

编译完 PostgreSQL 后,官方自带了一套完整的回归测试,覆盖 SQL 解析、事务、索引、权限等核心路径。跑一遍能确认你编译出的这版二进制没有明显异常:

cd ~/pgbuild/postgresql-18beta2 sudo -u pg18 make check

注意,绝对不能以 root 身份运行,PostgreSQL 的测试框架会直接拒绝。make check会临时拉起一个实例,执行几千条 SQL 断言,最后输出all tests passed或失败列表。如果有not ok的测试,去src/test/regress/regression.diffs看具体差异。beta 版偶尔会有已知失败的用例,先对照官方的已知问题清单确认是不是预期行为。

6.2 用 EXPLAIN ANALYZE 验证增量排序的真实收益

官方测试覆盖的是正确性,性能行为还得自己测。我习惯造一张百万行的表,对比增量排序开和关的执行计划:

SET enable_incremental_sort = on; EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM t_sort ORDER BY a, b LIMIT 100; SET enable_incremental_sort = off; EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM t_sort ORDER BY a, b LIMIT 100;

对比两组输出的Planning Time、Execution Time和Buffers,可以直观看到 18 这版增量排序带来的收益幅度,远比我在这里转述文档数字可信。

6.3 把编译产物与 configure 参数打包存档

测试通过的编译产物值得留一份存档,方便后续 diff:

tar czf pg18beta2-build.tar.gz -C /opt postgresql/18beta2 # 同时保存当时用的 configure 参数,方便和正式版对比默认行为 echo "./configure --prefix=/opt/postgresql/18beta2 --with-icu --with-ssl=openssl --with-readline --with-pgport=5433" > build-args.txt

我自己的习惯是每次装一个 beta 版本,都在同一目录留下 build-args.txt 和一份编译日志。等 18 正式版发布后,直接对比 configure 参数和pg_settings的默认值变化,升级时心里能少一点玄学、多一点底数。这次 18beta2 的整个编译过程我也是这么存档的——先把正确性验证跑完,再把产物留好,后面正式版出来时就只剩业务适配的活了。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询