CentOS7体系下安装PostgreSQL17数据库

打印 上一主题 下一主题

主题 1496|帖子 1496|积分 4488

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
体系:CentOS7.9
  关闭了体系防火墙firewalld服务和SELinux
  一、安装

1、下载安装包
  1. wget https://ftp.postgresql.org/pub/source/v17.4/postgresql-17.4.tar.gz
复制代码
2、解压安装包
  1. tar -xf postgresql-17.4.tar.gz
复制代码
3、安装依赖
  1. yum install gcc gcc-c++ make libicu-devel bison flex readline-devel zlib-devel
复制代码
4、编译安装
  1. cd postgresql-17.4/
  2. ./configure --prefix=/usr/local/pgsql
  3. make
  4. make install
复制代码
5、添加数据库用户,并创建数据存储目录
  1. useradd postgres
  2. mkdir /usr/local/pgsql/data
  3. chown postgres:postgres /usr/local/pgsql/data
复制代码
6、配置环境变量
  1. vim /etc/profile.d/pgsql.sh
  2. export PGHOME=/usr/local/pgsql
  3. export PGDATA=/usr/local/pgsql/data
  4. export PATH=$PGHOME/bin:$PATH
  5. #使用环境变量生效
  6. source /etc/profile.d/pgsql.sh
复制代码
7、 体系参数优化
  1. vim /etc/sysctl.conf
  2. #添加以下内容
  3. vm.nr_hugepages = 6144
  4. #使用参数生效
  5. sysctl -p
复制代码
8、数据库初始化
  1. #切换到postgres用户
  2. su - postgres
  3. #执行数据初始化
  4. /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
  5. #退出postgres用户
  6. exit
复制代码
9、修改配置文件
  1. vim /usr/local/pgsql/data/postgresql.conf
  2. #修改以下配置
  3. listen_addresses = '*'
  4. max_connections = 300
  5. shared_buffers = 4GB
  6. work_mem = 64MB
  7. maintenance_work_mem = 1GB
  8. effective_cache_size = 12GB
  9. wal_buffers = 16MB
  10. 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) 使用自带脚本方式启动
  1. #复制源码包里的脚本至etc/init.d目录下,并加执行权限
  2. cp ./contrib/start-scripts/linux /etc/init.d/postgresql
  3. chmod +x /etc/init.d/postgresql
  4. #启动服务
  5. service postgresql start
  6. #设置开机启动
  7. chkconfig --add postgresql
复制代码
(2) 使用systemd举行管理
service文件如下:
  1. vim /etc/systemd/system/postgresql.service
  2. [Unit]
  3. Description=PostgreSQL database server
  4. Documentation=man:postgres(1)
  5. After=network-online.target
  6. [Service]
  7. Type=forking
  8. User=postgres
  9. Group=postgres
  10. Environment=PGDATA=/usr/local/pgsql/data
  11. ExecStart=/usr/local/pgsql/bin/pg_ctl start -D ${PGDATA}
  12. ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D ${PGDATA} -m fast
  13. ExecReload=/home/postgres/bin/pg_ctl reload -D ${PGDATA}
  14. TimeoutSec=300s
  15. [Install]
  16. WantedBy=multi-user.target
  17. systemctl daemon-reload
  18. 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、配置远程访问权限
  1. vim /usr/local/pgsql/data/pg_hba.conf
  2. #添加以下内容,管理员用户postgres不允许远程连接
  3. host    all             postgres        0.0.0.0/0               reject
  4. host    all             all             0.0.0.0/0               password
  5. #然后重启数据库
  6. service postgresql restart
复制代码
二、常用操作

1、登录数据库
  1. #切换到postgres用户
  2. su - postgres
  3. psql
  4. #或在root用户下使用以下命令
  5. psql -U postgres
复制代码
2、查看当前登任命户/数据库
  1. postgres=# \c
  2. You are now connected to database "postgres" as user "postgres".
  3. postgres=# select user;
  4.    user   
  5. ----------
  6. postgres
  7. (1 row)
  8. postgres=# select current_user;
  9. current_user
  10. --------------
  11. postgres
  12. (1 row)
  13. postgres=# select current_database();
  14. current_database
  15. ------------------
  16. postgres
  17. (1 row)
复制代码
3、创建数据库
  1. postgres=# create database mydb;
  2. CREATE DATABASE
复制代码
4、切换数据库
  1. postgres=# \c mydb
  2. You are now connected to database "mydb" as user "postgres".
  3. mydb=#
复制代码
  \l 列举数据库
\dt 列举表
\d tblname 查看表结构
\di 查看索引
  5、创建脚色与用户并授权
PostgreSQL使用脚色的概念管理数据库访问权限。一个脚色可以被看成是一个数据库用户大概是一个数据库用户组,这取决于脚色被怎样设置。脚色可以拥有数据库对象(比方,表和函数)并且可以或许把那些对象上的权限赋予给其他脚色来控制谁能访问哪些对象。此外,还可以把一个脚色中的成员资格授予给另一个脚色,这样允许成员脚色使用被赋予给另一个脚色的权限。
脚色的概念把“用户”和“组”的概念都包括在内。在PostgreSQL版本 8.1 之前,用户和组是完全差异的两种实体,但是如今只有脚色。任意脚色都可以扮演用户、组大概两者。
(1) 创建用户:
  1. postgres=# CREATE USER testuser with password 't123456';
  2. CREATE ROLE
复制代码
  CREATE USER等同于CREATE ROLE, 但CREATE USER默认包罗LOGIN,而CREATE ROLE不包罗。
  如下两者等价,创建具有登录权限的脚色:
  1. CREATE ROLE name LOGIN;
  2. CREATE USER name;
复制代码
  查看脚色信息:\du 或\du+ 查看,也可以查看体系表 select * from pg_roles;
  (2) 创建schema(与用户名同名【租户】)
  1. postgres=# \c mydb;
  2. You are now connected to database "mydb" as user "postgres".
  3. mydb=# create schema testuser;
  4. CREATE SCHEMA
复制代码
(3) 授权用户的schema全部权限:
  1. mydb=# GRANT ALL PRIVILEGES ON SCHEMA testuser TO testuser;
  2. GRANT
复制代码
(4) 普通用户登录
  1. psql -U testuser -d mydb
复制代码
6、回收全部授权
(1) 回收用户在SCHEMA下全部表的全部权限
  1. postgres=# REVOKE ALL PRIVILEGES ON SCHEMA testuser FROM testuser;
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

圆咕噜咕噜

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表