CentOS7系统下安装PostgreSQL17数据库

news/2025/3/31 12:16:25/文章来源:https://www.cnblogs.com/hovin/p/18797847

系统:CentOS7.9

关闭了系统防火墙firewalld服务和SELinux

一、安装

1、下载安装包

wget https://ftp.postgresql.org/pub/source/v17.4/postgresql-17.4.tar.gz

2、解压安装包

tar -xf postgresql-17.4.tar.gz

3、安装依赖

yum install gcc gcc-c++ make libicu-devel bison flex readline-devel zlib-devel

4、编译安装

cd postgresql-17.4/./configure --prefix=/usr/local/pgsqlmakemake install

5、添加数据库用户,并创建数据存储目录

useradd postgresmkdir /usr/local/pgsql/datachown postgres:postgres /usr/local/pgsql/data

6、配置环境变量

vim /etc/profile.d/pgsql.sh
export PGHOME=/usr/local/pgsql
export PGDATA=/usr/local/pgsql/data
export PATH=$PGHOME/bin:$PATH#使用环境变量生效
source /etc/profile.d/pgsql.sh

7、 系统参数优化

vim /etc/sysctl.conf
#添加以下内容
vm.nr_hugepages = 6144#使用参数生效
sysctl -p

8、数据库初始化

#切换到postgres用户
su - postgres#执行数据初始化
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data#退出postgres用户
exit

9、修改配置文件

vim /usr/local/pgsql/data/postgresql.conf
#修改以下配置
listen_addresses = '*'
max_connections = 300
shared_buffers = 4GB
work_mem = 64MB
maintenance_work_mem = 1GB
effective_cache_size = 12GB
wal_buffers = 16MB
checkpoint_completion_target = 0.9
  • listen_addresses:监听地址,默认使用localhost,使用'*'表示所有
  • max_connections:决定允许的最大数据库连接数。过多的连接会增加系统开销和资源竞争。通常可以使用连接池工具(如PgBouncer)来控制并发连接数;
  • shared_buffers:这是PostgreSQL用于缓存表数据的共享内存区域,通常建议设置为物理内存的25%-40%。如果设置过低,会导致频繁的磁盘访问;设置过高则会占用操作系统内存,减少可用的文件缓存;
  • work_mem:每个查询操作(如排序、哈希表)所使用的内存。这个参数是每个查询连接单独分配的,因此需要根据查询复杂度和并发量合理设置。如果过小,查询需要频繁进行磁盘交换;过大会导致内存不足。典型值在10MB-100MB之间;
  • maintenance_work_mem:控制PostgreSQL在执行维护操作时使用的内存大小,比如创建索引、VACUUM。推荐设置为较大的值,尤其是在大规模数据集上操作时;
  • effective_cache_size:PostgreSQL根据此参数判断系统可用的文件系统缓存大小,从而决定是否使用索引扫描或全表扫描。建议设置为物理内存的50%-75%;
  • wal_buffers:建议设置为shared_buffers的1/32,用于缓冲WAL数据,避免频繁写入磁盘;
  • checkpoint_completion_target:设置为接近1的值可以平滑WAL日志写入压力,减少突发I/O操作。

10、启动服务

(1) 使用自带脚本方式启动

#复制源码包里的脚本至etc/init.d目录下,并加执行权限
cp ./contrib/start-scripts/linux /etc/init.d/postgresql
chmod +x /etc/init.d/postgresql#启动服务
service postgresql start#设置开机启动
chkconfig --add postgresql

(2) 使用systemd进行管理

service文件如下:

vim /etc/systemd/system/postgresql.service
[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)
After=network-online.target[Service]
Type=forking
User=postgres
Group=postgres
Environment=PGDATA=/usr/local/pgsql/data
ExecStart=/usr/local/pgsql/bin/pg_ctl start -D ${PGDATA}
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D ${PGDATA} -m fast
ExecReload=/home/postgres/bin/pg_ctl reload -D ${PGDATA}
TimeoutSec=300s[Install]
WantedBy=multi-user.targetsystemctl daemon-reload
systemctl start postgresql

