PostgreSQL 14.4 ARM64 架构源码编译安装指南

PostgreSQL 14.4 ARM64 架构源码编译安装指南


文章目录

    • PostgreSQL 14.4 ARM64 架构源码编译安装指南
    • 说明
    • 环境要求
      • 操作系统
    • 1. 系统环境准备
      • 1.1 更新系统包
      • 1.2 创建 PostgreSQL 用户
    • 2. 解压 PostgreSQL 14.4 源码包
    • 3. 配置编译选项
    • 4. 编译源代码
    • 5. 安装 PostgreSQL
    • 6. 初始化数据库
      • 6.1 创建数据目录
      • 6.2 初始化数据库集群
    • 7. 配置 PostgreSQL
      • 7.1 配置 postgresql.conf
      • 7.2 配置 pg_hba.conf
    • 8. 启动 PostgreSQL 服务
      • 8.1 配置 systemd 服务
      • 8.2 启动服务
    • 9. 配置环境变量
      • 9.1 设置 PATH 环境变量
      • 9.2 应用环境变量
    • 10. 验证安装
      • 10.1 检查 PostgreSQL 版本
      • 10.2 连接到数据库
      • 10.3 创建测试数据库
    • 11. 常见问题解决
      • 11.1 编译错误
      • 11.2 用户切换警告
      • 11.3 权限问题
      • 11.4 启动失败
      • 11.5 连接被拒绝

说明

  • PostgreSQL 版本: 14.4
  • 架构要求: ARM64 (aarch64)
  • 安装方式: 源码编译安装
  • 适用场景: 在 ARM64 架构服务器上安装 PostgreSQL 数据库

根据项目信息,PostgreSQL 官方通常不提供 ARM64 架构的预编译二进制包,因此需要通过源码编译方式进行安装。

环境要求

操作系统

  • Ubuntu 20.04/22.04 LTS (ARM64)
  • Debian 11 (ARM64)
  • 或其他支持 ARM64 的 Linux 发行版

1. 系统环境准备

1.1 更新系统包

# 更新软件包列表
sudo apt update# 升级已安装的软件包
sudo apt upgrade -y# 安装编译工具和依赖
sudo apt install -y build-essential libreadline-dev zlib1g-dev flex bison systemd

1.2 创建 PostgreSQL 用户

# 创建 postgres 用户和组,并创建家目录
sudo groupadd postgres
sudo useradd -g postgres -m -s /bin/bash postgres# 设置用户密码(可选)
# sudo passwd postgres

