以下操作在debian和ubuntu直接使用,其它linux除了依赖安装,基本一致
官方没有给直接的安装包,据说是编译安装太容易了
更新时间:2023.11.10,当前最新版本16.1,演示的是最新稳定版16.1
15、14版本的安装方法一致,把下面的版本号改了就行,pgsql版本演进很快,算是小步快跑的感觉,安装方法短期内不会变化太大
一、手动安装
postgresql官网
手动编译安装流程较多,如果觉得麻烦还是apt或者dnf包安装就行,对于新手来说最方便,如果熟悉了还是必须要会编译安装的。
1.进入目录(/usr/local)并下载源码
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.创建数据目录
创建文件夹(这个目录也是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,一个是输入su或su root,然后输入密码,或者直接再开一个ssh窗口就行了。
vi /var/pgsqldata/postgresql.conf
修改listen_addresses为listen_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.进入命令行并创建密码
su - postgres
psql
下面操作修改密码为abc123456,根据自己的密码修改
最后的分号不能少
ALTER USER postgres WITH PASSWORD 'abc123456';
12.默认账号密码
pgsql数据库
账号:postgres
密码:上面设定的
本地访问是可以无密码的
二、问题和管理
(一)psql命令行报错问题
1.有多个socket导致无法直接登录
比如如下的报错:
这个报错在一台设备有多个pgsql程序是容易遇到。
connection to server on socket “/var/run/postgresql/.s.PGSQL.5432” failed: No such file or directory
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
建议:DBeaver、datagrip
三、相关教程
postgresql 单机多开: postgresql 单机多开
postgresql 连接池:pgBouncer连接池
postgresql 单机多开:postgresql 单机多开
rust 连接 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进行投诉反馈,一经查实,立即删除!