如果使用Type=notify要求服务器配置时使用./configure --with-systemd构建

(3) 直接使用命令行启动:

su - postgres

/usr/local/pgsql/bin/pg_ctl start -l logfile -D /usr/local/pgsql/data

11、配置远程访问权限

vim /usr/local/pgsql/data/pg_hba.conf
#添加以下内容,管理员用户postgres不允许远程连接
host    all             postgres        0.0.0.0/0               reject
host    all             all             0.0.0.0/0               password#然后重启数据库
service postgresql restart

二、常用操作

1、登录数据库

#切换到postgres用户
su - postgres
psql#或在root用户下使用以下命令
psql -U postgres

2、查看当前登录用户/数据库

postgres=# \c
You are now connected to database "postgres" as user "postgres".postgres=# select user;user   
----------postgres
(1 row)postgres=# select current_user;current_user 
--------------postgres
(1 row)postgres=# select current_database();current_database 
------------------postgres
(1 row)

3、创建数据库

postgres=# create database mydb;
CREATE DATABASE

4、切换数据库

postgres=# \c mydb
You are now connected to database "mydb" as user "postgres".
mydb=# 

\l 列举数据库
\dt 列举表
\d tblname 查看表结构
\di 查看索引

5、创建角色与用户并授权

PostgreSQL使用角色的概念管理数据库访问权限。一个角色可以被看成是一个数据库用户或者是一个数据库用户组,这取决于角色被怎样设置。角色可以拥有数据库对象(例如,表和函数)并且能够把那些对象上的权限赋予给其他角色来控制谁能访问哪些对象。此外,还可以把一个角色中的成员资格授予给另一个角色,这样允许成员角色使用被赋予给另一个角色的权限。

角色的概念把“用户”和“组”的概念都包括在内。在PostgreSQL版本 8.1 之前,用户和组是完全不同的两种实体,但是现在只有角色。任意角色都可以扮演用户、组或者两者。

(1) 创建用户:

postgres=# CREATE USER testuser with password 't123456';
CREATE ROLE

CREATE USER等同于CREATE ROLE, 但CREATE USER默认包含LOGIN,而CREATE ROLE不包含。

如下两者等价,创建具有登录权限的角色:

CREATE ROLE name LOGIN;
CREATE USER name;

查看角色信息:\du\du+ 查看,也可以查看系统表 select * from pg_roles;

(2) 创建schema(与用户名同名【租户】)

postgres=# \c mydb;
You are now connected to database "mydb" as user "postgres".
mydb=# create schema testuser;
CREATE SCHEMA

(3) 授权用户的schema所有权限:

mydb=# GRANT ALL PRIVILEGES ON SCHEMA testuser TO testuser;
GRANT

(4) 普通用户登录

psql -U testuser -d mydb

6、回收所有授权

(1) 回收用户在SCHEMA下所有表的所有权限

postgres=# REVOKE ALL PRIVILEGES ON SCHEMA testuser FROM testuser;

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

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

相关文章

Vue3封装支持Base64导出的电子签名组件

效果图准备工作 组件内用到elementPlus,vue-esign组件,使用前提前安装好。组件代码 <template><!-- 签名容器 --><div class="sign-container" ><div class="sign-preview" :class="[sizeClass, { has-sign: base64Img }]&quo…

产品经理研读:Agent的九种设计模式(图解+代码)

资料来源:火山引擎-开发者社区 引言 上周五我在一个社群里做了一次分享,题目是《从 YC 项目看 AI 趋势以及 AI agent 开发工具类产品该如何设计》,收到了大家不错的反馈,这篇文章和大家详细讲讲分享中提到的 Agent设计模式 1.Agent 的九种设计模式。 先来一张图镇楼,欢迎大…

获取字节火山DeepSeek系列 API完整教程及超多实用玩法!

