ubuntu22下自定义安装postgresql16

# 一、安装说明

# 1、源码定义安装说明

# 源码安装PostgreSQL可以自定义配置,省去很多apt默认安装带来的配置冲突,在后续使用中会遇到诸多问题。一般生产都是推荐源码安装,更灵活,标准化。

# 提前说明安装中的各文件路径供参考。

# PostgreSQL目录[自定义创建,pg内容均存放在该目录下]:/opt/pgsql/

# 源码目录:/opt/pgsql/postgresql-16.2

# 安装目录:/opt/pgsql/pgsql-16.2

# 数据目录:/opt/pgsql/data

# 用户目录:/home/postgres

# 2、官网地址

# PostgreSQL的官方地址:https://www.postgresql.org

# PostgreSQL的国内社区:http://www.postgres.cn/v2/home

# 编译后的程序下载地址:

# https://www.postgresql.org/download/

# 编译源代码下载地址

# https://www.postgresql.org/ftp/source/

# 3、避免权限不够,可以直接使用root安装

# 建议以下可以直接使用root用户进行操作

su root

# 4、刷新本地包索引

# Ubuntu系统设置中没有software & Updates

# sudo apt-get install software-properties-gtk

apt-get update

apt-get upgrade

# sudo apt-get install aptitude

# 安装make

apt-get install make

# 二、下载安装包和依赖包

# 1、安装依赖包

# 此问题为系统定位不到软件包,无法安装

apt-get install build-essential

apt-get install libreadline-dev

apt-get install zlib1g zlib1g-dev

apt-get install bison

apt-get install flex

apt-get install libpq-dev

apt-get install libicu-dev

apt-get install libcommon-sense-perl

apt-get install libjson-perl

apt-get install libjson-xs-perl

apt-get install libpq5

apt-get install libtypes-serialiser-perl

apt-get install sysstat

# 2、下载安装包

# 两种方法均可下载源码,最简版推荐第二种安装。

# 通过官网https://www.postgresql.org/ftp/source/上的FTP服务器下载tar文件。注:这里下载的安装包不同操作系统均适用。打开官网选择对应的版本 。

# 这里选择最新的16.2版本,点击下载后缀名为tar.gz的文件即可。

# 通过wegt下载到当前路径下,查看官网替换成指定版本对应的名称。

# wget https://ftp.postgresql.org/pub/source/[版本号]/[tar.gz后缀文件名]

# 例如此处下载16.2版本的tar.gz

mkdir -p /opt/pgsql/

cd /opt/pgsql/

wget https://ftp.postgresql.org/pub/source/v16.2/postgresql-16.2.tar.gz

# 三、安装PostgreSQL

# 1、安装源码

# 解压安装包到指定目录下

cd /opt/pgsql/

tar -zxvf postgresql-16.2.tar.gz -C /opt/pgsql/

# 2、配置编译

# 进入解压过的源码文件下,指定安装到/opt/pgsql/pgsql-16.2

# –prefix=prefix安装到prefix指向的目录,否则默认为/usr/local/pgsql

mkdir -p /opt/pgsql/pgsql-16.2

cd /opt/pgsql/postgresql-16.2/

./configure --prefix=/opt/pgsql/pgsql-16.2

# 此处若出现如下报错提示

<!--

configure: error: ICU library not found

If you have ICU already installed, see config.log for details on the

failure.  It is possible the compiler isn't looking in the proper directory.

Use --without-icu to disable ICU support.

-->

# 这个错误表明在配置 PostgreSQL 16.2 时,找不到 ICU 库。ICU 是一个用于处理国际化和本地化的开源库。解决这个问题的方法是安装 ICU 库或者禁用 ICU 支持。

# apt-get install libicu-dev

# 如果你不需要 ICU 支持,可以使用 --without-icu 参数禁用它。在运行 ./configure 命令时添加该参数:./configure --without-icu 这样会在编译 PostgreSQL 时禁用 ICU 支持。

