博客原文
文章目录
- 实验环境信息
- 编译安装
- 获取安装包
- 环境依赖
- 编译安装
- 安装 contrib 下工具代码
- 创建用户
- 创建数据目录
- 设置开机自启动
- 启动数据库
- 常用运维操作
- apt 安装
- 更新源
- 安装 postgresql
- 开机自启
- 修改配置
- 修改密码
实验环境信息
- 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
环境依赖报错:
configure: error: no acceptable C compiler found in $PATH
- 说明: 没有 C 语言编译器,
apt install -y gcc
- 说明: 没有 C 语言编译器,
configure: error: ICU library not found
- 直接跳过使用
./configure --prefix=/usr/local/postgresql --without-icu
- 直接跳过使用
configure: error: readline library not found
- 有网络:
apt-get install -y libreadline-gplv2-dev
- 无网络:下载软件包使用dpkg命令安装 ,可在网站pkgs.org上下载
- libtinfo-dev_6.0+20160213-1ubuntu1_amd64.deb
- libreadline-gplv2-dev_5.2+dfsg-3build1_amd64.deb
- 有网络:
configure: error: zlib library not found
- 有网络:
apt-get install zlib1g-dev
- 无网络:下载软件包
- 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
-
systemctl 服务开机自启失败:
update-rc.d: error: postgresql Default-Start contains no runlevels, aborting.
-
$ 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 <<<<<<<<<<<<<<<<
-
如图:
-
启动数据库
# 初始化数据库
$ 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