暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

源码安装PostgreSQL 13.1

原创 周波 云和恩墨 2022-07-20
1237

一、简单版安装

PostgreSQL可以由任何非特权用户安装, 并不需要超级用户 (root)的权限。

#1.创建用户
useradd postgres
#2.创建postgresql源码包存放路径
mkdir -p /usr/local/pgsql/src
cd /usr/local/pgsql/src
#3.下载源码包,大小26M左右
wget https://ftp.postgresql.org/pub/source/v13.1/postgresql-13.1.tar.gz
#4.解压
tar -zxvf postgresql-13.1.tar.gz
#5.进入到解压出来的目录,然后进行编译安装
cd postgresql-13.1
./configure  #不指定程序安装路径的话,默认会将程序安装到/usr/local/pgsql下
make
make install
#6.创建数据库数据目录
create /usr/local/pgsql/data
chown postgres.postgres /usr/local/pgsql/data
#7.初始化数据库
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
#8.启动数据库
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
#9.连接数据库
[postgres@OG1 ~]$ /usr/local/pgsql/bin/psql 
psql (13.1)
Type "help" for help.

postgres=# select version();
                                                 version                                                 
---------------------------------------------------------------------------------------------------------
 PostgreSQL 13.1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit
(1 row)
#初始化数据库时,如果没有指定数据库超级用户名,
#就会自动创建与当前操作系统用户同名(postgres)的超级用户,如果指定了,那么就会创建你指定的超级用户名
postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(3 rows)
#为了方便执行,编辑postgres用户的PATH环境变量
vim .bashrc
export PATH=/usr/local/pgsql/bin:$PATH
source .bashrc

二、自定义安装

1)要求

readline库:
  它允许psql(PostgreSQL的命令行 SQL 解释器)记住你输入的每一个命令并且允许你使用箭头键来找回和编辑之前的命令
zlib库:
  如果你不想使用它,那么你必须给configure声明–without-zlib选项。使用这个选项关闭了在pg_dump和pg_restore中对压缩归档的支持。
make:版本大于3.80
gcc编译器。

2)配置(configure)

脚本将运行一些测试来决定一些系统相关的变量, 并检测你的操作系统的特殊设置,并且最后将在编译树中创建一些文件以记录它找到了什么。
–prefix:指定程序文件安装路径
–with-pgport:指定数据库服务端监听的端口号(默认5432)

./configure --prefix=/usr/local/pgsql --with-pgport=5432

如果在配置时报如下两个错:

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

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

# 解决办法:安装相关依赖包
yum install -y readline-devel  #如果是kylin V10请执行:apt install -y libreadline-dev
yum install -y zlib-devel

如果想让你的PostgreSQL支持SSL加密功能,那么在编译时需要启用SSL支持,在配置(也就是执行configure)时加上–with-openssl,配置过程中如果不幸报了如下错:

checking for CRYPTO_new_ex_data in -lcrypto... no
configure: error: library 'crypto' is required for OpenSSL

那么你可以尝试安装如下依赖包,然后再次执行configure:

yum install -y xmlsec1-openssl-devel

3)构建(make)

make

  如果您想构建可以构建的所有内容,包括文档(HTML 和手册页)和附加模块(contrib),请改为键入:

make world

  如果要使用pg_trgm等插件,这是很重要的选择。

4)回归测试

回归测试是一个测试套件,用于验证PostgreSQL 是否以开发人员期望的方式在您的机器上运行

make check

5)安装文件(make install)

这会将文件安装到步骤2)中指定的目录中。 确保您具有写入该区域的适当权限

make install

6)仅安装客户端工具

make -C src/bin install
make -C src/include install
make -C src/interfaces install

7)卸载

这不会删除任何创建的目录

make uninstall

8)清理

安装后,您可以通过使用命令make clean从源树中删除构建的文件来释放磁盘空间。 这将保留configure程序生成的文件,以便您稍后可以使用make重建所有内容

