shell 脚本之安装 PostgreSQL
00 分钟
2022-10-1
2024-6-4
type
status
date
slug
summary
tags
category
icon
password

前言

我们在开发过程中经常或会遇到在本地开发的时候使用数据库的场景,而且有时还要允许其他同事访问,今天给大家带来一个安装 pgsql 数据库的脚本

安装 PostgreSQL

添加源

由于我们准备使用apt去安装PostgreSQL,所以要先把软件源添加进去:
大家看上面的这条命令,其实就是把字符串deb <http://apt.postgresql.org/pub/repos/apt> buster-pgdg main添加到文件/etc/apt/sources.list.d/pgdg.list中而已。但是为啥要这么写呢?下面让我们仔细的看看:
  • > 符号。>符号的作用的把前面的结果覆盖到后面,如果文件不存在则会创建,与之类似的还有>>,不过这个是追加而已
  • echo命令。echo命令是输出一个字符串
  • sh -csh -c ''作用是执行字符串里面的命令
  • sudo。作用是给后面是命令添加 root 权限
所以这个命令其实可以分两部分,一是:echo "deb <http://xxxx>" > /etc/apt/sources.list.d/pgdg.list ,目的是创建文件,二是:sudo su -c '',之所以要加这个是因为我们要写入的文件一般用户的没有权限的,并且大家如果经过测试就会发现使用命令:sudo echo "deb <http://xxxx>" > /etc/apt/sources.list.d/pgdg.list是没有效果的,因为命令如果这个写的其中的 sudo 是给前面的 echo 添加权限,所以我们就把这条命令作为字符串使用sh -c的形式去执行,并且给sh -c添加 sudo,这样就可以了

添加签名

使用 apt 安装

这里使用了-y参数,其作用是不用再安装的过程中按[y/N],直接静默安装

配置

删除postgres用户的默认密码

再安装过程中会自动创建用户postgres,也是后续执行postgres相关操作的建议用户,由于我们是开发环境自己使用的,所以为了方便,这里直接把密码删除:
如果需要设置密码的话,再重新设置密码就好

为默认用户设置默认密码

再安装PostgreSQL的时候,不仅会创建系统用户postgres,也会创建一个数据库用户postgres,但不会自己设置密码,我们这里给它添加一个默认密码:
这里是使用了su - -c '' postgres的方式去执行的命令,这样写的目的是使用postgres用户去执行字符串里面的脚本,而字符串里面的脚本是psql -c $'',其作用是事业 pqsl 执行一段 sql 命令,这里是 sql 命令就是修改用户密码的命令:ALTER USER postgres WITH PASSWORD '123456';然后把这些组合到一起,并且为字符串添加转义

开启允许其他人访问

需要分别设置以下几个文件
客户端认证文件:/etc/postgresql/13/main/pg_hba.conf
其中有个字段是address,表示可以匹配的地址,默认是127.0.0.1,我们要把它修改为0.0.0.0:
这里使用了sed -i的替换命令,这里的@是分隔符,g 是全局的意思,就是全局替换
配置文件: /etc/postgresql/13/main/postgresql.conf
还需要再配置文件中设置一下监听的地址,所在行再 13 版本中为 60 行,内容为:
默认是localhost,我们要把他改为*
这里用了两条sed 语句去处理,第一条是删除第 60 行的开始两个字符,就是去掉注释,第二条则是把第 60 行的localhost替换成*,就是任何地址的意思

启动

这里启动用两条命令:
看到第二天命令里面的restart了吗?应该会猜到一系列的命令了吧?停止的stop,启动的start,重启的start

卸载

先卸载现有版本然后重新安装用的:

封装脚本

结语

脚本本身不是很复杂,主要涉及到了以下的一些知识点。但是这个脚本还不是很完善,缺少容错机制,比如 pgsql 使用 apt 安装失败的问题?最后希望大家有所收获。
  • sudo sh -c '' 执行命令
  • psql -c '' 执行 sql
  • su - -c '' user 其他用户执行命令
  • sed -i 替换
  • pgsql 的配置文件和客户端访问配置文件
上一篇
Python 服务端项目配置文件最佳实践
下一篇
逆向学习之有道翻译