参数说明:

  • -g postgres:指定用户的主要组为 postgres 组
  • -m:创建用户的家目录(通常是 [/home/postgres](file:///home/postgres))
  • -s /bin/bash:设置用户的默认 shell 为 bash

2. 解压 PostgreSQL 14.4 源码包

# 切换到您的文件目录
cd /files# 查看文件
ls -la# 解压 PostgreSQL 14.4 源码包
sudo tar -zxvf postgresql-14.4.tar.gz# 查看解压后的目录结构
ls -la postgresql-14.4/

3. 配置编译选项

# 进入源码目录
cd /files/postgresql-14.4# 配置编译选项,指定安装目录为 /files/db_tool
./configure --prefix=/files/db_tool# 查看配置结果
echo $?

常用配置选项:

  • --prefix=PREFIX:安装目录
  • --with-openssl:支持 OpenSSL
  • --with-python:支持 Python 存储过程
  • --with-perl:支持 Perl 存储过程
  • --with-pam:支持 PAM 认证

4. 编译源代码

# 在源码目录中执行编译
make# 查看编译结果(0 表示成功)
echo $?# 如果编译成功,会看到类似以下输出:
# "All of PostgreSQL successfully made. Ready to install."

编译过程可能需要较长时间,具体取决于硬件性能。

5. 安装 PostgreSQL

# 安装编译好的程序到指定目录
make install# 查看安装结果
echo $?# 查看安装后的目录结构
ls -la /files/db_tool/

安装完成后,目录结构应该如下:

/files/db_tool/
├── bin/           # 可执行文件
├── include/       # 头文件
├── lib/           # 库文件
├── share/         # 共享文件
└── ...

6. 初始化数据库

6.1 创建数据目录

# 创建数据目录
sudo mkdir -p /files/db_tool/data
sudo chown -R postgres:postgres /files/db_tool

6.2 初始化数据库集群

# 切换到 postgres 用户
sudo su - postgres# 初始化数据库(数据目录在 /files/db_tool/data)
/files/db_tool/bin/initdb -D /files/db_tool/data

7. 配置 PostgreSQL

7.1 配置 postgresql.conf

# 编辑主配置文件
vim /files/db_tool/data/postgresql.conf# 修改关键配置项
# listen_addresses = '*'          # 监听所有地址
# port = 15432                     # 端口号
# max_connections = 100           # 最大连接数
# shared_buffers = 128MB          # 共享缓冲区大小
# unix_socket_directories = '/tmp,/files/db_tool'  # Unix套接字目录

7.2 配置 pg_hba.conf

# 编辑客户端认证配置文件
vim /files/db_tool/data/pg_hba.conf# 添加必要的访问控制规则,例如:
# 本地连接信任
local   all             all                                     trust
# 本地主机连接信任
host    all             all             127.0.0.1/32            trust
host    all             all             ::1/128                 trust
# 允许特定IP地址通过密码连接到所有数据库
host    all             all             10.0.10.0/24             md5

8. 启动 PostgreSQL 服务

8.1 配置 systemd 服务

# 创建 systemd 服务文件
sudo vim /etc/systemd/system/postgresql.service

添加以下内容到服务文件:

[Unit]
Description=PostgreSQL database server
After=network.target[Service]
Type=forking
User=postgres
Group=postgresEnvironment=PGDATA=/files/db_tool/data
Environment=PGLOG=/files/db_tool/data/logfileExecStart=/files/db_tool/bin/pg_ctl start -D ${PGDATA} -l ${PGLOG}
ExecStop=/files/db_tool/bin/pg_ctl stop -D ${PGDATA}
ExecReload=/files/db_tool/bin/pg_ctl reload -D ${PGDATA}KillMode=mixed
KillSignal=SIGINT
TimeoutSec=0[Install]
WantedBy=multi-user.target

8.2 启动服务

# 重新加载 systemd 配置
sudo systemctl daemon-reload# 启用 PostgreSQL 服务开机自启
sudo systemctl enable postgresql# 启动 PostgreSQL 服务
sudo systemctl start postgresql# 检查服务状态
sudo systemctl status postgresql

9. 配置环境变量

9.1 设置 PATH 环境变量

# 编辑 postgres 用户的 .bashrc 文件
sudo vim /home/postgres/.bashrc# 添加以下行(如果没修改port则不需要export PGPORT)
export PATH=/files/db_tool/bin:$PATH
export PGDATA=/files/db_tool/data
export PGPORT=15432

9.2 应用环境变量

# 切换到 postgres 用户并重新加载环境变量
sudo su - postgres
source ~/.bashrc

10. 验证安装

10.1 检查 PostgreSQL 版本

# 检查 PostgreSQL 版本
/files/db_tool/bin/psql --version

10.2 连接到数据库

# 使用 psql 连接到数据库
psql -U postgres -d postgres# 在 psql 提示符中执行简单查询
# postgres=# SELECT version();
# postgres=# \q  -- 退出

10.3 创建测试数据库

# 创建测试数据库
/files/db_tool/bin/createdb testdb# 连接到测试数据库
/files/db_tool/bin/psql -U postgres -d testdb# 在测试数据库中创建表
# testdb=# CREATE TABLE test (id SERIAL PRIMARY KEY, name VARCHAR(100));
# testdb=# INSERT INTO test (name) VALUES ('Test Entry');
# testdb=# SELECT * FROM test;
# testdb=# \q  -- 退出

11. 常见问题解决

11.1 编译错误

如果在 [./configure](file:///usr/bin/configure) 或 [make](file:///usr/bin/make) 阶段遇到错误,请检查:

  1. 是否安装了所有必需的依赖包
  2. 系统架构是否支持
  3. 磁盘空间是否充足
# 重新安装依赖包
sudo apt update
sudo apt install -y build-essential libreadline-dev zlib1g-dev flex bison

11.2 用户切换警告

如果在执行 su - postgres 时出现以下警告:

su: 警告:无法更改到 /home/postgres 目录: 没有那个文件或目录

这表示 postgres 用户没有home目录。可以通过以下方式解决:

方法一:创建home目录(推荐在创建用户时使用 -m 参数)

# 为已存在的用户创建home目录
sudo mkhomedir_helper postgres

方法二:在创建用户时指定创建home目录

# 删除已存在的用户(如果需要重新创建)
sudo userdel postgres# 重新创建用户并创建home目录
sudo groupadd postgres
sudo useradd -g postgres -m -s /bin/bash postgres

方法三:临时切换用户(不切换到home目录)

# 使用 -s 参数指定 shell,避免切换到home目录
sudo su - postgres -s /bin/bash

11.3 权限问题

如果遇到权限问题,请确保以下几点:

  1. PostgreSQL 安装目录由 postgres 用户拥有
  2. PostgreSQL 二进制文件具有执行权限
  3. 配置文件具有正确的读写权限
# 修复权限问题
sudo chown -R postgres:postgres /files/db_tool
sudo chmod +x /files/db_tool/bin/*

11.4 启动失败

如果 PostgreSQL 启动失败,请检查日志文件:

# 查看日志文件
cat /files/db_tool/data/logfile

常见启动问题:

  1. 端口被占用:检查 15432 端口是否被其他进程占用
  2. 数据目录权限:确保数据目录由 postgres 用户拥有
  3. 配置错误:检查 postgresql.conf 和 pg_hba.conf 配置

11.5 连接被拒绝

如果连接数据库被拒绝,请检查:

  1. listen_addresses 设置是否正确
  2. pg_hba.conf 中的认证规则
  3. 防火墙设置是否允许 15432 端口
# 检查 PostgreSQL 是否在监听
netstat -tlnp | grep 15432# 如果使用 ufw 防火墙,允许 PostgreSQL 端口
sudo ufw allow 15432/tcp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/91364.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【科普】在STM32中有哪些定时器?

在 STM32 单片机中,定时器种类丰富,不同系列(如 F1、F4、H7 等)略有差异,以下是常见的定时器类型及核心特点:1. 基本定时器(TIM6、TIM7)功能:仅具备定时计数功能&#xf…

git使用秘诀(详解0到1)

前言: 不知道大家有没有使用git提交代码或者拉取代码的经历,自从上一家公司实习结束以后,对git的使用历历在目,从一开始的add、commit到后来的pull都有着许多的疑惑。 自从有一次merge代码以后,被师兄批了一顿以后(不小…

RHEL 9.5 离线安装 Ansible 完整教程

文章目录RHEL 9.5 离线安装 Ansible 完整教程环境准备系统要求准备工作清单方法一:使用 RPM 包离线安装步骤 1:在联网机器上下载必要的 RPM 包步骤 2:创建本地仓库元数据步骤 3:在离线服务器上安装方法二:使用 Python …

44、鸿蒙HarmonyOS Next开发:视频播放 (Video)组件和进度条 (Progress)组件的使用

目录 视频播放 (Video) 创建视频组件 加载视频资源 加载本地视频 加载沙箱路径视频 加载网络视频 添加属性 事件调用 Video控制器使用 其他说明 示例代码 进度条 (Progress) 创建进度条 设置进度条样式 场景示例 视频播放 (Video) Video组件用于播放视频文件并…

6、微服务架构常用十种设计模式

目录 1、微服务架构 2、微服务架构的优点 3、微服务架构的缺点 4、何时使用微服务架构 5、微服务架构常用十种设计模式 ① 独享数据库(Database per Microservice) ② 事件源(Event Sourcing) ③ 命令和查询职责分离&…

Docker 初学者需要了解的几个知识点 (六):docker-compose.yml (ThinkPHP)

下面这个文 docker-compose.yml 文件定义了一个包含 PHP、Nginx、MySQL、Redis 的完整 ThinkPHP 开发环境,各配置项的含义如下:version: 3.8services:# PHP-FPM 服务php-fpm:image: php:8.1-fpmvolumes:- ./tp-demo:/var/www/html- ./php.ini:/usr/local…

TiDB 详解

TiDB 详解:架构、特性与应用实践 TiDB 是 PingCAP 公司开发的开源分布式 NewSQL 数据库,采用 “计算-存储分离” 架构设计,兼具传统关系型数据库的 ACID 事务特性和 NoSQL 系统的水平扩展能力。以下是 TiDB 的全面技术解析。一、核心架构设计…

推客小程序商业模型设计:合规分佣体系×盈利模式×LTV提升策略

一、推客小程序的市场背景与商业价值在当今移动互联网红利逐渐消退的背景下,社交电商正成为流量增长的新突破口。推客小程序作为一种基于社交关系的分销工具,完美融合了社交传播与电商变现的双重优势,为企业和个人创业者提供了全新的商业机会…

Matlab处理多个循环的判断的方式:

1、使用正则表达式:pattern strcat(\b, strjoin(tuple, \b|\b), \b);% 4. 逐行处理文件内容 modifiedContents {}; % 存储修改后的内容 for i 1:length(fileContents)line fileContents{i};% 使用正则表达式检查当前行是否包含元组中的任何元素if ~isempty(reg…

从字符串中“薅出”最长子串:LeetCode 340 Swift 解法全解析

文章目录摘要描述题解答案题解代码分析详细解析:示例测试及结果结果解释:时间复杂度总结摘要 在日常开发中,我们经常需要处理字符串,比如分析用户输入、文本挖掘、数据清洗等等。而这道题就特别实用:如何找到一个字符…

时序数据库厂商 TDengine 发布 AI 原生的工业数据管理平台 IDMP,“无问智推”改变数据消费范式

在工业企业越来越依赖数据驱动决策的今天,数据的获取不再是难题,难的是从纷繁复杂的数据中提炼出有用的信息。而 AI 的崛起,正在重塑整个数据分析的逻辑。 7 月 29 日晚,TDengine 发布了一款全新产品 —— TDengine IDMP&#xf…

HBase、MongoDB 和 Redis 的区别详解

这三者都是流行的 NoSQL 数据库,但设计目标、数据模型和适用场景有显著差异。以下是它们的核心对比: 1. 数据模型对比特性HBaseMongoDBRedis数据模型宽列存储(类似 BigTable)文档存储(BSON/JSON)键值存储&a…

设计模式之单例模式及其在多线程下的使用

很多时候,我们在使用类创建类的实例并不想可以创建很多实例对象,比如在数据库连接的时候,对于一个数据库的连接通常只需要连接池中的某个连接的实例,连接一次即可,对于session会话,用户在访问网页做会话保持…

Apache Ignite 2.8 引入的新指标系统(New Metrics System)的完整说明

这段文档是关于 Apache Ignite 2.8 引入的“新指标系统(New Metrics System)” 的完整说明。这是 Ignite 监控体系的一次重大升级,相比旧的、分散的统计方式,新系统更统一、灵活、可扩展。 我们来逐层拆解、通俗易懂地理解这个新…

【氮化镓】GaN同质外延p-i-n二极管中星形与三角形扩展表面缺陷的电子特性

2025年7月23日,美国国家标准与技术研究院(NIST)与美国海军研究实验室的Andrew J. Winchester等人在《Applied Physics Letters》期刊发表了题为《Electronic properties of extended surface defects in homoepitaxial GaN diodes》的文章,基于光电发射电子显微术、导电原子…

使用 Scrapy 框架定制爬虫中间件接入淘宝 API 采集商品数据

一、引言 在电商数据分析、市场调研等领域,获取淘宝平台上的商品数据是一项常见需求。淘宝提供了 API 接口,允许开发者通过授权的方式获取商品信息。本文将介绍如何使用 Scrapy 框架定制爬虫中间件,实现对淘宝 API 的接入,从而高…

Jmeter全局变量跨线程组的使用

一、线程组1中从数据库中查询到字段值二、BeanShell取样器中设置为全局变量#为什么说props.put("Out1",Out);其实是设置Out1为Jmeter的属性了呢? 因为在后面的调试取样器运行结果中,会发现如果只打开显示变量开关,是看不到Out1运行…

前端技术栈详解

前端技术栈是指构建现代Web应用程序所需的一系列技术和工具的集合。以下是当前主流前端技术栈的详细解析&#xff1a; 一、核心基础技术 1. HTML5 作用&#xff1a;网页内容的结构化标记关键特性&#xff1a; 语义化标签&#xff08;<header>, <section>, <arti…

Git Pull 时遇到 Apply 和 Abort 选项?详解它们的含义与应对策略

在使用 Git 进行团队协作时&#xff0c;git pull 是最常用的命令之一&#xff0c;用于拉取远程仓库的最新代码并合并到本地分支。但有时执行 git pull 后&#xff0c;Git 会提示 ​Apply&#xff08;应用&#xff09;​​ 和 ​Abort&#xff08;中止&#xff09;​​ 两个选项…

暑期算法训练.11

目录 47. 力扣203 移除链表元素 47.1 题目解析&#xff1a; ​编辑 47.2 算法思路&#xff1a; 47.3 代码演示&#xff1a; ​编辑 48. 力扣2.两数相加 48.1 题目解析&#xff1a; ​编辑 48.2 算法思路; 48.3 代码演示&#xff1a; 48.4 总结反思&#xff1a; …