windows 上编译PostgreSQL

在windows上编译PG,编译器可以使用vs和MinGW的gcc进行编译。

编译前准备:

Microsoft Windows SDK

Strawberry Perl //提供Perl的支持,内部还包括gcc

Bison和Flex(不同的PG需要不通的版本,具体需要查看帮助文档)

安装Bison和Flex目录不要选择默认的c:\program files,因为目录中间有空格,后续编译会报错,PG的文档中有记录,建议安装在没有空格的目录中,比如c:\GnuWin32目录中

可以使用win_bison.exe和win_flex.exe

工程构造工具以及编译步骤

PG16之前,包括16,使用Perl进行项目构造后进行编译,具体配置信息在src/tools/msvc目录中。

具体步骤:

  1. 安装vs的community版本。

  2. 开始菜单,选择VS -> X64 native command tools

  3. cd进入src/tools/msvc

  4. 执行build configuration component

build release psql (编译plsq的release版本) 默认编译文件放在release目录中

build debug (编译所有的debug版本) ,默认编译文件放在Debug目录中

同时会在msvc目录中创建一个pgsql.sln工程文件,可以直接使用vs打开后进行编译。

  1. 如果需要添加组件,比如支持openSSL,libxml等等,可以打开

msvc目录中的config_deafult.pl文件,添加相应的组件,如下面的内容,我添加了对Openssl和iconv的支持

perl 复制代码
# Copyright (c) 2021-2023, PostgreSQL Global Development Group

# Configuration arguments for vcbuild.
use strict;
use warnings;

our $config = {
	asserts => 0,    # --enable-cassert

	# blocksize => 8,         # --with-blocksize, 8kB by default
	# wal_blocksize => 8,     # --with-wal-blocksize, 8kB by default
	ldap => 1,             # --with-ldap
	extraver => undef,     # --with-extra-version=<string>
	gss => undef,          # --with-gssapi=<path>
	icu => undef,          # --with-icu=<path>
	lz4 => undef,          # --with-lz4=<path>
	zstd => undef,         # --with-zstd=<path>
	nls => undef,          # --enable-nls=<path>
	tap_tests => undef,    # --enable-tap-tests
	tcl => undef,          # --with-tcl=<path>
	perl => undef,         # --with-perl=<path>
	python => undef,       # --with-python=<path>
	openssl => 'C:\Program Files\OpenSSL-Win64',      # --with-ssl=openssl with <path>
	uuid => undef,         # --with-uuid=<path>
	xml => undef,          # --with-libxml=<path>
	xslt => undef,         # --with-libxslt=<path>
	iconv => 'C:\Program Files\GnuWin32',        # (not in configure, path to iconv)
	zlib => undef           # --with-zlib=<path>
};
  1. 编译完后,使用install target_dir install_type进行安装

PG16除了可以使用Perl进行项目的构建,还增加了meson进行项目的构建

PG17以及之后,就只能使用meson进行项目的构建(src/tools/msvc目录已经没有了)

meson构建项目步骤

  1. 安装meson,具体安装查看帮助

  2. 进入到PG源码的根目录下,执行

meson setup build --prefix=targetdir --buildtype=debug|release -Dssl=openssl

(类似./configure --prefix=targetdir --with-openssl --enable-debug)

  1. cd build

  2. ninja 进行编译(默认使用gcc进行编译,因为Strawberry Perl 带着 gcc和g++编译器)

4.ninja install 安装

  1. 也可以使用vs进行编译,方法如下

  2. mesa setup build_debug --backend=vs2022 --prefix=targetdir --buildtype=debug -Dssl=openssl //编译debug版本

  3. cd build

perl 复制代码
(arcgispro-py3) D:\info\postgresql\postgresql-17.5\build>meson compile
INFO: autodetecting backend as vs2022
INFO: calculating backend command to run: msbuild D:\info\postgresql\postgresql-17.5\build\postgresql.sln -maxCpuCount -verbosity:minimal
适用于 .NET Framework MSBuild 版本 17.13.19+0d9f5a35a
  1. meson compile

  2. meson build

相关推荐
Joy T3 小时前
Redis Lua 原子限流:Lua 脚本、竞态条件与并发控制
数据库·redis·lua·限流·竞态条件·redis scripting
杨凯凡3 小时前
MySQL 死锁怎么排查?InnoDB 锁等待与 Spring Boot 整事务重试实战
数据库·spring boot·mysql
Aloudata3 小时前
Claude 做数据分析的这两年:一份复盘与发展线索
大数据·数据库·人工智能·数据挖掘·数据分析·dataagent
Decay__3 小时前
01_SQLServer 体系架构全解 —— 实例进程、关系引擎、SQLOS 与事务日志深入
运维·数据库·sql·mysql·架构
zhanghaha13143 小时前
C# 系列教程_12 字符串 string 保姆级系统教程(面向新手,大量示例 + 原理讲解)
开发语言·数据库·c#
韩曙亮3 小时前
【错误记录】安卓 adb 调试 5037 端口占用排查 ( adb 的三层结构 | 找出本机占用 5037 的进程 )
android·数据库·adb·安卓·错误记录
瑞雪兆丰年兮4 小时前
JavaWeb-day07-MySQL(DQL&多表设计)
java·开发语言·数据库·sql·mysql·javaweb·web
lsc_blog9 小时前
年终自评别贴提交记录,把技术产出讲成变化
数据库·面试·职场和发展·跳槽·求职招聘
FungLeo12 小时前
成为全栈·基础补充·数据库迁移与事务:数据结构怎样安全演进
mysql·postgresql·sqlite·数据一致性·数据库事务·数据库迁移·成为全栈
Zan16 小时前
SQLite + SQLx 实战:为什么已经发布的数据库迁移文件,绝对不能再修改?
数据库·后端·面试