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
navicat连接错误的问题
此案例安装的是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
- 在navicat安装目录,找到一个libcc.dll文件,备份这个文件
- 进入网站 https://hexed.it/ 点击左上角"打开文件",选择上一步的libcc.dll文件
- 右侧点击搜索,关键词"SELECT DISTINCT datlastsysoid"
- 找到之后,把"datlastsysoid"这几个字,改成"dattablespace"
- 然后点击左上角"另存为",把文件下载回来,放回原处
- 重启navicat,可以发现:无论老和新版本的pgsql,都可以正常访问了
评论