PostgreSQL 源码部署

news/2024/10/22 17:35:19/

文章目录

    • 说明
    • 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,若发现无法执行复杂函数时可适当调整该参数

http://www.ppmy.cn/news/77014.html

相关文章

第三讲 Ubuntu系统FFmpeg环境搭建

Ubuntu系统安装 0-对于Ubuntu系统,系统默认是已经安装FFmpeg的,可通过ffmpeg -version,查看系统的已经安装的版本信息。如果系统内没有安装则需要按照一下步骤进行。 1-获取编译环境依赖: sudo apt-get update -qq && sudo apt-ge…

如何在 Linux 服务器上更改分区方案?

在 Linux 服务器上,分区方案对于数据存储和系统管理至关重要。当服务器的存储需求发生变化或者需要重新组织分区时,更改分区方案是一个常见的任务。 本文将详细介绍如何在 Linux 服务器上更改分区方案。 步骤一:备份数据 在更改分区方案之前…

C++的历史

C是一种广泛使用的编程语言。C于1983年由丹尼斯里奇(Dennis Ritchie)在贝尔实验室创造,它是C语言的扩展。C的设计初衷是为了提高代码的可重用性和可维护性。它允许开发人员使用面向对象编程(OOP)范例,这使得…

BFT 最前线 | 王小川:2033机器智慧将超人类;扎克伯格财富暴涨;哈工大:能跳跃的昆虫机器人;北京支持“1+4”机器人领域

原创 | 文 BFT机器人 名人动态 CELEBRITY NEWS 01 王小川:10年后机器智慧将超过人类 年底将推出对标GPT-3.5的模型 科技预言大师雷库兹韦尔说人工智能的奇点,机器智慧超过人类会发生在2045年,王小川的判断比这更激进,他认为这一…

Call for Papers丨第十一届全国社会媒体处理大会,AI Open设独立专刊投稿渠道

全国社会媒体处理大会(SMP)专注于以社会媒体处理为主题的科学研究,为传播社会媒体处理最新的学术研究与技术成果提供广泛的交流平台,旨在构建社会媒体处理领域的产学研生态圈,成为中国乃至世界社会媒体处理的风向标。 …

记录 aaPanel 安装环境失败的经历及解决方案

最近我在一台Debian 11的国外服务器上安装aaPanel(即宝塔面板的国际版)。在安装完面板后,我继续安装LNMP环境。几分钟后,aaPanel提示LNMP环境已经安装成功。然而,在创建站点时,却提示环境没有安装。 问题排…

flutter系列之:做一个下载按钮的动画

文章目录 简介定义下载的状态定义DownloadButton的属性让DownloadButton的属性可以动态变化定义downloadController定义DownloadButton的细节总结 简介 我们在app的开发过程中经常会用到一些表示进度类的动画效果,比如一个下载按钮,我们希望按钮能够动态…

Trie与可持久化Trie

Trie Trie,也称为字典树或前缀树,是一种用于高效存储和检索字符串的树形数据结构。它的主要特点是利用字符串的公共前缀来减少存储空间和提高查询效率。下面是对 Trie 的常见操作的介绍: 插入(Insertion)&#xff1a…