Bootstrap

Ubuntu源码安装配置PostgreSQL

源码安装PostgreSQL可以自定义配置,省去很多apt默认安装带来的配置冲突,在后续使用中会遇到诸多问题。一般生产都是推荐源码安装,更灵活,标准化。此处为大家提供源码安装的演示。

提前说明演示中的各文件路径供参考。

PostgreSQL目录[自定义创建,pg内容均存放在该目录下]:/opt/pgsql/
源码目录:/opt/pgsql/postgresql-16.1
安装目录:/opt/pgsql/pgsql-16.1
数据目录:/opt/pgsql/data
用户目录:/home/postgres

下载安装包

安装依赖包

sudo apt-get build-essential
sudo apt-get libreadline-dev
sudo apt-get zlib1g zlib1g-dev
sudo apt-get bison
sudo apt-get flex
sudo apt-get libpq-dev

下载安装包

两种方法均可下载源码,最简版推荐第二种安装。

  1. 通过官网https://www.postgresql.org/ftp/source/上的FTP服务器下载tar文件。注:这里下载的安装包不同操作系统均适用。
    打开官网选择对应的版本 。 在这里插入图片描述
    这里选择最新的16.1版本,点击下载后缀名为tar.gz的文件即可。在这里插入图片描述
  2. 通过wegt下载到当前路径下,查看官网替换成指定版本对应的名称。
    wget https://ftp.postgresql.org/pub/source/[版本号]/[tar.gz后缀文件名]
    
    例如此处下载16.1版本的tar.gz
    wget https://ftp.postgresql.org/pub/source/v16.1/postgresql-16.1.tar.gz
    

安装PostgreSQL

安装源码

解压安装包到指定目录下

tar -zxvf postgresql-16.1.tar.gz -C /opt/pgsql/

配置编译

进入解压过的源码文件下,指定安装到/opt/pgsql/pgsql-16.1

–prefix=prefix安装到prefix指向的目录,否则默认为/usr/local/pgsql

cd /opt/pgsql/postgresql-16.1/
./configure --prefix=/opt/pgsql/pgsql-16.1

此处若出现如下报错提示

configure: error: ICU library not found
If you have ICU already installed, see config.log for details on the
failure. It is possible the compiler isn’t looking in the proper directory.
Use --without-icu to disable ICU support.

# 跳过icu编译
./configure --prefix=/opt/pgsql/pgsql-16.1 --without-icu

编译项目

make && make install

至此,已完成postgreql的安装。进入/opt/pgsql/pgsql-16.1目录可以看到安装后的postgresql的文件。

验证

在make install之后,会在前面configure指定的路径中生成几个文件夹bin,include,lib,share文件夹。

验证是否安装成功可以运行bin下面的pg_config:

cd /opt/pgsql/pgsql-16.1/bin
./pg_config

如果有配置信息,那么安装成功。

创建用户

创建用户组postgres并创建用户postgres

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

初始化用户

# 创建postgres文件夹
sudo mkdir /home/postgres
# 设置权限
sudo chmod 755 /home/postgres
chown postgres:postgres /home/postgres

# 初始化
sudo cp -a /etc/skel/. /home/postgres
vi /etc/passwd
# 最后一行为postgres:x:1001:1001::/home/postgres:/bin/sh
# 将sh修改为bash
postgres:x:1001:1001::/home/postgres:/bin/bash

创建数据目录

创建postgresql数据库的数据主目录并修改文件所有者

mkdir /opt/pgsql/data
chown postgres:postgres data

配置PostgreSQL

配置环境

为了方便,可以将该bin路径添加到PATH变量中。

sudo vi /etc/profile

在末尾添加如下配置,PGHOME为pg的安装目录路径,PGDATA为pg的数据目录路径。

# PostsQL
export PGHOME=/opt/pgsql/pgsql-16.1
export PGDATA=/opt/pgsql/data
export PATH=$PATH:$PGHOME/bin

重新加载系统环境变量

source /etc/profile

初始化数据库

切换到postgre用户,并使用initdb初始化数据库

su - postgres
initdb

返回root用户,可以看到data目录下已经被初始化

cd /opt/pgsql/data/
ls
>base          pg_hba.conf    pg_notify     pg_stat      pg_twophase  postgresql.auto.conf
global        pg_ident.conf  pg_replslot   pg_stat_tmp  PG_VERSION   postgresql.conf
pg_commit_ts  pg_logical     pg_serial     pg_subtrans  pg_wal
pg_dynshmem   pg_multixact   pg_snapshots  pg_tblspc    pg_xact

开机自启动

PostgreSQL的开机自启动脚本位于PostgreSQL源码目录的contrib/start-scripts路径下。linux文件即为linux系统上的启动脚本

cd /opt/pgsql/postgresql-16.1/contrib/start-scripts/
ls
>freebsd  linux  macos

# 切换为root用户,修改Linux文件属性,添加X属性
chmod a+x linux

# 复制Linux文件到/etc/init.d目录下,更名为postgresql
cp linux /etc/init.d/postgresql

# 修改/etc/init.d/postgresql文件的两个变量
prefix设置为postgresql的安装路径:/opt/pgsql/pgsql-16.1
PGDATA设置为postgresql的数据目录路径:"/opt/pgsql/data"

# 设置postgresql服务开启自启动
sudo systemctl enable postgresql

查看状态

# 查看状态
sudo systemctl status postgresql
# 关闭状态
sudo systemctl stop postgresql
# 重启状态
sudo systemctl restart postgresql

启动验证

进入postgres用户启动postgresql,测试创建数据库和数据表。

# 切换postgres用户
su - postgres

# 进入postgresql
psql

# 查看数据库,默认数据库postgres和template0、template1
\l

# 创建数据数据库testdb
create database testdb;

# 看到已经创建数据库testdb
\l

# 进入数据库testdb
\c testdb;
>You are now connected to database "testdb" as user "postgres".

# 创建四张表,分别插入一条数据
create table t1(id int);
insert into t1 values (1);
# 查看数据表
\d
>        List of relations
 Schema | Name | Type  |  Owner   
--------+------+-------+----------
 public | t1   | table | postgres

# 退出
\q
;