Linux之postgresql 12.4安装

分别用yum命令和离线两种方式安装PostgreSQL 12.4,且对.bash_profile和.bashrc在系统中的应用作用做了说明。

也表述了PostgreSQL数据库的pg_hba.conf配置文件各项参数的含义。

虚拟机环境:虚拟机CentOS 7.8, postgresql-12.4.tar.gz

本地环境:Windows 10,pgadmin 4


目录

1 使用yum存储库安装

1.1 官网选择对应系统和安装版本

1.2 postgreSQL安装

1.3 配置用户

1.4 配置pg_hba.conf与postgresql.conf监听

1.5 远程pgadmin登陆

2 本地离线安装

2.1 删除已安装的postgres

2.2 下载解压postgreSQL安装

2.3 configure安装环境检测

2.4 编译

2.5 安装

2.6 创建postgres用户与数据库data目录

2.7 配置环境变量

2.8 初始化数据库

2.9 配置pg_hba.conf与postgresql.conf监听

2.10 开机启动

2.11 远程pgadmin登录

3 bash_profile和.bashrc的区别

4 pg_hba.conf 配置参数

4.1  TYPE

4.2  DATABASE

4.3  USER

4.4  ADDRESS

4.5  METHOD

例子

参考


 


1 使用yum存储库安装

 

1.1 官网选择对应系统和安装版本

https://www.postgresql.org/download/linux/redhat/

 

 

1.2 postgreSQL安装

安装存储库RPM

[root@skycloud ~]# yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm  

 

安装PostgreSQL

[root@skycloud ~]# yum install -y postgresql12-server  

初始化数据库与自启动

[root@skycloud ~]# /usr/pgsql-12/bin/postgresql-12-setup initdb  
[root@skycloud ~]# systemctl enable postgresql-12  
[root@skycloud ~]# systemctl start postgresql-12

  

 

1.3 配置用户

(1)安装完之后,默认已经创建postgres系统用户,用于执行PostgreSQL,修改其密码

[root@skycloud skycity]# passwd postgres

(2)切换到postgres用户,提示符变更为“-bash-4.2$”,同时数据库中也会生成一个名为“postgres”的数据库用户,且密码已自动生成。

(3)PostgreSQL在数据库用户同名的系统账号下登录免密,进入后可修改数据库密码

[root@skycloud ~]# su postgres  
bash-4.2$ psql -U postgres
postgres=# alter user postgres with password '123456';

 

1.4 配置pg_hba.conf与postgresql.conf监听

(1)找到/var/lib/pgsql/12/data下pg_hba.conf,修改其内容 

bash-4.2$ vim /var/lib/pgsql/12/data/pg_hba.conf

加入内容

(2) 修改/var/lib/pgsql/12/data下postgresql.conf,监听地址为*,端口为5432

bash-4.2$ vim /var/lib/pgsql/12/data/postgresql.conf  

(3)重启postgresql-12服务

切换到root账户,重启服务

[root@skycloud ~]# systemctl restart postgresql-12  

 

1.5 远程pgadmin登陆

在windows端打开pgadmin,准备连接到linux中的postgres

保存后,连接成功

 

2 本地离线安装

2.1 删除已安装的postgres

检查本机是否已安装postgres

# 检查PostgreSQL 是否已经安装
[root@skycloud ~]# rpm -qa | grep postgres 

# 检查PostgreSQL 安装位置  
[root@skycloud ~]# rpm -qal | grep postgres   

若已经安装,停止pg服务,使用rpm -e卸载

[root@skycloud ~]# systemctl stop postgresql-12.service
[root@skycloud ~]# rpm -e postgresql12-server-12.4-1PGDG.rhel7.x86_64 postgresql12-libs-12.4-1PGDG.rhel7.x86_64 postgresql12-12.4-1PGDG.rhel7.x86_64

手动删除文件/usr/pgsql-12

[root@skycloud ~]# rm -rf /usr/pgsql-12/

删除postgres用户和文件信息

[root@skycloud lib]# userdel -r postgres  

若进程在使用,使用kill -9 xxxxx杀死进程

删除postgres用户组

[root@skycloud skycity]# groupdel postgres  