资料来源:火山引擎-开发者社区原文首发在“Equity AI”公众号,内容经由“WaytoAGI社区整理汇总”,本篇包含了火山DeepSeek API使用的几种方式:飞书多维表格调用,Coze智能体调用,浏览器插件调用。快薅羊毛用起来吧!发现火山方舟大模型服务平台的模型服务计费文档悄咪咪的…

MCR101-ASEMI电源控制电路专用MCR101

MCR101-ASEMI电源控制电路专用MCR101编辑:LL MCR101-ASEMI电源控制电路专用MCR101 型号:MCR101 品牌:ASEMI 封装:TO-92 阻断电压:600V~800V 通态电流:1.0A 类型:单向可控硅 工作温度:-40℃~150℃ MCR101在工业自动化、智能家居和能源管理领域,"精准控制"始终…

IDEA中如何创建scala的对象

1、创建项目 打开Intellij IDEA,点击“Create New Project”。 选择“Java”作为Language,选择“Maven”作为Build System,选择JDK版本; 输入GroupId的名称,一般是com.xxx; 设置完成后点击“Create”。 2、配置Maven File -> Settings -> Build,Execution,Deploym…

fastjson-1.2.68-bypass

fastjson-1.2.68 绕过 在 1.2.47 的利用 mappings 缓存恶意类绕过 autoType 修复后,fastjson 又陆续爆出来了一些黑名单的绕过方式。直到 1.2.68 又有了新的思路去绕过 autoType 安全机制 我们先来看看 fastjson1.2.68 又引入了哪些安全机制 1.2.68 引入了一个新的安全机制 sa…

【日记】感觉沉着冷静是很难得的品质(1200 字)

正文今天不太忙。居然看了一半时间的书,而且居然从零看了一半多了。昨天晚上,一个偶然的原因,看了六层楼跟别人聊天的视频。其实上班之后已经蛮久都没有看他了,时间真的很稀缺。视频中提到了他写的书。他本身表达能力就很好,我想着书应该也不差,就下了一本电子版。刚开始…

Supergateway:MCP服务器的远程调试与集成工具

Supergateway 是一款专为 MCP(Model Context Protocol)服务器设计的远程调试与集成工具,通过 SSE(Server-Sent Events)或 WebSocket(WS)协议实现基于 stdio 的服务器与客户端的高效通信。以下是其核心功能及使用场景的详细解析:核心功能多协议支持支持 SSE 和 WebSocke…

怎么办?听说Windows远程桌面要撤销?解决办法还真有!

3月11日微软正式宣布,将在2025年5月27日关闭并从Microsoft Store中移除Windows远程桌面应用程序,用户将无法通过旧版远程桌面访问这些功能。微软公司此次决定下架Microsoft远程桌面应用,主要是为了推广功能更为强大的Windows App,这种23年上线的解决方案提供了更加统一的界…

电脑文件同步软件,想要备份电脑文方法有哪些?

备份电脑文件的方法有多种,可根据需求选择适合的方案。以下是常见的备份方式及工具推荐,涵盖不同场景:一、使用系统内置工具 Windows 文件历史记录 方法: 连接外部硬盘或网络驱动器。 搜索「文件历史记录」→ 选择驱动器 → 开启自动备份。 可设置备份频率(如每小时)。 二…

我的家庭实验室服务器集群硬件清单

概述 之前有热心读者想要了解我的家庭实验室服务器集群的硬件配置清单. 所以有这篇文章.📝声明: 不是广告, 不是推广, 不是软广.先放2张照片:📝声明: 确实没有理线天赋, 这已经是我理线的极限了, 求轻喷.😂硬件包括:网络一图左下亮绿光的: 瑞莎 Radxa E20C 一图中下: 兮克…

python+pytest+loguru+allure日志封装

一、日志类封装from io import StringIO import sys import os from loguru import logger sys.path.append((os.path.abspath(os.path.join(os.path.dirname(__file__), ../)))) project_path = os.path.dirname(os.path.join(os.path.dirname(__file__))) log_path = os.path…