# 如果你已经安装了 ICU 库,但是配置时仍然找不到它,可能是因为编译器没有查找到正确的路径。你可以通过设置 LD_LIBRARY_PATH 环境变量来指定 ICU 库的安装路径: export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu

# 查看日志

cat config.log

# 我不管咋处理,这个错误都一直有,直接禁用icu

# 禁用icu编译

./configure --prefix=/opt/pgsql/pgsql-16.2 --without-icu

# 3、编译项目,时间比较久

make && make install

# 至此,已完成postgreql的安装。进入/opt/pgsql/pgsql-16.2目录可以看到安装后的postgresql的文件。

# 4、验证

# 在make install之后,会在前面configure指定的路径中生成几个文件夹bin,include,lib,share文件夹。

# 验证是否安装成功可以运行bin下面的pg_config:

cd /opt/pgsql/pgsql-16.2/bin

./pg_config

# 如果有配置信息,那么安装成功。

# 5、创建用户

# 创建用户组postgres并创建用户postgres

groupadd postgres

useradd -g postgres postgres

id postgres

<!--# 输入如下:

uid=1001(postgres) gid=1001(postgres) groups=1001(postgres)

-->

# 设置密码

passwd postgres

<!--

输入密码,我设置的与root密码相同,好记

-->

# 6、初始化用户

# 创建postgres文件夹

mkdir /home/postgres

# 设置权限

chmod 755 /home/postgres

chown postgres:postgres /home/postgres

# postgres用户初始化

cp -a /etc/skel/. /home/postgres

vim /etc/passwd

# 最后一行为postgres:x:1001:1001::/home/postgres:/bin/sh

# 将sh修改为bash

postgres:x:1001:1001::/home/postgres:/bin/bash

# 7、创建数据目录

# 创建postgresql数据库的数据主目录并修改文件所有者

mkdir -p /opt/pgsql/pgsql-16.2/data

chown postgres:postgres /opt/pgsql/pgsql-16.2/data

# 四、配置PostgreSQL

# 1、配置环境

# 为了方便,可以将该bin路径添加到PATH变量中。

vim /etc/profile

# 在末尾添加如下配置,PGHOME为pg的安装目录路径,PGDATA为pg的数据目录路径。

# PostsQL

export PGHOME=/opt/pgsql/pgsql-16.2

export PGDATA=/opt/pgsql/pgsql-16.2/data

export PATH=$PATH:$PGHOME/bin

# 重新加载系统环境变量

source /etc/profile

# 2、初始化数据库

# 切换到postgre用户,并使用initdb初始化数据库

su - postgres

cd /opt/pgsql/pgsql-16.2/data

initdb

# 如果出现下面这个就初始化成功

<!--

Success. You can now start the database server using:

    pg_ctl -D /opt/pgsql/data -l logfile start

-->

# 返回root用户,可以看到data目录下已经被初始化

su root

cd /opt/pgsql/pgsql-16.2/data

ls

<!--

base          pg_ident.conf  pg_serial     pg_tblspc    postgresql.auto.conf

global        pg_logical     pg_snapshots  pg_twophase  postgresql.conf

pg_commit_ts  pg_multixact   pg_stat       PG_VERSION

pg_dynshmem   pg_notify      pg_stat_tmp   pg_wal

pg_hba.conf   pg_replslot    pg_subtrans   pg_xact

-->

# 3、开机自启动

su root

# 修改启动文件

cd /opt/pgsql/postgresql-16.2/contrib/start-scripts

# 修改linux可执行

chmod a+x linux

# 修改linux文件的两个变量

# prefix设置为postgresql的安装路径:/opt/pgsql/pgsql-16.2

# PGDATA设置为postgresql的数据目录路径:/opt/pgsql/pgsql-16.2/data

# 注意, PGUSER 为运行 postgres 的用户

vim /opt/pgsql/postgresql-16.2/contrib/start-scripts/linux

# 先在顶部添加俩尖括号之间的内容,如下:#! /bin/bash

<!--