2.2 下载解压postgreSQL安装

在 https://www.postgresql.org/ftp/source 下载postgres12.4安装包,拷贝至centos下usr/local/src并解压

[root@skycloud src]# tar -zxvf postgresql-12.4.tar.gz  
[root@skycloud src]# ll postgresql-12.4 

 

查看INSTALL内容,包含安装步骤

[root@skycloud src]# info postgresql-12.4/INSTALL  

 

2.3 configure安装环境检测

解压文件包含configure执行文件,用于检测系统安装环境。检测完后,configure程序还会帮助我们创建GNUmakefile或makefile文件,这是一个用于宏编译的文件,简单来说就是能够帮我们自动操作许多编译步骤的脚本文件。

运行configure程序,并且加上—prefix参数,用于指定软件安装的位置,这里安装目录为/usr/local/pgsql:

[root@skycloud postgresql-12.4]# ./configure --prefix=/usr/local/pgsql  

提示error

原因:readline , readline-dev缺少,或者使用--without-readline 选项关闭 readline 功能。但是readline 也就是命令行编辑,关闭的话,你直接用psql 就不能编辑命令行,如果输错指令,不能回滚命令历史记录,只能手工重新输入。

检查系统时候是否已安装readline包,提示已安装

[root@skycloud postgresql-12.4]# rpm -qa | grep readline  

通过 yum 搜索相关的 readline 包

[root@skycloud postgresql-12.4]# yum search readline  

提示需要readline-devel,可能与这个包有关

两种方式,在线使用yum执行

[root@skycloud postgresql-12.4]# yum -y install -y readline-devel  

另一种离线下载readline-devel,手动安装。

在 http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/ 搜索得到

readline-devel-6.2-11.el7.x86_64.rpm

ncurses-devel-5.9-14.20130511.el7_4.x86_64.rpm

拷贝至/usr/local.src中安装,然后执行

[root@skycloud postgresql-12.4]# rpm -ivh /usr/local/src/ncurses-devel-5.9-14.20130511.el7_4.x86_64.rpm  
[root@skycloud postgresql-12.4]# rpm -ivh /usr/local/src/readline-devel-6.2-11.el7.x86_64.rpm  

再执行/configure,又报error:zlib library not found

继续找到包 zlib-devel-1.2.7-18.el7.x86_64.rpm ,拷贝安装后终于无错

[root@skycloud postgresql-12.4]# rpm -ivh /usr/local/src/zlib-devel-1.2.7-18.el7.x86_64.rpm 
[root@skycloud postgresql-12.4]# ./configure --prefix=/usr/local/pgsql

​​​​​

且生成了GNUmakefile文件

 

2.4 编译

使用make命令进行编译

[root@skycloud postgresql-12.4]# make clean;make 

等待几分钟完成了,等待安装。

 

2.5 安装

使用make insatall命令执行安装

[root@skycloud postgresql-12.4]# make install  

查看在usr/local预设值的安装目录pgsql

 

2.6 创建postgres用户与数据库data目录

创建postgres组与postgres用户

[root@skycloud skycity]# groupadd postgres  
[root@skycloud skycity]# useradd -g postgres -m postgres  
[root@skycloud skycity]# passwd postgres  

在/usr/local/pgsql下创建data文件夹,并将其权限授予postgrs

[root@skycloud skycity]# mkdir -p /usr/local/pgsql/data  
[root@skycloud pgsql]# chown postgres:postgres /usr/local/pgsql/data/

 

2.7 配置环境变量

切换到postgres用户,在家目录下,编辑.bashrc

[root@skycloud pgsql]# su postgres  
[postgres@skycloud pgsql]$ cd ~  
[postgres@skycloud ~]$ ll -a  
[postgres@skycloud ~]$ vim .bashrc 

加入如下语句,保存退出

PGHOME=/usr/local/pgsql  

PGDATA=/usr/local/pgsql/data  

PATH=$PATH:$HOME/.local/bin:$HOME/bin:$PGHOME/bin  

export PGHOME PGDATA PATH 

使其生效 

[postgres@skycloud ~]$ source .bashrc 

 

2.8 初始化数据库

初始化数据库

[postgres@skycloud ~]$ initdb

