内容
活动
关注

Rocky Linux PostgreSQL 18 llvm+uring源码安装

简介: PostgreSQL 18正式版发布,新增异步I/O、UUIDv7等功能。本文记录在Rocky Linux 9上从依赖安装、LLVM编译、io_uring配置到PostgreSQL 18源码编译的完整过程,涵盖关键步骤与命令,助你顺利构建最新版本数据库环境。

PostGreSQL 18正式版发布了,新增了异步I/O、UUIDv7等诸多功能,第一时间在Rocky Linux 9下载编译,纪录如下:

一、安装依赖包

dnf install git cmake gcc-c++ openssl-devel python3-devel libicu-devel bison flex readline lz4-devel readline-devel zlib-devel perl-FindBin docbook-dtds docbook-style-xsl libxslt -y

二、编译LLVM

这里以15.0.7为例,说明自行编译的方法

wget https://github.com/llvm/llvm-project/releases/download/llvmorg-15.0.7/llvm-project-15.0.7.src.tar.xz tar Jxvf llvm-project-15.0.7.src.tar.xz mkdir -p llvm-project-15.0.7.src/build cd llvm-project-15.0.7.src/build cmake -DCMAKE_BUILD_TYPE=Release \  -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" \  -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \  -DLLVM_TARGETS_TO_BUILD=Native \  -DCMAKE_INSTALL_PREFIX="/usr/local" \  ../llvm make -j10 #这里根据自己的cpu个数来决定 cmake -P cmake_install.cmake

三、关于io_uring

Rocky Linux 9、10内置io_uring,但软件仓库里没有io_uring的开发包,导致带上 --with-liburing 时无法编译,我这里先删除内置的io_uring包,然后下载最新的io_uring自行编译,方法如下:

  1. 编译安装
dnf remove liburing #删除内置包 wget https://github.com/axboe/liburing/archive/refs/tags/liburing-2.12.tar.gz tar zxvf liburing-2.12.tar.gz cd liburing-liburing-2.12/ ./configure make make install
  1. 打开内核io_uring支持

Rocky Linux缺省是禁用io_uring的,通过以下命令可以查看io_uring支持是否打开

cat /proc/sys/kernel/io_uring_disabled #会显示2,表示禁止

这时需要打开io_uring支持:

echo "kernel.io_uring_disabled=0" >> /etc/sysctl.conf sysctl -p

完成上述操作后用 cat /proc/sys/kernel/io_uring_disabled 命令查看,如果返回 0 则表示io_uring内核支持已经打开。

四、编译PostgreSQL 18

本例默认安装在/usr/local/pgsql18目录下,需要提前导出io_uring开发包的位置:

wget https://ftp.postgresql.org/pub/source/v18.0/postgresql-18.0.tar.gz #需要导出io_uring开发库路径,默认安装在/usr/lib下,如果不导出,则无法编译 export PKG_CONFIG_PATH=/usr/lib/pkgconfig:$PKG_CONFIG_PATH CC=/usr/local/bin/clang CFLAGS="-O3 -fstrict-enums -fno-signed-zeros" CLANG=/usr/local/bin/clang LLVM_CONFIG=/usr/local/bin/llvm-config ./configure --prefix=/usr/local/pgsql18 --with-llvm --with-openssl --with-lz4 --with-python --with-liburing make world make install-world








相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
27天前
|
Linux 虚拟化 iOS开发
VMware Workstation Pro 25H2 Unlocker & OEM BIOS 2.7 - 在 Windows 和 Linux 上运行 macOS Tahoe
VMware Workstation Pro 25H2 Unlocker & OEM BIOS 2.7 - 在 Windows 和 Linux 上运行 macOS Tahoe
267 3
VMware Workstation Pro 25H2 Unlocker & OEM BIOS 2.7 - 在 Windows 和 Linux 上运行 macOS Tahoe
|
1月前
|
存储 安全 固态存储
c盘满了怎么办
c盘满了怎么办
|
开发者 人工智能 自然语言处理
欢迎使用通义灵码
灵码使用指南!一键收藏。
138114 31
|
8月前
|
JSON 监控 JavaScript
开发者必备的 WebSocket 指南
WebSocket 是一种支持双向、全双工通信的协议,能够以低开销实现实时数据交互。与传统 HTTP 不同,WebSocket 通过持久连接显著降低延迟,适用于在线游戏、聊天应用、实时通知和金融交易等场景。本文详解 WebSocket 的特性、优势及其实现方式,提供股票行情示例代码,并对比其他协议,帮助开发者掌握这一关键技术,构建高效实时应用。
|
C++ Windows
无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll。尝试重新安装该程序以解决此问题。
无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll。尝试重新安装该程序以解决此问题。
无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll。尝试重新安装该程序以解决此问题。
|
11月前
|
前端开发 数据挖掘 测试技术
R中单细胞RNA-seq分析教程 (6)
R中单细胞RNA-seq分析教程 (6)
537 12
R中单细胞RNA-seq分析教程 (6)
|
前端开发 C# Android开发
揭秘Uno Platform跨平台开发魅力:企业级应用的优势与挑战,一篇文章带你深入探究代码背后的秘密
【9月更文挑战第8天】Uno Platform在企业级应用领域展现出强大潜力,凭借其跨平台特性,能够使用C#和XAML为Windows、iOS、Android及Web构建应用,显著降低开发成本。本文将探讨其优势与挑战,并通过示例代码展示其实际应用。Uno Platform不仅提供丰富的UI控件和布局选项,还支持MVVM架构,提升代码的可维护性和可测试性。
254 2
|
SQL 缓存 测试技术
RESTful API设计的最佳实践:构建高效、可维护的Web服务接口
【6月更文挑战第11天】构建高效、可维护的RESTful API涉及多个最佳实践:遵循客户端-服务器架构、无状态性等REST原则;设计时考虑URL结构(动词+宾语,使用标准HTTP方法)、使用HTTP状态码、统一响应格式及错误处理;确保数据安全(HTTPS、认证授权、输入验证);实施版本控制;并提供详细文档和测试用例。这些实践能提升Web服务接口的性能和质量。
|
C# Windows
C# 串口关闭时主界面卡死原因分析
串口程序关闭导致界面卡死的原因是主线程与辅助线程间的死锁。问题出在`SerialPort.Close()`方法与`DataReceived`事件处理程序。`DataReceived`事件在`lock (stream)`块中执行,而`Close()`方法会关闭`SerialStream`并锁定自身。当辅助线程处理数据并尝试更新UI时,UI线程因调用`Close()`被阻塞,造成死锁。解决办法是让`DataReceived`事件处理程序使用`this.BeginInvoke()`异步更新界面,避免等待UI线程,从而防止死锁。
下一篇