### BEGIN INIT INFO

 # Provides:          hutu

 # Required-Start:

 # Required-Stop:

 # Default-Start:     2 3 4 5

 # Default-Stop:      0 1 6

 # Short-Description: Start hutu daemon at boot time

 # Description:       Start hutu daemon at boot time

### END INIT INFO

-->

prefix=/opt/pgsql/pgsql-16.2

PGDATA="/opt/pgsql/pgsql-16.2/data"

# 复制到启动路径下,命名为postgresql

# init.d无法配置自动重启

# cp linux /etc/init.d/postgresql

cp /opt/pgsql/postgresql-16.2/contrib/start-scripts/linux /usr/local/bin/postgresql

# 更改文件可执行

# chmod +x /etc/init.d/postgresql

chmod +x /usr/local/bin/postgresql

# 创建一个 systemd 服务单元文件,让系统在启动时自动执行该脚本。创建并编辑一个新的服务单元文件,例如 postgresql.service:

vim /etc/systemd/system/postgresql.service

# 在编辑器中添加以下内容

# 这里的 ExecStart 指定了要执行的脚本文件的完整路径。

[Unit]

Description=PostgreSQL RDBMS

After=network.target

[Service]

Type=forking

User=postgres

Group=postgres

ExecStart=/opt/pgsql/pgsql-16.2/bin/pg_ctl start -D /opt/pgsql/pgsql-16.2/data -s -o "-p 5432"

ExecStop=/opt/pgsql/pgsql-16.2/bin/pg_ctl stop -D /opt/pgsql/pgsql-16.2/data -s -m fast

ExecReload=/opt/pgsql/pgsql-16.2/bin/pg_ctl reload -D /opt/pgsql/pgsql-16.2/data -s

[Install]

WantedBy=multi-user.target

<!--

# 测试脚本,废

[Unit]

Description=PostgresqlAutoStart

After=network.target

[Service]

Type=oneshot

ExecStart=/usr/local/bin/postgresql

[Install]

WantedBy=multi-user.target

-->

# 保存并退出编辑器

# 重新加载 systemd 管理的服务文件,使新的服务单元生效

systemctl daemon-reload

# 启用服务,使其在系统启动时自动执行

systemctl enable postgresql.service

systemctl start postgresql

# 现在,你的脚本文件应该会在系统启动时自动执行了。你可以重新启动系统来验证该功能是否正常运行

# 查看启动列表

systemctl list-unit-files

# update-rc.d命令没有启动成功,改成systemctl控制

# 然后使用 update-rc.d 命令将该脚本添加到系统的启动目录中

# update-rc.d postgresql defaults

# 4、重启查看状态

su root

systemctl status postgresql

# 其他常用命令

<!--

systemctl daemon-reload

systemctl stop postgresql

systemctl start postgresql

systemctl status postgresql

systemctl enable postgresql.service

systemctl disable postgresql.service

systemctl restart postgresql

-->

# 5、启动验证

# 进入postgres用户启动postgresql,测试创建数据库和数据表。

# 切换postgres用户

su - postgres

# 进入postgresql

psql

# 查看数据库,默认数据库postgres和template0、template1

\l

# 创建数据数据库testdb

create database testdb;

# 看到已经创建数据库testdb

\l

# 进入数据库testdb

\c testdb;

<!--

You are now connected to database "testdb" as user "postgres".

-->

# 创建表

create table t_user (id integer, name text);

# 插入测试数据

insert into t_user values (1,'hutu');

insert into t_user values (2,'糊涂');

# 查询数据

select * from t_user;

<!--

id | name

----+------

  1 | hutu

  2 | 糊涂

(2 rows)

-->

# 查看数据表

\d

<!--

         List of relations

 Schema |  Name  | Type  |  Owner  

--------+--------+-------+----------

 public | t_user | table | postgres

(1 row)

-->

# 退出psql窗口

\q

# 6、常用运维操作

# 修改/pgsql/postgresql/data目录下的两个文件。

# postgresql.conf   配置PostgreSQL数据库服务器的相应的参数。  