make clean

9)创建数据库数据目录

mkdir -p /usr/local/pgsql/data
chown postgres.postgres /usr/local/pgsql/data

10)初始化数据库

su - postgres
[postgres@PG1 ~]$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/ -U postgres -W
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

Enter new superuser password: #输入超级用户的密码(test@123)
Enter it again: 

fixing permissions on existing directory /usr/local/pgsql/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Shanghai
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

initdb: warning: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

    /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data/ -l logfile start


# 执行上述命令之后,输出信息如上所示,会在指定的数据目录中生成相关的文件或子目录,
# 最后提示我们启动数据库的命令。为了方便命令的书写,我们可以设置用户postgres的环境变量
vim .bashrc
export PATH=$PATH:/usr/local/pgsql/bin
source .bashrc

11)启动数据库实例

如果你连接到一个数据库时,你可以选择以何种PostgreSQL用户名进行联接; 如果你不选择,那么缺省就是你的当前操作系统账号。

pg_ctl start -D /usr/local/pgsql/data -l logfile
# 不妨查看一下logfile的内容
[postgres@PG1 ~]$ cat logfile 
2022-07-14 14:34:59.427 CST [1607] LOG:  starting PostgreSQL 13.1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
2022-07-14 14:34:59.428 CST [1607] LOG:  listening on IPv6 address "::1", port 5432
2022-07-14 14:34:59.428 CST [1607] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2022-07-14 14:34:59.430 CST [1607] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2022-07-14 14:34:59.432 CST [1608] LOG:  database system was shut down at 2022-07-14 14:11:42 CST
2022-07-14 14:34:59.433 CST [1607] LOG:  database system is ready to accept connections

12)设置自动启动PostgreSQL数据库实例

  每次重新启动虚拟机,还要再次手动启动数据库实例,我们知道pg_ctl工具控制着PostgreSQL数据库实例的启停,但是这个工具需要普通用户进行执行,不允许使用root用户进行执行,所以修改/etc/rc.d/rc.local开机自动加载文件是行不通的。所以,我们不妨编写一个简单的shell脚本来完成这个事,每当我们切换到postgres用户时,如果数据库实例没有启动,那么就自动启动数据库实例,反之输出数据库实例已经启动。

su - postgres
vim .bash_profile
process_num=`netstat -lntup | grep postgres | wc -l`
if [ $process_num -le 0 ]; then
    /usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data -l logfile
    else
        echo "PostgreSQL has started now!!!"
fi
## 保存退出即可。source或下一次执行su - postgres就可以执行了

三、创建插件

  该小节只是作为一个后来补充,所以你会发现数据库版本不一样,但对于创建插件,这并没有什么影响,当你在源码安装的构建阶段使用make world命令时,那么会构建源码包中的contrib附加模块,里面包含了很多附加的功能组件。那么该如何创建插件呢?这里以pg_trgm插件为例来介绍该过程:

# 1.拷贝相关文件到相关目录
[postgres@alldb ~]$ cp /opt/software/pg14/postgresql-14.2/contrib/pg_trgm/*.sql /opt/software/pg14/share/postgresql/extension/
[postgres@alldb ~]$ cp /opt/software/pg14/postgresql-14.2/contrib/pg_trgm/pg_trgm.control /opt/software/pg14/share/postgresql/extension/
[postgres@alldb ~]$ cp /opt/software/pg14/postgresql-14.2/contrib/pg_trgm/pg_trgm.so /opt/software/pg14/lib/postgresql

## 说明:目录/opt/software/pg14/postgresql-14.2/为postgresql源码包的子目录
## /opt/software/pg14/:该目录为数据库软件的安装目录,即configure时prefix指定的值

# 2.登录数据库,创建插件
[postgres@alldb ~]$ psql
psql (14.2)
postgres=# create extension pg_trgm;
CREATE EXTENSION

  其他插件的创建步骤一致。

最后修改时间:2024-11-07 18:47:29
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论