ubuntu22下自定义安装postgresql16

本文详细指导如何从源码安装PostgreSQL,包括下载依赖包、配置编译过程、创建用户、设置环境变量、初始化数据库、系统启动和防火墙配置,以及密码修改等内容。
摘要由CSDN通过智能技术生成

# 一、安装说明

# 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


 

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Ubuntu 是一种流行的操作系统,可以用于服务器和个人电脑。PostgreSQL 是一款开源的关系型数据库管理系统,广泛用于企业级应用程序。安装 PostgreSQLUbuntu 中有几种方法,下面介绍两种较为常用的方式。 方法一:使用 Ubuntu 软件源安装 Ubuntu 软件源提供了 PostgreSQL 的最新版本,可通过以下命令安装: 1. 打开终端并切换到 root 用户: ``` sudo -i ``` 2. 更新系统软件源: ``` apt update ``` 3. 安装 PostgreSQL: ``` apt install postgresql postgresql-contrib ``` 4. 安装完成后,启动 PostgreSQL 服务: ``` systemctl start postgresql ``` 5. 设置 PostgreSQL 开机自启动: ``` systemctl enable postgresql ``` 安装完成后,您可以使用以下命令登录 PostgreSQL: ``` sudo -i -u postgres psql ``` 方法二:从源代码编译安装 如果您需要安装一个特定版本的 PostgreSQL 或者想要自定义编译选项,可以选择从源代码编译安装。 要从源代码编译安装 PostgreSQL,可以按照以下步骤进行: 1. 下载 PostgreSQL 的源代码包: ``` wget https://ftp.postgresql.org/pub/source/v13.2/postgresql-13.2.tar.gz ``` 2. 解压源代码包: ``` tar -zxvf postgresql-13.2.tar.gz ``` 3. 切换到解压后的目录: ``` cd postgresql-13.2 ``` 4. 安装编译依赖项: ``` apt install build-essential libreadline-dev zlib1g-dev libxml2-dev libssl-dev libsqlite3-dev ``` 5. 编译和安装 PostgreSQL: ``` ./configure --prefix=/usr/local/pgsql --with-pgport=5432 make make install ``` 6. 配置 PostgreSQL: ``` adduser postgres mkdir /usr/local/pgsql/data chown postgres /usr/local/pgsql/data su - postgres /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start /usr/local/pgsql/bin/createuser -s -P username /usr/local/pgsql/bin/createdb databasename ``` 安装完成后,您可以使用以下命令登录 PostgreSQL: ``` su - postgres /usr/local/pgsql/bin/psql ``` 总之,如果您需要在 Ubuntu安装 PostgreSQL,您可以选择从 Ubuntu 软件源或者源代码编译安装。两种安装方式都比较简单,您可以根据自己的需要选择适合的方式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值