华为云Ubuntu中安装配置PostgreSQL与PostGIS

在安装前,确保云服务器安全组放开5432 端口。我的云服务器系统为Ubuntu server 64bit,参考如下网址分享的教程进行PostgreSQL与PostGIS的安装。

https 复制代码
https://www.cnblogs.com/echohye/p/18005445
https://zhuanlan.zhihu.com/p/467644334
https://cn.linux-console.net/?p=22460
https://www.cnblogs.com/echohye/p/18005059
https://developer.baidu.com/article/details/3269917
https://blog.csdn.net/ReBeX/article/details/120558199
https://support.huaweicloud.com/bestpractice-hce/hce_bp_0005.html

主要参考第一个链接进行的安装与配置。但是我在安装完才知道,华为Flexus云服务Ubuntu系统默认安装了最新的PG17.2版本,所以无需安装PostgreSQL,直接使用即可。

(1)安装PostgreSQL

第1步:添加PostgreSQL APT仓库,以下代码会将PostgreSQL的APT仓库添加到你的系统中,$(lsb_release -cs)会自动获取当前Ubuntu版本的代号(例如focalbionic等),并将其用于APT仓库的配置。

bash 复制代码
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

第2步:导入APT仓库的签名密钥,会下载并导入PostgreSQL仓库的签名密钥,以便APT可以验证从该仓库下载的软件包的签名。

bash 复制代码
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

第3步:更新APT软件包索引,更新APT的软件包索引,确保APT知道新添加的仓库中的软件包信息。

bash 复制代码
sudo apt update

第4步:安装特定版本的PostgreSQL,下面安装了PG 14,如果安装其他版本,将软件包名称中的版本号更改为你需要的版本即可。

bash 复制代码
sudo apt install postgresql-14

这个过程中需要回复Y,并且需要一点时间下载安装。

第5步:启动PostgreSQL服务。安装完成后,PostgreSQL 服务应该会自动启动。如果服务未启动,使用以下命令手动启动它,代码中sudo表示以root权限执行命令,因为启动系统服务通常需要管理员权限;systemctl是用于管理系统服务的命令行工具,常用于启动、停止、重启和查看系统服务的状态等操作;start指定要执行启动服务的操作;postgresql@14-main:指定要启动的服务名称,表示PostgreSQL 14版本的主服务实例,其中 @符号后面的14-main是服务实例的名称,14表示PostgreSQL的版本号,main是服务实例的名称。如果安装的其他版本就需要做出相应的修改。

bash 复制代码
sudo systemctl start postgresql@14-main

启动服务后,使用如下命令检查服务的状态。

bash 复制代码
sudo systemctl status postgresql@14-main

状态查询结果如下所示,其中第一行包含了服务的名称和描述,这里是PostgreSQL 14版本的主集群服务。第二行表示服务加载成功,包含了服务的配置文件路径,其中的enabled-runtime表示服务在当前会话中被启用,但可能没有在系统启动时自动启动,preset: enabled表示服务被预设为在系统启动时自动启动。Active: active (running)表示服务当前处于活动状态并且正在运行。其他的信息包括服务的进程ID、当前几个进程与该服务有关、占用的内存与CPU、服务所属的cgroup路径等。

(2)安装PostGIS

使用以下命令在Ubuntu系统中安装与PostgreSQL 14兼容的PostGIS版本,这一步同样需要一点时间来下载和安装。

bash 复制代码
sudo apt install postgis postgresql-14-postgis-3
(3)创建数据库并启用PostGIS

第1步:使用如下代码以PostgreSQL的默认数据库用户postgres的身份启动PostgreSQL的命令行界面。在大多数Linux系统中,postgres用户通常没有登录权限,因此需要使用sudo来切换到该用户;-u postgres指定要切换到postgres用户;psql是PostgreSQL的命令行工具,用于与PostgreSQL数据库进行交互,执行SQL命令、管理数据库等操作。如果已经在 Ubuntu 添加环境变量,可以直接使用psql

bash 复制代码
sudo -u postgres psql

执行上面的代码后,会进入psql的交互式命令行界面,提示符通常会显示为postgres=#,表示你已经以postgres用户登录到了PostgreSQL数据库中。

第2步:创建数据库,使用如下代码在 PostgreSQL 命令行中创建一个数据库,名为postgis_test,其中CREATE DATABASE是SQL标准命令,用于创建数据库。此外,在SQL语句中,分号(;)通常用于表示语句的结束。在大多数情况下,分号是必要的,因此代码中的分号别忘记。

bash 复制代码
CREATE DATABASE postgis_test;

若需修改postgres用户密码,在进入数据库后,执行以下命令,二次确认密码后即可。执行命令后,系统会提示你输入新的密码。出于安全考虑,输入的密码不会显示在屏幕上;输入新密码后,按回车键继续。

