当前位置: 首页 > news >正文

PostgreSQL 源码部署

文章目录

    • 说明
    • 1. 准备工作
      • 1.1 源码包下载
      • 1.2 解压安装目录
      • 1.3 安装依赖包
      • 1.4 添加用户
      • 1.5 创建数据目录
    • 2. 编译安装
      • 2.1 源码编译
      • 2.2 配置环境变量
      • 2.3 初始化数据库
      • 2.4 启动数据库
      • 2.5 连接数据库
    • 3. 参数调整
      • 3.1 配置 pg_hba
      • 3.2 监听相关
      • 2.4 日志文件
      • 2.5 内存参数

说明

本篇文章介绍 PostgreSQL 单机源码编译部署的详细步骤。

1. 准备工作

1.1 源码包下载

进入 PostgreSQL 官网下载页面 选择 Source 栏目:
在这里插入图片描述

接着就进入源码版本目录,选择需要安装的版本下载即可。

在这里插入图片描述

1.2 解压安装目录

源码包下载完成后,上传到服务器,进行解压缩:

tar -xf postgresql-14.8.tar.gz

1.3 安装依赖包

yum install gcc gcc-c++ readline-devel readline readline-dev zlib-devel

1.4 添加用户

groupadd postgres
useradd -g postgres postgres

1.5 创建数据目录

为 PostgreSQL 创建存储数据的目录:

mkdir -p /data/pgsql/{data,logs}
chown -R postgres:postgres /data/pgsql/

2. 编译安装

2.1 源码编译

cd 到源码目录下:

cd /opt/postgresql-14.8

执行 configure:

./configure --prefix=/usr/local/pgsql
参数名含义
prefix软件目录也就是安装目录
with-perl编译时添加该参数才能够使用 perl 语法的 PL/Perl 过程语言写自定义函数,需要提前安装好相关的 perl 开发包:libperl-dev
with-python编译时添加该参数才能够使用 python 语法的 PL/Perl 过程语言写自定义函数,需要提前安装好相关的 python 开发包:python-dev
with-blocksize & with-wal-blocksize默认情况下 PG 数据库的数据页大小为 8KB,若数据库用来做数仓业务,可在编译时将数据页进行调整,以提高磁盘 IO

编译安装:

make && make install

编译完成后,会在 prefix 参数指定的目录下生成 PostgreSQL 程序文件。

2.2 配置环境变量

根据自己实际环境,修改安装目录和数据目录:

vi /etc/profile
export PGHOME=/usr/local/pgsql
export PGDATA=/data/pgsql/data
export PATH=$PGHOME/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/pgsql/lib
source /etc/profile

2.3 初始化数据库

切换到 postgres 用户:

su postgres

执行数据库初始化 -D 选项后面是数据目录:

initdb -D /data/pgsql/data/
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.The database cluster will be initialized with locale "zh_CN.UTF-8".
The default database encoding has accordingly been set to "UTF8".
initdb: could not find suitable text search configuration for locale "zh_CN.UTF-8"
The default text search configuration will be set to "simple".Data page checksums are disabled.fixing permissions on existing directory /data/pgsql/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Shanghai
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... okinitdb: warning: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.Success. You can now start the database server using:pg_ctl -D /data/pgsql/data/ -l logfile start

2.4 启动数据库

进入 logs 目录下,创建启动日志文件,将启动时的日志输出到该文件:

touch /data/pgsql/logs/start.log

启动 PostgreSQL:

pg_ctl -D /data/pgsql/data/ -l /data/pgsql/logs/start.log start 

关闭数据库可以使用下方命令:

# 关闭数据库
pg_ctl -D /data/pgsql/data/ -l /data/pgsql/logs/start.log stop 
# 重启数据库
pg_ctl -D /data/pgsql/data/ -l /data/pgsql/logs/start.log restart

2.5 连接数据库

启动成功使用 psql 即可进入数据库:

>>>>$ psql
psql (14.8)
Type "help" for help.postgres=# select version();version                                                 
---------------------------------------------------------------------------------------------------------PostgreSQL 14.8 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit

3. 参数调整

3.1 配置 pg_hba