启动数据库

[postgres@skycloud ~]$ pg_ctl start  

设置postgres密码

[postgres@skycloud ~]$ psql -U postgres 

 

2.9 配置pg_hba.conf与postgresql.conf监听

找到/usr/local/pgsql/data下pg_hba.conf,修改其内容

[postgres@skycloud ~]$ vim /usr/local/pgsql/data/pg_hba.conf  

加入内容

找到/usr/local/pgsql/data下postgresql.conf,监听地址为*,端口为5432

[postgres@skycloud ~]$ vim /usr/local/pgsql/data/postgresql.conf  

重启postgresql服务

[postgres@skycloud ~]$ pg_ctl restart

 

2.10 开机启动

拷贝源安装包下postgres-12.4/contrib/start-scripts/linux至etc/init.d中,并命名为postgresql。检查修改其中的路径与实际相符合,并添加执行权限

[root@skycloud pgsql]# cp /usr/local/src/postgresql-12.4/contrib/start-scripts/linux /etc/init.d/postgresql  
[root@skycloud pgsql]# vim /etc/init.d/postgresql  
[root@skycloud pgsql]# chmod +x /etc/init.d/postgresql

加入开机启动

[root@skycloud pgsql]# chkconfig --add postgresql  
[root@skycloud pgsql]# chkconfig postgresql on  
[root@skycloud pgsql]# systemctl start postgresql.service   
[root@skycloud pgsql]# systemctl status postgresql.service   
[root@skycloud pgsql]# systemctl enable postgresql.service

 

2.11 远程pgadmin登录

在windows端打开pgadmin,准备连接到linux中的postgres

保存后,连接成功

 

3 bash_profile和.bashrc的区别

  • /etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置.
  • /etc/bashrc:  为每一个运行bash shell的用户执行此文件.bash shell被打开时,该文件被读取.
  • ~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
  • ~/.bashrc: 该文件包含专用于你的bash shellbash信息,当登录时以及每次打开新的shell,该文件被读取.
  • ~/.bash_logout: 当每次退出系统(退出bash shell),执行该文件.

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.

 

4 pg_hba.conf 配置参数

pg_hba.conf位于pg数据库安装目录的data下,控制着客户端的访问与认证,其配置如下

内容对应配置文件中的TYPE、DATABASE、USER、ADDRESS、METHOD。在修改pg_hba.conf文件前做好备份,然后pg_ctl reload。

4.1  TYPE

定义了多种连接PostgreSQL的方式,包括local、host、hostssl、hostnossl

连接方式

作用

说明

Local

只允许本地客户端登录

 

这条记录匹配企图使用 Unix 域套接字的连接。 如果没有这种类型的记录,就不允许 Unix 域套接字连接。

host

允许远程客户端登录

这条记录匹配企图使用 TCP/IP 建立的连接。 host记录匹配SSL和非SSL的连接尝试, 此外还有GSSAPI 加密的或non-GSSAPI 加密的连接尝试

注意:除非服务器带着合适的listen_addresses配置参数值启动,否则将不可能进行远程的 TCP/IP 连接,因为默认的行为是只监听在本地环回地址localhost上的 TCP/IP 连接。

hostssl

允许经过ssl加密的连接

这条记录匹配企图使用 TCP/IP 建立的连接,但必须是使用SSL加密的连接。

要使用这个选项,编译服务器的时候必须打开SSL支持。此外,在服务器启动的时候必须通过设置ssl配置参数(详见第 18.9 节)打开SSL。否则,hostssl记录会被忽略,并且会记录一个警告说它无法匹配任何连接。

hostnossl

允许未经过ssl加密的连接

这条记录的行为与hostssl相反;它只匹配那些在 TCP/IP上不使用SSL的连接企图。


4.2  DATABASE

指定记录所匹配的数据库名称

作用

说明

all

允许连接所有数据库

指定该记录匹配所有数据库

sameuser

允许特定用户连接数据库

指定如果被请求的数据库和请求的用户同名,则匹配

samerole

允许特定角色用户连接数据库

指定请求的用户必须是一个与数据库同名的角色中的成员(samegroup是一个已经废弃了,但目前仍然被接受的samerole同义词)