bash 复制代码
\password postgres

第3步:启用PostGIS。先进入刚才创建的数据库,\cpsql中的一个命令,用于切换当前连接的数据库。进入数据库后,系统提示:You are now connected to database "postgis_test" as user "postgres"。我没有仔细注意下面的截图,其实这里就表明系统中已经存在了自带的PG17.2版本。

bash 复制代码
\c postgis_test;

然后启用 PostGIS 扩展,代码如下所示,其中CREATE EXTENSION命令用于在数据库中安装和启用一个扩展。

bash 复制代码
CREATE EXTENSION postgis;

此外,在这个链接:Ubuntu安装postgresql和postgis - 槑孒 - 博客园 中,还介绍到如果需要启用其他的地理空间扩展(如 topology、tiger_geocoder 等),可以进一步启用它们。

bash 复制代码
CREATE EXTENSION postgis_topology;
CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION postgis_tiger_geocoder;

最后退出PostgreSQL命令行。

bash 复制代码
\q

到此就已经在 Ubuntu 上成功安装了 PostgreSQL 和 PostGIS,并创建了一个具有 PostGIS 扩展的数据库。

(4)查看postgresql数据库和postgis版本

使用如下第一行命令查看 PostgreSQL 数据库的版本,会输出psql的版本号以及相关的编译信息,这里显示了我的云服务器上编译psql工具时使用的包版本信息,包括操作系统信息和包版本号。其中psql (PostgreSQL) 17.2表示psql工具的版本是17.2,Ubuntu 17.2-1.pgdg24.04+1表示这个包是由PostgreSQL Global Development Group (PGDG) 提供的,并且是为Ubuntu 24.04版本编译的,是PostgreSQL 17.2的第一个版本包。但很奇怪的是,我这里一开始安装的是14版本,这里为什么显示最新的17.2版本了呢。

bash 复制代码
psql --version
输出结果:
psql (PostgreSQL) 17.2 (Ubuntu 17.2-1.pgdg24.04+1)
也可以使用如下代码不进入数据库,使用psql连接PostgreSQL数据库并且打印版本
sudo -u postgres psql -c "SELECT version();"

使用find命令查找系统中所有版本的psql

bash 复制代码
find / -name 'psql'

结果如下所示,看到存在2个psql,苍天啊,这表明华为云服务器的Ubuntu默认安装了PG17,我前面根本没有必要安装PG14版本。

如果需要使用14版本的psql,可以通过添加路径来启动:

bash 复制代码
/usr/lib/postgresql/14/bin/psql

要检查要PG14是否安装了 PostGIS 扩展,并查看其版本,需要先连接到 PostgreSQL 数据库并执行以下 SQL 查询,代码如下所示:

bash 复制代码
先进入数据库
sudo -u postgres psql
\c postgis_test;
再看版本号
SELECT PostGIS_full_version();

结果如下所示,表示为PG14安装了PostGIS插件3.5.1版本。最后,以此点击键盘上的\q退出当前的窗口。

(5)配置postgresql数据库ip连接

Ubuntu安装postgresql和postgis - 槑孒 - 博客园 https://www.cnblogs.com/echohye/p/18005445一文中说到:刚安装的数据库,默认只有本机ip可以连接,如需要远程连接还需要配置ip地址;要设置 PostgreSQL 允许特定 IP 地址访问,需要编辑 PostgreSQL 的配置文件 postgresql.conf 和访问控制文件 pg_hba.conf。我查询了一下,postgresql.conf 文件定义了PostgreSQL服务器的全局配置参数,pg_hba.conf 文件定义了客户端认证规则,决定了哪些用户可以从哪些主机连接到哪些数据库。

第一步修改postgresql.conf 文件,打开postgresql.conf文件,找到listen_addresses参数。默认情况下,它可能设置为localhost或注释掉,修改为允许特定IP地址或所有IP地址。

bash 复制代码
# 先使用vim打开文件
sudo vim /etc/postgresql/14/main/postgresql.conf
# 使用/检索关键字
/listen_addresses
默认的为:#listen_addresses = 'localhost'
# 点击i进入输入模式,修改参数,删除原文中该句前面的#号
listen_addresses = 'IP地址'  # 允许特定IP
# 或者
listen_addresses = '*'  # 允许所有IP
# 修改后 :w保存 :q退出即可

重新启动 PostgreSQL 服务使更改生效。

bash 复制代码
sudo systemctl restart postgresql@14-main

第二步修改pg_hba.conf 文件,在文件中添加允许访问的规则。例如,如果要允许来自 IP 地址 192.168.1.100 的所有用户访问所有数据库,代码如下所示。其中,host是规则的类型,表示这是一个主机认证规则;第一个all表示允许连接到所有数据库,可以将其替换为特定的数据库名称;第二个all表示允许所有用户连接;特定IP是允许连接的IP地址范围;md5表示使用MD5加密的密码进行认证。

