postgresql源码安装

embedded/2025/3/15 18:43:35/

步骤 1: 安装依赖

在开始之前,请确保您的系统上安装了编译 PostgreSQL 所需的依赖包。使用以下命令安装必要的软件包:

对于 Debian/Ubuntu 系统:

sudo apt update
sudo apt install build-essential libreadline-dev zlib1g-dev flex bison libxml2-dev libxslt-dev libssl-dev libsystemd-dev

对于 CentOS/RHEL 系统:

sudo yum install -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel openldap-devel python-devel gcc-c++ openssl-devel cmake

步骤 2: 下载 PostgreSQL 源码

访问PostgreSQL的官方网站或源码下载页面:PostgreSQL源码下载。

  • 下载对应版本的源码包,例如postgresql-16.4.tar.gz

步骤 3: 解压源码包

下载完成后,解压源码包:

tar -xzf postgresql-16.4.tar.gz
cd postgresql-16.4

步骤 4: 配置编译选项

在编译之前,您需要配置编译选项。可以使用 ./configure 命令来设置编译选项。常见的选项包括:

  • –prefix=/usr/local/pgsql \ # 指定安装路径
  • –with-openssl \ # 启用 SSL 支持
  • –with-systemd \ # 支持 systemd 日志
  • –with-libxml \ # 启用 XML 支持
  • –with-libxslt \ # 启用 XSLT 支持
  • –enable-debug # 可选:启用调试符号

常用选项:

  • --prefix:指定安装目录(默认为 /usr/local/pgsql

  • --with-perl/--with-python:支持 PL/Perl 或 PL/Python

  • --with-icu:启用 ICU 排序规则支持

例如,您可以使用以下命令进行配置:

./configure --prefix=/usr/local/pgsql --with-openssl

步骤 5: 编译源码

配置完成后,使用 make 命令编译源码:

make

步骤 6: 安装 PostgreSQL

编译完成后,使用 make install 命令将 PostgreSQL 安装到指定的目录:

sudo make install

步骤 7: 创建 PostgreSQL 用户和数据目录

为了安全起见,建议创建一个专用的 PostgreSQL 用户,并为数据库创建数据目录:

sudo adduser postgres
sudo mkdir /usr/local/pgsql/data
sudo chown postgres /usr/local/pgsql/data

步骤 8: 初始化数据库集群

postgres 用户身份初始化数据库集群:

sudo -u postgres /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

步骤 9: 启动 PostgreSQL

可以使用以下命令启动 PostgreSQL:

sudo -u postgres /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data

要在后台运行 PostgreSQL,您可以使用 -D 选项指定数据目录,并使用 & 符号将其放入后台:

sudo -u postgres /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data &

验证安装

连接到数据库

sudo -u postgres /usr/local/pgsql/bin/psql -c "SELECT version();

步骤 10: 创建数据库和用户

连接到 PostgreSQL 并创建数据库和用户:

sudo -u postgres /usr/local/pgsql/bin/psql

在 PostgreSQL 提示符下,您可以执行 SQL 命令来创建数据库和用户。例如:

CREATE DATABASE mydb;
CREATE USER myuser WITH PASSWORD 'mypassword';
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

步骤 11: 设置环境变量(可选)

为了方便使用 PostgreSQL 命令,您可以将 PostgreSQL 的 bin 目录添加到您的 PATH 环境变量中。在 ~/.bashrc~/.bash_profile 文件中添加以下行:

export PATH=$PATH:/usr/local/pgsql/bin

然后,运行以下命令使更改生效:

source ~/.bashrc

卸载或清理

  • 卸载已安装文件

    sudo make uninstall
    
  • 清理编译文件

    make clean       \# 清理中间文件
    make distclean   \# 彻底清理(包括 configure 生成的文件)
    

常见问题

  1. 依赖缺失
    configure 报错(如 missing library),根据提示安装对应开发包。

  2. 权限问题
    确保数据目录的所有者为 postgres 用户。

  3. 服务管理
    生产环境建议使用 systemd 管理服务,可参考官方文档配置服务文件。

注意事项

  • 生产环境需额外配置 postgresql.confpg_hba.conf

  • 编译前建议阅读源码目录下的 INSTALL 文件。

  • 若需调试,可在 configure 时添加 --enable-debug 选项。

总结

通过以上步骤,应该能够成功编译和安装 PostgreSQL。如果在任何步骤中遇到问题,请检查错误消息并确保所有依赖项已正确安装。您可以参考 PostgreSQL 的官方文档以获取更多详细信息和选项。


http://www.ppmy.cn/embedded/172835.html

相关文章

L2-4 吉利矩阵

输入样例: 7 3输出样例: 666 这道题是暴力纯搜,但是很难想,我这个是看的别人的代码 #include "bits/stdc.h" using namespace std; int x[20][20]; int l, n; int cnt 0; int sumx[5], sumy[5]; void dfs(int x, in…

TypeScript 高级类型 vs JavaScript:用“杂交水稻”理解类型编程

如果把 JavaScript 比作乐高积木,TypeScript 就是一套智能积木系统。本文将用最生活化的比喻,带你理解 TypeScript 那些看似复杂的高级类型。 一、先看痛点:JavaScript 的“薛定谔类型” // 场景:用户信息处理 function getUserI…

十五、Vue 与 Webpack 5:优化构建性能的实用技巧

在现代前端开发中,构建性能是影响开发效率和用户体验的关键因素之一。Webpack 5 作为目前最流行的构建工具之一,提供了许多强大的功能来优化构建性能。本文将深入探讨如何通过 Webpack 5 优化 Vue 项目的构建性能,并结合实际示例讲解实用技巧。 1. Webpack 5 的新特性 1.1 …

Java8的新特性

1.Lambda表达式和函数式接口 Lambda的基础:函数式接口 Java 8与之前版本的区别: Java 7及之前:接口中只能包含抽象方法,无法通过函数式接口简洁地表示Lambda表达式。Java 8:通过FunctionalInterface注解,明…

WPF可编辑的DataGrid根据条件控制最后一行的按钮显示隐藏

目录 页面代码后台代码动态生成按钮主要代码&#xff1a; 如下图&#xff0c;可编辑的DataGrid&#xff0c;如果有操作按钮&#xff0c;则最后一行会异常出现按钮&#xff1b;解决办法就是让代码动态生成按钮&#xff1b; 页面代码 <Page x:Class"WpfSnqkGasAnalysi…

C++【类和对象】(超详细!!!)

C【类和对象】 1.运算符重载2.赋值运算符重载3.日期类的实现 1.运算符重载 (1).C规定类类型运算符使用时&#xff0c;必须转换成调用运算符重载。 (2).运算符重载是具有特殊名字的函数&#xff0c;名字等于operator加需要使用的运算符&#xff0c;具有返回类型和参数列表及函数…

项目-个人博客测试报告

目录 一、项目背景 二、项目功能 三、测试计划 &#xff08;1&#xff09;功能测试 &#xff08;2&#xff09;自动化测试 &#xff08;3&#xff09;性能测试 一、项目背景 1、个人博客系统是一个操作简单的基于Spring前后端分离的项目&#xff0c;同时使用MySQL数据库来进…

MoonSharp 文档五

目录 13.Coroutines&#xff08;协程&#xff09; Lua中的协程 从CLR代码中的协程 从CLR代码中的协程作为CLR迭代器 注意事项 抢占式协程 14.Hardwire descriptors&#xff08;硬编码描述符&#xff09; 为什么需要“硬编码” 什么是“硬编码” 如何进行硬编码 硬编…