replication

允许复制连接的请求,如果存在两个需要同步的数据库,那么需要设置replication值

指定如果一个物理复制连接被请求则该记录匹配(注意复制连接不指定任何特定的数据库)

在其它情况里,这就是一个特定的PostgreSQL数据库名字。 可以通过用逗号分隔的方法指定多个数据库,也可以通过在文件名前面放@来指定一个包含数据库名的文件。

 

4.3  USER

指定这条记录匹配哪些数据库用户名,即设置允许登录的数据库用户

  • all:允许所有用户连接
  • 一个用户名,一组用户名 ,多个用户时,可以用 , 逗号隔开
  • 或者在用户名称前缀(+) ;在USER和DATABASE字段,也可以写一个单独的
  • 文件名称用 `@` 前缀,该文件包含数据库名称或用户名称

 

4.4  ADDRESS

指定这个记录匹配的客户端机器地址。可以是一个主机名、一个 IP 地址范围或下文提到的特殊关键字之一,即主机名称、IP/32(IPV4)、IP/128(IPV6)

一个以点号(.)开始的主机名声明匹配实际主机名的后缀。 因此.example.com将匹配foo.example.com(但不匹配example.com)。

设置格式为:xxx.xxx.xxx.xxx/n,其中/后的n表示子网掩码。如192.168.6.1/32,表示IP为192.168.6.1,子网掩码为255.255.255.255;192.168.6.0/24表示子网掩码为255.255.255.0,此时允许192.168.6.0-192.168.6.255范围内的客户端地址链接。

 

4.5  METHOD

指定当一个连接匹配这个记录时,要使用的认证方法。常用的方法有trustrejectmd5password

方法

说明

trust

无条件地允许连接。这种方法允许任何可以与PostgreSQL数据库服务器连接的用户以他们期望的任意PostgreSQL数据库用户身份登入,而不需要口令或者其他任何认证。

reject

无条件地拒绝连接。这有助于从一个组中“过滤出”特定主机,例如一个reject行可以阻塞一个特定的主机连接,而后面一行允许一个特定网络中的其余主机进行连接。

md5

执行SCRAM-SHA-256或MD5认证来验证用户的口令。

password

要求客户端提供一个未加密的口令进行认证。因为口令是以明文形式在网络上发送的,所以不应该在不可信的网络上使用这种方式。

ident

通过联系客户端的 ident 服务器获取客户端的操作系统名,并且检查它是否匹配被请求的数据库用户名。Ident 认证只能在 TCIP/IP 连接上使用。当为本地连接指定这种认证方式时,将用 peer 认证来替代。

peer

从操作系统获得客户端的操作系统用户,并且检查它是否匹配被请求的数据库用户名。这只对本地连接可用。


例子

(1)指定固定地址的所有数据库和用户

# TYPE  DATABASE        USER            ADDRESS                 METHOD  
host    all            all             10.10.56.17/32             md5  

表示允许IP地址为10.10.56.17的所有用户可以通过MD5的密码验证方式连接主机上所有的数据库

 

(2)指定数据库名称和用户

# TYPE  DATABASE        USER            ADDRESS                 METHOD  
host    test            pgtest         10.10.56.17/32            md5 

表示允许地址为 10.10.56.17 的用户 pgtest通过 MD5方式 加密的密码方式连接主机上的 test 数据库  

 

(3)指定整个网段

# TYPE  DATABASE        USER            ADDRESS                 METHOD  
host    test            pgtest         0.0.0.0/0                 md5  

表示允许 任意iP 通过用户名为 pgtest 和md5的 密码 验证方式连接主机上 test 的数据库

 

(4)不进行密码验证

# TYPE  DATABASE        USER            ADDRESS                 METHOD  
host    test            pgtest           0.0.0.0/0               trust 

表示任意IP地址的用户 pgtest 无需密码验证可直接连接访问该主机的 test 数据库

 

参考

http://www.postgres.cn/docs/12/

https://zhuanlan.zhihu.com/p/81814954

https://blog.csdn.net/yaoqiancuo3276/article/details/80404883

https://www.cnblogs.com/kevingrace/p/8072860.html

 

 

 

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值