PostgreSQL 数据目录中,会自动生成 pg_hba.conf 文件,该文件是一个黑名单访问控制文件,可以控制允许哪些 IP 地址的机器访问数据库。默认,不允许远程访问数据,所以安装完成后需要配置下。

# TYPE  DATABASE        USER            ADDRESS                 METHOD# "local" is for Unix domain socket connections only
# Type 表示访问方式,local 表示本地套接字访问,DATABASE、USER 分别表示数据库和用户
# 参数 all 表示所有的数据库或用户,ADDRESS 表示一个地址或者网段,METHOD 表示验证的方式
# 默认的 trust 表示完全信任,password 表示发送明文密码,不建议使用,建议使用 md5 模式
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

可以在 pg_hba 文件中加入下面一行,表示允许任何用户远程连接数据库,连接时需要提供密码:

host    all             all             0/0                     md5

详细可参考文档:pg_hba 文件说明

3.2 监听相关

在数据目录中的 postgresql.cnf 中,可以找到如下内容:

listen_addresses = 'localhoset'         # what IP address(es) to listen on;# comma-separated list of addresses;# defaults to 'localhost'; use '*' for all# (change requires restart)

其中,参数 listen_addresses 表示监听的 IP 地址,默认是在 localhost/127.0.0.1 处监听,这样会导致远程主机无法访问数据库,如果需要远程访问,需要将其设置为实际网络地址,设置为 * 表示监听所有地址,该参数修改重启生效。

PS:配置完 3.1 和 3.2 两个步骤,PostgreSQL 就可以支持远程连接。

下表是其它常见监听相关的参数,按需设置:

参数含义
port服务器监听TCP端口,默认 5432
max_connectionsServer 端允许最大连接数,默认 100
superuser_reserved_connectionsServer 端为超级账号保留的连接数,默认3
unix_socket_directoryServer 监听客户端 Unix 嵌套字目录,默认 /tmp

2.4 日志文件

下面是 PostgreSQL 日志相关的参数,一般都是需要配置:

参数含义
logging_collector是否打开日志
log_rotation_age超过多少天生产一个新的日志文件
log_rotation_size超过多少大小生成一个新的日志文件
log_directory日志目录,可以是绝对路径或相对 PGDATA 的相对路径
log_destination日志记录类型,默认是 stderr,只记录错误输出
log_filename日志文件名,默认是 postgresql-%Y-%m-%d_%H%M%S.log
log_truncate_on_rotation当日志名已存在时,是否覆盖原文件

以下是几个常用的配置模版,每天生成一个新的日志文件:

logging_collector = on
log_directory = '/data/pgsql/logs'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_truncate_on_rotation = off
log_rotation_age = 1d
log_rotation_size = 0

每当一个日志写满时(如 100MB)切换一个日志:

logging_collector = on
log_directory = '/data/pgsql/logs'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_truncate_on_rotation = off
log_rotation_age = 0
log_rotation_size = 100MB

只保留最近 7 天的日志,进行循环覆盖:

logging_collector = on
log_directory = '/data/pgsql/logs'
log_filename = 'error_log.log'
log_truncate_on_rotation = on
log_rotation_age = 7d
log_rotation_size = 0

2.5 内存参数

熟悉 MySQL 的同学都知道它有一个参数 innodb_buffer_pool 限制 innodb 引擎缓冲池的大小,buffer pool 越大可以缓存的页就越多,可以减少很多磁盘 IO 消耗,提升数据库的性能。shared_buffer 在 PostgreSQL 中与 MySQL 的 buffer pool 是异曲同工。

参数含义
shared_buffer共享内存缓存区大小,默认 128MB
temp_buffers每个会话使用的临时缓存区大小,默认 8MB
work_mem内存临时表排序操作或者 hash join 需要使用到的内存缓存大小,默认 4MB
maintenance_work_mem对于维护性操作(vacuum、create index)最大使用内存,默认 64M,最小 1M
max_stack_depthServer 端执行堆栈最大安全深度,默认 2M,若发现无法执行复杂函数时可适当调整该参数

相关文章:

PostgreSQL 源码部署

