postgresql18加装xml2组件模块简介
来源:本站原创
点击数: 次
发布时间:2025年10月31日
1. 安装依赖库
确保系统安装了 libxml2 和 libxslt 及其开发包:
# RHEL/CentOS/OEL sudo yum install -y libxml2 libxml2-devel libxslt libxslt-devel
检查是否安装:
rpm -qa | grep libxml2 rpm -qa | grep libxslt
2. 编译安装 PostgreSQL 核心(启用 XML 支持)
假设源码在 ~/postgresql-18.0,安装目录 /usr/local/pgsql18:
cd ~/postgresql-18.0 # 清理之前的构建 make distclean || true # 配置核心 ./configure --prefix=/usr/local/pgsql18 \ --with-libxml \ --with-libxslt \ CFLAGS="-O2 -fPIC" \ LDFLAGS="-Wl,-rpath,/usr/local/pgsql18/lib" # 编译安装 make -j$(nproc) sudo make install
说明:
--with-libxml --with-libxslt:开启 XML/XSMLT 支持
CFLAGS="-O2 -fPIC":保证生成的库可以被共享对象调用
LDFLAGS="-Wl,-rpath,/usr/local/pgsql18/lib":设置动态库搜索路径
3. 启动数据库,确认核心 XML 功能可用
# 切换到 postgres 用户 su - postgres # 启动 PostgreSQL /usr/local/pgsql18/bin/pg_ctl -D /usr/local/pgsql18/data start # 测试 XML 支持 /usr/local/pgsql18/bin/psql -U postgres -p 54321 -c "SELECT xmlparse(document '<a/>');"
如果返回 <a/>,说明 PostgreSQL 核心已经支持 XML。
4. 编译安装 xml2 扩展
cd ~/postgresql-18.0/contrib/xml2 # 清理之前编译 make clean # 使用 PGXS 编译安装 make USE_PGXS=1 PG_CONFIG=/usr/local/pgsql18/bin/pg_config sudo make USE_PGXS=1 PG_CONFIG=/usr/local/pgsql18/bin/pg_config install
说明:
USE_PGXS=1:使用 PostgreSQL 扩展构建系统
PG_CONFIG指向已编译的 PostgreSQL 可执行文件
5. 在数据库中创建扩展
/usr/local/pgsql18/bin/psql -U postgres -p 54321 -c "CREATE EXTENSION xml2;"
如果成功,不会报错,同时可以使用 xml2 提供的函数,则xml2组件模块成功,例如:
SELECT xml_encode_special_chars('<a>"test"</a>');6. 注意事项
xml2 扩展不是必须
如果核心启用了 libxml/libxslt,
SELECT xmlparse(...)等核心 XML 函数可以直接用。xml2 扩展提供一些额外函数(例如
xml_encode_special_chars、xml_is_well_formed等)。pgxml.so 报错问题
如果之前手动编译过 xml2 产生的
pgxml.so报undefined symbol: xml_ereport,说明 PostgreSQL 核心没有用 libxml 编译,或者 pgxml.so 与核心不兼容。解决方法:必须先重新编译 PostgreSQL 核心并启用 libxml2/libxslt,再安装 xml2 扩展。
安装顺序
先安装核心(启用 libxml/libxslt),确认 XML 功能可用。
再编译安装 xml2 扩展,并在数据库中创建扩展。
