Back
Featured image of post Postgresql 的编译安装与包管理安装, 全发行版 Linux 通用

Postgresql 的编译安装与包管理安装, 全发行版 Linux 通用

PostgreSQL 是一个功能强大的开源对象关系型数据库系统,经过 35 年的积极开发,在可靠性、功能健壮性和性能方面赢得了良好的声誉。

信息

  • Ubuntu 20.04
  • Postgre 16.1

编译安装

获取安装包

PostgreSQL官网下载PostgreSQL的安装包

$ VERSION=16.1
$ wget https://ftp.postgresql.org/pub/source/v$VERSION/postgresql-$VERSION.tar.gz
$ tar zxvf postgresql-$VERSION.tar.gz
$ cd postgresql-$VERSION

环境依赖

# 创建postgreSQL的安装目录
$ mkdir /usr/local/postgresql

# 检查环境配置--prefix是指定postgreSQL安装路径
$ ./configure --prefix=/usr/local/postgresql

环境依赖报错:

  1. configure: error: no acceptable C compiler found in $PATH
    1. 说明: 没有 C 语言编译器, apt install -y gcc
  2. configure: error: ICU library not found
    1. 直接跳过使用 ./configure --prefix=/usr/local/postgresql --without-icu
  3. configure: error: readline library not found
    1. 有网络:apt-get install -y libreadline-gplv2-dev
    2. 无网络:下载软件包使用dpkg命令安装 ,可在网站pkgs.org上下载
      • libtinfo-dev_6.0+20160213-1ubuntu1_amd64.deb
      • libreadline-gplv2-dev_5.2+dfsg-3build1_amd64.deb
  4. configure: error: zlib library not found
    1. 有网络:apt-get install zlib1g-dev
    2. 无网络:下载软件包
      • zlib1g-dev_1.2.8.dfsg-2ubuntu4_amd64.deb

编译安装

$ make && make install

安装 contrib 下工具代码

$ cd contrib
$ make && make install

创建用户

$ groupadd postgres
$ useradd -g postgres postgres -d /home/postgres
$ id postgres
uid=1001(postgres) gid=1001(postgres) groups=1001(postgres)
# 设置密码
$ passwd postgres
# 输入密码

创建数据目录

只要暴露 PGDATA 即可

$ mkdir -p /var/postgresql/data
$ chown -R postgres:postgres /usr/local/postgresql
$ chown -R postgres:postgres /var/postgresql

$ chmod -R 775 /var/postgresql/*

$ vi /etc/profile   # 添加以下行, 不要使用 cat << EOF
export PGHOME=/usr/local/postgresql
export PGDATA=/var/postgresql/data
export PATH=$PATH:$PGHOME/bin

$ source /etc/profile

设置开机自启动

$ cd ~/postgresql-16.1/contrib/start-scripts

$ vi linux
修改 prefix 为安装目录 /usr/local/postgresql
修改 PGDATA 为数据目录 /var/postgresql/data
注意, PGUSER 为运行 postgre 的用户

$ chmod a+x linux
$ cp linux /etc/init.d/postgresql

# 设置postgresql服务开启自启动
$ systemctl enable postgresql
  1. systemctl 服务开机自启失败: update-rc.d: error: postgresql Default-Start contains no runlevels, aborting.

    1.  $ vi /etc/init.d/postgresql
      
      #!/bin/sh 头部下添加一下注释
       >>>>>>>>>>>>>>>
      
       ### BEGIN INIT INFO
       # Provides:          XXX
       # Required-Start:
       # Required-Stop:
       # Default-Start:     2 3 4 5
       # Default-Stop:      0 1 6
       # Short-Description: Start XXX daemon at boot time
       # Description:       Start XXX daemon at boot time
       ### END INIT INFO
      
       <<<<<<<<<<<<<<<<
      
    2. 如图:img

启动数据库

# 初始化数据库
$ initdb -D /var/postgresql/data

# 启动服务
$ pg_ctl -D /var/postgresql/data -l /var/postgresql/logs/logfile start

#连接数据库
$ psql 

# 创建数据库 
postgres=# create database test; 

# 创建表
postgres=# create table t_user (id integer, name text); 

# 插入测试数据
postgres=# insert into t_user values (1,'joke');

# 查询数据
postgres=# select * from t_user ;

#退出psql窗口
postgres=# \q

常用运维操作

1. 修改监听所有网络以及数据库连接数

# 修改配置文件
$ vim /var/postgresql/data/postgresql.conf

# listen_addresses = 'localhost' 监听本机,'*'监听所有网络
listen_addresses = '*' 
# max_connections 数据库的连接数根据具体需求更改 

2. 远程访问

$ vim /var/postgresql/data/pg_hba.conf 
#在文件的最下方加上下面的这句话,最后一个 trust 表示所有用户不需要密码,需要密码要设置为 md5
host    all         all         0.0.0.0/0             md5

3. 基础运维命令

# 切换postgres用户
$ su - postgres

# 重启服务
$ pg_ctl -D /var/postgresql/data -l /var/postgresql/logs/logfile restart

# 停止服务
$ pg_ctl -D /var/postgresql/data -l /var/postgresql/logs/logfile stop

4. 防火墙

# 切换root用户
$ su - root

# 防火墙 允许5432 端口
$ ufw allow 5432

5. 修改密码

# 切换用户
$ su - postgres

# 客户端登录
$ psql
# psql -U postgres -h 127.0.0.1 -p 5432

# 修改密码
postgres=# alter user postgres with password '123456';
ALTER ROLE

apt 安装

更新源

$ echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list

# 添加秘钥
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

$ apt update

安装 postgresql

# 查看版本
$ apt-cache madison postgresql   # 服务端
$ apt-cache madison postgresql-contrib   # 服务端工具包
$ apt-cache madison postgresql-client   # 客户端


# 安装 postgresql
$ apt install -y postgresql-16 postgresql-contrib postgresql-client
# apt install -y postgresql

apt 安装会默认创建一个 postgres 用户

开机自启

$ systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Sat 2024-01-27 10:40:44 UTC; 51s ago
   Main PID: 6952 (code=exited, status=0/SUCCESS)
      Tasks: 0 (limit: 4557)
     Memory: 0B
     CGroup: /system.slice/postgresql.service

Jan 27 10:40:44 ubuntu systemd[1]: Starting PostgreSQL RDBMS...
Jan 27 10:40:44 ubuntu systemd[1]: Finished PostgreSQL RDBMS.

# 开机自启
$ systemctl enable --now postgresql

修改配置

# ps -ef 获取 postgre 的配置文件位置
$ ps -ef|grep postgre

# 修改监听地址
$ sed -i "s@#listen_addresses = 'localhost'@listen_addresses = '*'@g" /etc/postgresql/16/main/postgresql.conf

# 我们可以从配置文件知道 hba_file 的位置
# 修改 hba_file 添加支持 md5 密码登录
$ echo "host    all             all             192.168.154.0/24            md5" >> /etc/postgresql/16/main/pg_hba.conf

$ systemctl restart postgresql

修改密码

# 切换用户
$ su - postgres

# 客户端登录
$ psql
# psql -U postgres -h 127.0.0.1 -p 5432

# 修改密码
postgres=# alter user postgres with password '123456';
ALTER ROLE