文章目录 说明1. 准备工作1.1 源码包下载1.2 解压安装目录1.3 安装依赖包1.4 添加用户1.5 创建数据目录 2. 编译安装2.1 源码编译2.2 配置环境变量2.3 初始化数据库2.4 启动数据库2.5 连接数据库 3. 参数调整3.1 配置 pg_hba3.2 监听相关2.4 日志文件2.5 内存参数 说明 本篇文…...

医疗IT系统安科瑞隔离电源装置在医院的应用

【摘要】介绍该三级综合医院采用安科瑞隔离电源系统5件套,使用落地式配电柜安装方式,从而实现将TN系统转化为IT系统,以及系统绝缘情况监测。 【关键词】医用隔离电源系统;IT系统;绝缘情况监测;三级综合医院…...

高压放大器在3D打印中的应用

随着3D打印技术的快速发展,高压放大器在3D打印中的应用越来越受到人们的关注。高压放大器在3D打印中扮演着非常重要的角色,可以提高3D打印的效率和精度,从而实现更高的打印质量。本文将详细介绍高压放大器在3D打印中的应用及其原理。 高压放…...

chatgpt赋能python:Python中的三角函数介绍

Python中的三角函数介绍 Python作为一种高级编程语言,可以处理基础算术运算、三角函数等高等数学的操作。其中,三角函数是常用的数学函数之一,Pyhon中的三角函数包括正弦函数、余弦函数、正切函数等。 正弦函数 正弦函数在三角学中是最基本…...

异常检测论文1

本文仅作为个人阅读文献&#xff0c;做笔记记录。 <> \usepackage[dvipsnames]{xcolor} 一、摘要部分&#xff1a; 我们发现&#xff0c;现有的数据集偏向于局部结构异常&#xff0c;如划痕、凹痕或污染。特别是&#xff0c;它们缺乏违反逻辑约束形式的异常&#xff0…...

linux搭建hadoop环境

1、安装JDK   &#xff08;1&#xff09;下载安装JDK&#xff1a;确保计算机联网之后命令行输入下面命令安装JDK    sudo apt-get install sun-java8-jdk   &#xff08;2&#xff09;配置计算机Java环境&#xff1a;打开/etc/profile&#xff0c;在文件最后输入下面…...

02 Maven创建及使用

maven作用 主要用作基于java平台的项目 maven能提供一种项目配置 maven能自动从maven的中央仓库帮我们自动下载并管路项目依赖的jar包 提供了标准的目录结构 中央仓库两种类型:共有的中央仓库:私有中央仓库 使用mvn -v查看是否安装成功 修改本地仓库的的位置 在setting…...

如何在 Rocky Linux 上检查磁盘空间?

在 Rocky Linux 上检查磁盘空间是系统管理和维护的重要任务之一。磁盘空间的监控和管理可以帮助我们及时发现和解决存储空间不足的问题&#xff0c;以确保系统的正常运行。本文将详细介绍在 Rocky Linux 上检查磁盘空间的方法。 方法 1&#xff1a;使用 df 命令 df 命令是 Li…...

【软考系统规划与管理师笔记】第2篇 信息技术知识1

目录 1 软件工程 1.1 软件需求分析与定义 1.2 软件设计、测试与维护 1.3 软件质量保证及质量评价 1.4 软件配置管理 1.5 软件过程管理 1.6 软件复用 2 面向对象系统分析与设计 2.1 面向对象设计的基本概念 2.2统一建模语言与可视化建模 3. 应用集成技术 3.1 数据库与…...

【无标题】ELISA-3(加装跟踪装置)—让群体协作更智能!

群体智能是近年来发展迅速的一个人工智能学科领域&#xff0c;通过对蚂蚁、蜜蜂等为代表的社会性昆虫群体行为的研究&#xff0c;实现分布式等智能行为。作为新一代人工智能的重要方向&#xff0c;群体智能通常用于无人机、机器人集群的协同作业。目前&#xff0c;群体智能在基…...

Dubbo源码解析一服务暴露与发现

Dubbo 服务暴露与发现 1. Spring中自定义Schema1.1 案例使用1.2 dubbo中的相关对象 2. 服务暴露机制2.1 术语解释2.2 流程机制2.3 源码分析2.3.1 导出入口2.3.2 导出服务到本地2.3.3 导出服务到远程(重点)2.3.4 开启Netty服务2.3.5 服务注册2.3.6 总结 3. 服务发现3.1 服务发现…...

