以下操作debianubuntu直接使用,其它linux除了依赖安装基本一致
官方没有给直接的安装包,据说是编译安装太容易了
更新时间:2023.11.10,当前最新版本16.1,演示的是最新稳定版16.1
15、14版本安装方法一致,把下面的版本号改了就行,pgsql版本演进很快,算是小步快跑的感觉,安装方法短期内不会变化太大


一、手动安装

postgresql官网
手动编译安装流程较多,如果觉得麻烦还是apt或者dnf包安装就行,对于新手来说最方便,如果熟悉了还是必须要会编译安装的。

下面的操作默认root来进行,除了特殊标注的除外。

1.进入目录(/usr/local)并下载源码

官方下载地址: pgsql16.1

cd /usr/local && wget https://ftp.postgresql.org/pub/source/v16.1/postgresql-16.1.tar.gz

2.解压源代码

tar -zxvf postgresql-16.1.tar.gz && cd postgresql-16.1

3.安装相关依赖

根据自己需要的增加依赖,这里的依赖是根据下面的编译参数确定的。(简单来讲,就是扩展功能需要依赖外部已有的程序
以下的包都是要安装的,如果你的ssh客户端支持多行需要手动合并一行运行

apt-get install 
build-essential
liblz4-dev
lz4
pkg-config
libreadline-dev
zlib1g-dev
libxml2-dev libxml2
libssh-dev
uuid-dev libossp-uuid-dev

4.编译安装

编译参数,根据自己的需要添加
pgsql的拓展能力很强,但是默认的对不少情况也是够用了

./configure
--enable-debug
--with-lz4
--with-openssl
--with-libxml
--with-ossp-uuid

编译安装

make && make install

5.创建用户

初始化pgsql不能用root账户。使用postgres作为用户名,是因为aptdnf包安装也用这个名称
添加用户

groupadd postgres

添加用户

useradd -g postgres postgres -m

6.创建数据目录

这里数据存储目录是/var/pgsqldata

创建文件夹(这个目录也是pgsql默认的,所以我就安装默认的来创建

mkdir /var/pgsqldata

转移所属权

chown postgres:postgres /var/pgsqldata

7.配置环境变量

编辑环境变量文件

vi /etc/profile

添加如下内容,并保存(pghome和pgdata变量名不能改成别的,否则无法启动

export PGHOME=/usr/local/pgsql
export PGDATA=/var/pgsqldata
PATH=$PATH:$PGHOME/bin:$PGHOME/bin

刷新环境变量

source /etc/profile

8.切换postgres用户并初始化数据库

除了这一步要用postgres用户,其他都可以root创建
pgsql不允许用root初始化和登录,必须用创建账号

su postgres
cd /var/pgsqldata
initdb

测试启动

pg_ctl -D /var/pgsqldata  start

测试停止

pg_ctl -D /var/pgsqldata stop

9.修改配置文件linux切换root进行下面操作

这里补充一点,如果从普通用户切换root一个输入susu root然后输入密码,或者直接再开一个ssh窗口就行了。

修改的是存储位置的,如果你用find找可能会有多个

vi /var/pgsqldata/postgresql.conf

修改listen_addresseslisten_addresses = ‘*’,并取消前面的#号,允许别的机器访问
修改max_connections=1000,修改最大连接数(100太低了)

vi /var/pgsqldata/pg_hba.conf

文件最下面添加host all all 0.0.0.0/0 md5,允许外部密码登录

10.通过systemctl管理

vi /usr/lib/systemd/system/pgsql.service

内容如下

[Unit]
Description=postgresql

[Service]
Type=forking
Group=postgres
User=postgres
ExecStart=/usr/local/pgsql/bin/pg_ctl -D /var/pgsqldata start
ExecReload=/usr/local/pgsql/bin/pg_ctl -D /var/pgsqldata restart
ExecStop=/usr/local/pgsql/bin/pg_ctl -D /var/pgsqldata stop

[Install]
WantedBy=multi-user.target

重新加载脚本

systemctl daemon-reload

启动开机启动

systemctl start pgsql.service && systemctl enable pgsql.service

查看状态

systemctl status pgsql.service

11.进入命令行创建密码

pgsql不允许用root初始化和登录,必须用创建的账号

su - postgres
psql

下面操作修改密码abc123456,根据自己的密码修改
最后的分号不能少

ALTER USER postgres WITH PASSWORD 'abc123456';

输入quit退出

12.默认账号密码

pgsql数据库
账号:postgres
密码:上面设定的
本地访问可以无密码的

二、问题管理

(一)psql命令行报错问题

1.有多个socket导致无法直接登录

比如如下的报错
这个报错一台设备有多个pgsql程序是容易遇到。
connection to server on socket “/var/run/postgresql/.s.PGSQL.5432” failed: No such file or directory
在这里插入图片描述

查找所有的pgsql的socket

find / -name "*s.PGSQL.5432*"
psql -h /tmp/ postgres

2.psql命令行当前版本不一致

比如下面的报错
psql major version 15, server major version 16.

主要是装过早期版本的pgsql,需要清理软连接

which -a psql

显示所有的psql
把不需要的软连接清除,比如/usr/bin和/bin下的
只剩下/usr/local/psql/bin下的最新版本,再次使用psql即可正确

(二)pgsql管理

命令行基本功,因为如果你有多个数据库,用命令行需要登录主机或者你自己开发管理工具
建议准备多个工具,以防一个工具问题
必备:命令行(通过ssh)、pgadmin 4
建议:DBeaverdatagrip

三、相关教程

postgresql 单机多开: postgresql 单机多开

postgresql 主从复制主备切换pgsql主从

postgresql 连接池pgBouncer连接池

postgresql 单机多开:postgresql 单机多开

php 配置 postgresql :

rust 连接 postgresql :

postgresql 搜索分词、相似度、正则等):
(利用postgresql丰富的数据类型函数来做搜索

postgresql 优化索引

四、bash脚本安装(仅参考)

根据上面的,写了如下脚本,在debian下直接使用
bash脚本中的常量设置可以设置安装的版本,安装目录,数据目录,用户名systemctl管理名称,根据需要自行修改,或者保持原样
由于有的系统已经通过包安装过或者其他,所以以下仅供参考
建议手动安装,脚本没有做过多处理,可能不能在每台设备上完整运行

vi /usr/local/pgsql16.sh
#!/bin/bash

# 常量设置
pgsql_version="16.1" # pgsql版本
install_path="/usr/local" # 安装、操作目录
data_path="/var/pgsqldata" # 数据保存目录
pgsql_username="postgres" # 用户名
systemctl_name="pgsql" # systemctl名称

# 安装依赖
echo "......正在安装依赖......"
apt-get install -y build-essential liblz4-dev lz4 pkg-config libreadline-dev zlib1g-dev libxml2-dev libxml2 libssh-dev uuid-dev libossp-uuid-dev
echo "......依赖安装完成......"

# 下载源代码
echo "......正在下载源码包......"
wget -P ${install_path} https://mirrors.tuna.tsinghua.edu.cn/postgresql/source/v${pgsql_version}/postgresql-${pgsql_version}.tar.gz
echo "......源码下载完成......"

# 解压
echo "......正在解压源码包......"
cd ${install_path}
tar -zxf ${install_path}/postgresql-${pgsql_version}.tar.gz
echo "......源码解压缩完成......"

# 编译安装
echo "......正在编译安装......"
${install_path}/postgresql-${pgsql_version}/configure --enable-debug --with-lz4 --with-openssl --with-libxml --with-ossp-uuid
cd ${install_path}/postgresql-${pgsql_version} && make && make install
echo "......编译安装完成......"

# 添加用户组和用户
echo "......正在添加用户组和用户......"
groupadd ${pgsql_username} && useradd -g ${pgsql_username} ${pgsql_username} -m
echo "......完成添加用户组和用户......"

# 配置环境变量
echo "......正在配置环境变量......"
echo "export PGHOME=/usr/local/pgsql" >> /etc/profile
echo "export PGDATA=/var/pgsqldata" >> /etc/profile
echo "PATH=$PATH:$PGHOME/bin:$PGHOME/bin" >> /etc/profile
. /etc/profile # 刷新环境变量
echo "......配置环境变量完成......"

# 创建数据文件夹并移交所有权
echo "......正在创建数据文件夹......"
mkdir /var/pgsqldata
chown postgres:postgres /var/pgsqldata
echo "......完成创建数据文件夹......"

# 切换用户并初始化数据库
echo "......正在初始化数据库......"
su - ${pgsql_username}
initdb
echo "......完成初始化数据库......"

# 修改配置文件
sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" /var/pgsqldata/postgresql.conf
echo "host all all 0.0.0.0/0 md5" >> /var/pgsqldata/pg_hba.conf

# 配置systemctl脚本
echo "......正在配置systemctl脚本......"
cat>/usr/lib/systemd/system/${systemctl_name}.service<<EOF
[Unit]
Description=postgresql${pgsql_version}

[Service]
Type=forking
User=${pgsql_username}
Group=${pgsql_username}
ExecStart=/usr/local/pgsql/bin/pg_ctl -D /var/pgsqldata start
ExecReload=/usr/local/pgsql/bin/pg_ctl -D /var/pgsqldata restart
ExecStop=/usr/local/pgsql/bin/pg_ctl -D /var/pgsqldata stop

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl start ${systemctl_name}
systemctl enable ${systemctl_name}
systemctl status ${systemctl_name}
echo "......systemctl脚本配置完成......"

echo "......!!!脚本运行完成!!!......"

保存后

sh /usr/local/pgsql16.sh

注意:bash脚本执行完成后仍然要进pgsql命令行修改密码,然后才能远程登录,空密码是不允许用md5登录的,除非设置trust允许所有非验证登录

原文地址:https://blog.csdn.net/ziqibit/article/details/129392672

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_12169.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注