bash 复制代码
# 打开文件
sudo vim /etc/postgresql/14/main/pg_hba.conf
# 修改规则,将#注释去掉
host    all             all            特定IP         md5
# 或者允许来自任何 IP 地址的所有用户通过密码验证连接到所有数据库
host all all 0.0.0.0/0 md5
# 保存并关闭文件后,重新启动 PostgreSQL 服务使更改生效
sudo systemctl restart postgresql@14-main
# 最后,可有可无的一步:确保防火墙允许 PostgreSQL 的默认端口(5432)通过
sudo ufw allow 5432/tcp

最后,使用本地的psql测试远程连接,代码如下所示,其中:psql是 PostgreSQL 的命令行工具,-U postgres指定数据库的用户名,-h 云服务器的IP指定数据库服务器的主机地址,-d 数据库指定要连接的数据库名称,-W用来强制 psql 在连接时提示输入密码(可选)。如截图所示,提示输入用户的口令,输入后能够远程连接,便表示设置没有问题了。

复制代码
psql -U postgres -h 云服务器的IP -d 数据库 -W
(6)设置root用户可以直接 psql (不推荐)

我们不想每次使用都先:sudo -u postgres psql来启动SQL命令行,希望root用户能够直接登录PostgreSQL服务器,可以添加环境变量并创建一个root角色,以便打开云服务器后就直接使用 psql

首先,找到 psql 命令的路径。通常,它位于 /usr/bin/psql,可以使用 which psql 命令来查询。或者安装包:apt install plocate,使用locate psql命令查询。然后,查询一下环境变量中是否已有/usr/bin/,使用echo $PATH打印,如果打印结果中有该路径,那么就不需要再添加环境变量。

如果没有该路径,需要将 /usr/bin 目录添加到 PATH 环境变量中。我的 psql 位于 /usr/bin/psql,所以将 /usr/bin 添加到 PATH 中,这里包括为当前用户添加环境变量和为所有用户添加环境变量两种方式。第一种,给当前用户添加环境变量,先打开当前用户的 ~/.bashrc 文件:nano ~/.bashrc;在文件末尾添加:export PATH="/usr/bin:$PATH";保存并关闭文件,然后运行以下命令使更改生效:source ~/.bashrc。第二种,为所有用户添加了环境变量,打开 /etc/profile 文件:sudo nano /etc/profile;在文件末尾添加:export PATH="/usr/bin:$PATH";然后使用ctrl+x快捷键退出,会提示是否保存,输入y保存,之后会提示是否要写入文件,使用回车键写入;最后,然后运行以下命令使更改生效:source /etc/profile

如果希望root用户能够直接登录PostgreSQL服务器,还需要为root用户创建超级角色用户,执行如下代码:

sql 复制代码
sudo -u postgres psql
创建一个名为root的超级用户角色,可以不设置密码,则删除:PASSWORD 'your_password'
CREATE ROLE root WITH SUPERUSER LOGIN PASSWORD 'your_password';
创建一个名为root的数据库
REATE DATABASE root;
确保root角色可以访问和操作新创建的root数据库
GRANT ALL PRIVILEGES ON DATABASE root TO root;

最终,可以直接使用psql命令,但是这样设置与系统用户相同的名称(root)来创建数据库角色可能会引起混淆,所以不推荐

相关推荐
BD_Marathon38 分钟前
Ubuntu:Mysql服务器
服务器·mysql·ubuntu
0wioiw02 小时前
Ubuntu基础(监控重启和查找程序)
linux·服务器·ubuntu
Tipriest_2 小时前
Ubuntu常用的软件格式deb, rpm, dmg, AppImage等打包及使用方法
linux·运维·ubuntu
GBXLUO2 小时前
windows的vscode无法通过ssh连接ubuntu的解决办法
vscode·ubuntu
笑衬人心。4 小时前
Ubuntu 22.04 修改默认 Python 版本为 Python3 笔记
笔记·python·ubuntu
物联网老王14 小时前
Ubuntu Linux Cursor 安装与使用一
linux·运维·ubuntu
fangeqin1 天前
ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
linux·python·ubuntu·openssl
风口上的吱吱鼠1 天前
Armbian 25.5.1 Noble Gnome 开启远程桌面功能
服务器·ubuntu·armbian
笑衬人心。1 天前
Ubuntu 22.04 + MySQL 8 无密码登录问题与 root 密码重置指南
linux·mysql·ubuntu
坤坤不爱吃鱼1 天前
【MySQL\Oracle\PostgreSQL】迁移到openGauss数据出现的问题解决方案
mysql·postgresql·oracle