ubuntu20 编译安装 postgresql-15.4

源码地址:https://www.postgresql.org/ftp/source/

编译和安装

此过程都在root权限下执行

 1# 安装依赖:
 2sudo apt install build-essential zlib1g-dev libreadline-dev libncurses5-dev libssl-dev libxml2-dev libxml2-utils xsltproc libperl-dev bison
 3
 4
 5# 解压:
 6tar -zxf postgresql-15.4.tar.gz -C /data/src
 7cd /data/src/postgresql-15.4
 8
 9
10# 编译:
11./configure --prefix=/data/postgresql-15.4
12make

说明: –prefix为安装目录
make的过程有点长;如果在此过程中出现错误,比如缺少某某依赖,先安装依赖,然后执行make clean,再重新执行 ./configure 和 make命令

 1# 成功编译后,最后执行安装命令:
 2sudo make install
 3 
 4
 5# 创建软连接,添加环境变量(可选):
 6sudo ln -s /data/postgresql-15.4 /usr/local/postgresql
 7echo -e '\nexport PATH=$PATH:/data/postgresql-15.4/bin' >> /etc/profile
 8 
 9# 创建postgres用户,并修改密码
10useradd -m -s /bin/bash postgres
11passwd postgres
12
13
14# 建立一个存储数据的目录,并将这个目录的所有者分配给 postgres 用户。
15mkdir /data/postgresql-data
16chown postgres /data/postgresql-data

数据库的初始化和启动

不能在root用户下操作,否则会报错;以下所有操作都在postgres用户下进行

 1# 初始化数据库:
 2su - postgres
 3/data/postgresql-15.4/bin/initdb -D /data/postgresql-data
 4
 5
 6# 启动数据库
 7/data/postgresql-15.4/bin/pg_ctl -D /data/postgresql-data -l logfile start
 8
 9
10# 创建zc用户,并设置为超级管理员
11/data/postgresql-15.4/bin/createuser -P -s -e zc
12
13
14# 创建数据库test
15/data/postgresql-15.4/bin/createdb test
16
17
18# 连接到test数据库
19/data/postgresql-15.4/bin/psql test

设置pgsql远程链接

编辑 /data/postgresql-data/pg_hba.conf,在IPV4 local connections下,添加一行:

1host all all 0.0.0.0/0 md5

表示允许所有ip接入,并以md5方式进行密码认证。 说明:

  • TYPE:pg的连接方式,local:本地unix套接字,host:tcp/ip连接
  • DATABASE:指定数据库
  • USER:指定数据库用户
  • ADDRESS:ip地址,可以定义某台主机或某个网段,32代表检查整个ip地址,相当于固定的ip,24代表只检查前三位,最后一 位是0~255之间的任何一个
  • METHOD:认证方式,常用的有ident,md5,password,trust,reject。
    • md5是常用的密码认证方式。
    • password是以明文密码传送给数据库,建议不要在生产环境中使用。
    • trust是只要知道数据库用户名就能登录,建议不要在生产环境中使用。
    • reject是拒绝认证。

编辑 /data/postgresql-data/postgresql.conf,修改如下:

将 listen_addresses = ’localhost’ 改为 listen_addresses = ‘*’ ,并打开注释

将 port = 5432 的注释打开

完成配置文件修改后,重启服务

1/data/postgresql-15.4/bin/pg_ctl -D /data/postgresql-data -l logfile restart

此案例安装的是postgresql-15.4,但是使用navicat连接,报如下错误:

column “datlastsysoid“ does not exist

Line1:SELECT DISTINCT datalastsysoid FROM pg_database

这主要是pgsql 15版本以后,有些系统表的列名改了:pg_database表里的这一个列被删除了导致的

解决办法有三:

解决方法1:将navicat升级到16.2以上版本

解决方法2:降级pgsql的版本

解决方法3:终极方案:修改dll

  1. 在navicat安装目录,找到一个libcc.dll文件,备份这个文件
  2. 进入网站 https://hexed.it/ 点击左上角"打开文件",选择上一步的libcc.dll文件
  3. 右侧点击搜索,关键词"SELECT DISTINCT datlastsysoid"
  4. 找到之后,把"datlastsysoid"这几个字,改成"dattablespace"
  5. 然后点击左上角"另存为",把文件下载回来,放回原处
  6. 重启navicat,可以发现:无论老和新版本的pgsql,都可以正常访问了