# pg_hba.conf        配置对数据库的访问权限。

# 修改监听所有网络以及数据库连接数

# 修改配置文件

# 先备份

cd /opt/pgsql/pgsql-16.2/data

cp postgresql.conf postgresql.conf.bak20240402

vim /opt/pgsql/pgsql-16.2/data/postgresql.conf

# listen_addresses = 'localhost' 监听本机,'*'监听所有网络

listen_addresses = '*'

# max_connections 数据库的连接数根据具体需求更改

# 远程访问

cd /opt/pgsql/pgsql-16.2/data

cp pg_hba.conf pg_hba.conf.bak20240402

vim /opt/pgsql/pgsql-16.2/data/pg_hba.conf

# 在文件的最下方加上下面的这句话,最后一个 trust 表示所有用户不需要密码,需要密码要设置为 md5:

host    all         all         0.0.0.0/0             md5

# 找到最下面这一行,加入如下内容,这样局域网的人才能访问。

<!--

# IPv4 local connections:

host    all             all             127.0.0.1/32            trust

-->

host    all             all             0.0.0.1/0            trust

# 加入后如下:

<!--

# IPv4 local connections:

host    all             all             0.0.0.1/0            trust

host    all             all             127.0.0.1/32            trust

-->

# 基础运维命令

# 切换postgres用户

su - postgres

# 重启服务

systemctl restart postgresql

# 停止服务

systemctl stop postgresql

# 查询状态服务

systemctl status postgresql

# 启动服务

systemctl start postgresql

# 防火墙

# 切换root用户

su - root

# 防火墙 允许5432 端口

ufw allow 5432

# 修改密码

# 切换用户

su - postgres

# 客户端登录

psql

psql -U postgres -h 127.0.0.1 -p 5432

# 查看本机IP,使用ip局域网连接

su root

ifconfig

su - postgres

psql -U postgres -h 192.168.48.129 -p 5432

# 输入postgre的数据库密码即可,我为123456

# 修改密码

alter user postgres with password '123456';

ALTER ROLE


 

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
安装 PostgreSQLUbuntu 22.04 上的步骤如下: 1. 打开终端并运行命令 `sudo apt update` 更新软件包列表。 2. 运行命令 `sudo apt install postgresql postgresql-contrib` 安装 PostgreSQL 和相关的扩展包。 3. 为了允许远程访问 PostgreSQL 服务器,打开配置文件 `postgresql.conf`。可以使用 `sudo vim /etc/postgresql/14/main/postgresql.conf` 命令来编辑该文件。 4. 在 `postgresql.conf` 文件的 `CONNECTIONS AND AUTHENTICATION` 部分,添加 `listen_addresses = '*'`,以允许来自任何 IP 地址的连接。 5. 重新启动 PostgreSQL 服务使修改生效,可以使用命令 `sudo service postgresql restart`。 6. 确认修改的效果,可以使用命令 `ss -nlt | grep 5432` 检查 PostgreSQL 是否在监听 5432 端口。 7. 编辑 `pg_hba.conf` 文件,配置服务器接受远程连接。可以使用命令 `sudo vi /etc/postgresql/14/main/pg_hba.conf` 来编辑该文件。在文件中添加一行,例如 `host all all 0.0.0.0/0 md5` 表示接受来自任何 IP 地址的连接。 8. 重启 PostgreSQL 服务使修改生效。 9. 如果服务器有防火墙,需要打开 5432 端口以允许远程访问。 10. 如果需要开启日志,可以编辑 `postgresql.conf` 文件并修改以下配置项: - 将 `logging_collector` 设置为 `on`,开启日志收集器。 - 设置 `log_directory` 为你希望保存日志文件的目录。 - 设置 `log_filename` 为日志文件的命名格式。 - 设置 `log_file_mode` 为日志文件的权限。 11. 重启 PostgreSQL 服务使修改生效。 请注意,上述步骤中的命令可能需要使用 `sudo` 获得管理员权限。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值