有哪些工具软件一旦用了就离不开?

&#x1f496;前言 目前&#xff0c;随着科技的快速发展&#xff0c;电脑已经进入了许许多多人的生活 &#xff0c;在平日的学习、工作和生活里&#xff0c;我们会用的各种各样的强大软件。市面上除了某些大公司开发在强大软件&#xff0c;还有各路大神开发具有某些功能的强大…...

ObjectARX如何判断点和多段线的关系

目录 1 基本思路2 相关知识点2.1 ECS坐标系概述2.2 其他点坐标转换接口2.3 如何获取多段线的顶点ECS坐标 3 实现例程3.1 接口实现3.2 测试代码 4 实现效果 在CAD的二次开发中&#xff0c;点和多段线的关系是一个非常重要且常见的问题&#xff0c;本文实现例程以张帆所著《Objec…...

四、DRF序列化器create方法与update方法

上一章&#xff1a; 二、Django REST Framework (DRF)序列化&反序列化&数据校验_做测试的喵酱的博客-CSDN博客 下一章&#xff1a; 五、DRF 模型序列化器ModelSerializer_做测试的喵酱的博客-CSDN博客 一、背景 1、创建请求&#xff0c;post&#xff0c;用户输入…...

洛谷P8792 最大公约数

[蓝桥杯 2022 国 A] 最大公约数 题目描述 给定一个数组&#xff0c;每次操作可以选择数组中任意两个相邻的元素 x , y x, y x,y 并将其中的一个元素替换为 gcd ⁡ ( x , y ) \gcd(x, y) gcd(x,y)&#xff0c;其中 gcd ⁡ ( x , y ) \gcd(x, y) gcd(x,y) 表示 x x x 和 y…...

【SpringBoot集成Nacos+Dubbo】企业级项目集成微服务组件,实现RPC远程调用

文章目录 一、需求环境/版本 二、须知2.1、什么是RPC&#xff1f;2.2、什么是Dubbo&#xff1f;2.3、什么是Nacos&#xff1f; 三、普通的SpringBoot项目集成微服务组件方案&#xff08;笔者给出两种&#xff09;方案一&#xff08;推荐&#xff09;1、导入maven依赖&#xff0…...

MySQL主从同步(开GTID)

目录 一、搭建简单的主从同步 二、mysql删除主从&#xff08;若没有配置过可以不用进行这一步&#xff09; 1、停止slave服务器的主从同步 2、重置master服务 三、开启GTID 1、Master配置 2、Slave配置 一、搭建简单的主从同步 GTID原理&#xff1a;http://t.csdn.cn/g…...

打造精细化调研,这些产品榜上有名,你用了吗?

调查问卷是一种流行的数据收集工具&#xff0c;研究人员、营销人员和企业使用它来征求目标受众的反馈意见。调查问卷工具使创建、分发和分析调查问卷的过程变得更加简单和高效。想要做好一份调查问卷&#xff0c;选择一款好用的工具是少不了的。不过&#xff0c;在众多的问卷工…...

[golang gin框架] 37.ElasticSearch 全文搜索引擎的使用

一.全文搜索引擎 ElasticSearch 的介绍&#xff0c;以及安装配置前的准备工作 介绍 ElasticSearch 是一个基于 Lucene 的 搜索服务器,它提供了一个 分布式多用户能力的 全文搜索引擎&#xff0c;基于 RESTful web 接口,Elasticsearch 是用 Java 开发的&#xff0c;并作为 Apach…...

赋的几个发展阶段

赋&#xff0c;起源于战国&#xff0c;形成于汉代&#xff0c;是由楚辞衍化出来的&#xff0c;也继承了《诗经》讽刺的传统。关于诗和赋的区别&#xff0c;晋代文学家陆机在《文赋》里曾说: 诗缘情而绮靡&#xff0c;赋体物而浏亮。 也就是说&#xff0c;诗是用来抒发主观感情…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...

Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一&#xff1a;HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二&#xff1a;Floyd 快慢指针法&#xff08;…...