源码安装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
下载安装包
两种方法均可下载源码,最简版推荐第二种安装。
- 通过官网https://www.postgresql.org/ftp/source/上的FTP服务器下载tar文件。注:这里下载的安装包不同操作系统均适用。
打开官网选择对应的版本 。
这里选择最新的16.1版本,点击下载后缀名为tar.gz的文件即可。 - 通过wegt下载到当前路径下,查看官网替换成指定版本对应的名称。
例如此处下载16.1版本的tar.gzwget https://ftp.postgresql.org/pub/source/[版本号]/[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