环境准备
上面一篇文章 我们讲解了在 Windows 环境上面安装 PostgreSQL 的简单介绍,准备环境基本一样。
- ubuntu server 20.04 镜像下载地址 =》Get Ubuntu Server | Download | Ubuntu

此处我们安装系统环境是 linux for ubuntu,所以选择 linux 进入页面,如下所示:

- 更多信息请查看 =》 PostgreSQL: Linux downloads (Ubuntu)
Ubuntu Server 安装 PostgerSQL
PostgreSQL 可以从 Ubuntu 主存储库中获取。然而,和许多其它开发工具一样,它可能不是最新版本。
首先在 shell 终端中使用 apt 命令检查 Ubuntu 存储库中可用的 PostgreSQL 版本:
sudo apt show postgresql

在我的 Ubuntu 20.04 中,它显示 PostgreSQL 的可用版本是 12(12+214 表示版本 12) 而 PostgreSQL 版本 13.x 已经发布。
PostgreSQL 软件发布:2020-09-24
- PostgreSQL 全球开发组今天宣布 PostgreSQL 13 正式发布, 作为世界上最先进的开源数据库,PostgresSQL 13 是目前的最新版本。
- PostgreSQL 13 在索引和查找方面进行了重大改进,有利于大型数据库系统,同时包括索引的空间节省和性能提高,使用聚合或分区的查询时的更快响应,使用增强的统计信息时更优化的查询计划,以及很多其他改进。
- PostgreSQL 13 除了具有强烈要求的功能(如并行清理和增量排序)外,还为不同大小的负载提供了更好的数据管理体验。此版本针对日常管理进行了优化,为应用程序开发人员提供了更多便利,并增强了安全性。
- "PostgreSQL 13 展示了我们全球社区在增强世界上最先进的开源关系数据库功能方面的协作和奉献精神。"PostgreSQL 核心团队成员 Peter Eisentraut 说, "每个发行版所带来的创新以及其在可靠性和稳定性方面的声誉,这是为什么越来越多的人选择在其应用程序中使用 PostgreSQL 的原因"。
- PostgreSQL 是一种创新的数据管理系统,以其可靠性和健壮性著称,得益于全球开发者社区 超过25年的开源开发,它已成为各种规模组织首选的开源关系型数据库。
更多 PostgreSQL 13 发布相关信息请查看 =》
根据这些信息,你可以自主决定是安装 Ubuntu 提供的版本还是还是获取 PostgreSQL 的最新发行版。
方法一:通过 Ubuntu 存储库安装 PostgreSQL
在 shell 终端中采用如下命令安装:
sudo apt update
sudo apt install postgresql postgresql-contrib
根据提示输入你的密码,依据于你的网速情况,程序将在几秒到几分钟安装完成。说到这一点,随时检查 Ubuntu 中的各种网络带宽。
什么是 postgresql-contrib ?
postgresql-contrib或者说contrib包,包含一些不属于PostgreSQL核心包的实用工具和功能。在大多数情况下,(推荐)最好将contrib包与PostgreSQL核心一起安装。
方法二:在 Ubuntu 中安装最新版本的 PostgreSQL 13.x
要安装 PostgreSQL 13,你需要在 sources.list 中添加官方 PostgreSQL 存储库和证书,然后从那里安装它。
不用担心,这并不复杂。 只需按照以下步骤:
# 1.创建文件库配置 / Create the file repository configuration:
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.导入仓库签名密钥(GPG 密钥) / Import the repository signing key:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# 3.更新套餐列表 / Update the package lists:
sudo apt update
# 4.安装最新版本的 PostgreSQL / Install the latest version of PostgreSQL.
# 如果您想要特定的版本,请使用‘PostgreSQL-12’或类似版本代替‘PostgreSQL’ / If you want a specific version, use 'postgresql-12' or similar instead of 'postgresql':
sudo apt -y install postgresql
打印版本信息验证安装
一旦安装完成, PostgreSQL 服务将会自动启动。使用 psql 工具通过连接 PostgreSQL 数据库并且打印它的版本来验证安装:
sudo -u postgres psql -c "SELECT version();"
输出如下信息:

看到如上信息,说明 PostgreSQL 就已经安装好了,你可以开始使用它了。
PostgreSQL GUI 应用程序/客户端管理界面
你也可以安装用于管理 PostgreSQL 数据库的 GUI 应用程序(pgAdmin):
sudo apt install pgadmin4
PostgreSQL 角色和身份认证方式
说明:
PostgreSQL 数据库访问权限是通过角色来处理的。一个角色代表一个数据库用户或者一个数据库用户组。
PostgreSQL 支持多种身份认证方式。最常用的方法如下:
- Trust - 只要满足
pg_hba.conf定义的条件,一个角色就可以不使用密码就能连接服务器。 - Password - 通过密码,一个角色可以连接服务器。密码可以被存储为
scram-sha-256、md5 和password(明文)。 - Ident - 仅仅支持
TCP/IP连接。它通常通过一个可选的用户名映射表,获取客户端操作系统用户名。 - Peer - 和
Ident一样,仅仅支持本地连接。
PostgreSQL 客户端身份验证通常被定义在 pg_hba.conf 文件中。默认情况下,对于本地连接,PostgreSQL 被设置成身份认证防范 peer。
两种方式访问 PostgreSQL 服务器
- 为了以
postgres用户身份登录PostgreSQL服务器,首先切换用户,然后使用psql工具访问PostgreSQL。
# 切换用户
sudo su - postgres
# 进入 PostgreSQL Shell
psql
# 退出 PostgreSQL Shell
\q
- 你也可以不切换用户,而使用
sudo命令访问PostgreSQL。
sudo -u postgres psql
注意:通常postgres用户仅应用于本地使用,正式生产环境可以使用postgres账户重新创建账户,授权角色信息并指定db数据库;
PostgreSQL 其他命令
你可以通过执行命令来检查 PostgreSQL 是否正在运行,命令操作如下:
service postgresql status

通过 service 命令,你可以启动、关闭或重启 postgresql。输入 service postgresql 并按回车将列出所有选项。
swskj@swskj-server:~$ service postgresql
Usage: /etc/init.d/postgresql {start|stop|restart|reload|force-reload|status} [version ..]
默认情况下,PostgreSQL 会创建一个拥有所权限的特殊用户 postgres。
要实际使用 PostgreSQL,你必须先登录该账户,执行如下命令:
sudo su postgres
此时提示符会更改为类似于以下的内容:

现在,使用 psql 命令来启动 PostgreSQL Shell,会显示 postgress=# 提示符,如下所示:

psql 基本命令说明:
- 输入
\q以退出; - 输入
\?获取帮助; - 输入
\l列出所有列表;

查看 psql 工具命令帮助=> \?

你可以使用以下命令更改任何用户(包括 postgres)的密码:
ALTER USER postgres WITH PASSWORD 'my_password';
注意:将postgres替换为你要更改的用户名,my_password替换为所需要的密码。另外,不要忘记每条命令后面的“;”(分号)。
建议你另外创建一个用户(不建议使用默认的 postgres 用户)。为此,请使用以下命令:
CREATE USER my_user WITH PASSWORD 'my_password';
刚创建的 my_user 用户没有任何的属性。给它添加超级用户权限:
ALTER USER my_user WITH SUPERUSER;
输入 \du 命令查看 PostgreSQL 用户:

如果创建的用户不想使用,可以使用 DROP 命令删除用户:
DROP USER my_user;
要使用其他用户登录,使用 \q 命令退出,然后使用以下命令登录:
psql -U my_user
还可以使用 -d 参数直接连接数据库:
psql -U my_user -d my_db
你可以使用其他已存在的用户调用 PostgreSQL。
例如,我使用 ubuntu 登录,从 shell 终端执行以下命名:
psql -U ubuntu -d postgres
注意:你必须指定一个数据库(默认情况下,它将尝试将你连接到与登录的用户名相同的数据库)。
如果遇到如下错误:
psql: FATAL: Peer authentication failed for user "my_user"
确保以正确的用户身份登录,并使用管理员权限编辑 /etc/postgresql/13/main/pg_hba.conf:
sudo vim /etc/postgresql/13/main/pg_hba.conf
注意:用你的版本替换 13(例如 12)。
对如下所示的一行进行替换:
local all postgres peer
替换为:
local all postgres md5
替换完成后(保存退出编辑),然后重启 PostgreSQL 使配置信息生效:
sudo service postgresql restart
安装完成后查询相关的包,命令操作如下:
dpkg -l|grep postg

以非管理员账户查看:

psql 控制台命令:除了前面已经用到的 \password 命令(设置密码)和 \q 命令(退出)以外,控制台还提供一系列其他命令。
\h:查看SQL命令的解释,比如\h select。
\?:查看psql命令列表。
\l:列出所有数据库。
\c [database_name]:连接其他数据库。
\d:列出当前数据库的所有表格。
\d [table_name]:列出某一张表格的结构。
\du:列出所有用户。
\e:打开文本编辑器。
\conninfo:列出当前数据库和连接的信息。
创建 PostgreSQL 角色和数据库
- 仅仅超级用户和拥有
CREATEROLE权限的角色可以创建新角色。
在下面的例子中,我们创建一个名称为 john 的角色,一个名称为 johndb 的数据库,并且授予该数据库上的权限:
# 1.创建一个新的 PostgreSQL 角色
sudo su - postgres -c "createuser john"
# 2.创建一个新的 PostgreSQL 数据库
sudo su - postgres -c "createdb johndb"
# 3.授权用户操作数据库,连接到 PostgreSQL shell
sudo -u postgres psql
# 4.运行下面的 query
grant all privileges on database johndb to john;
启用远程访问 PostgreSQL 服务器
说明:默认情况下,PostgreSQL服务器仅仅监听本地网络接口:127.0.0.1。
编辑【postgresql.conf】文件,配置 PostgreSQL 服务器允许远程访问
为了允许远程访问你的 PostgreSQL 服务器,打开配置文件【postgresql.conf】并且在【CONNECTIONS AND AUTHENTICATION】一节添加【listen_addresses = '*'】。
查看【postgresql.conf】配置信息,命令操作如下:
sudo nano /etc/postgresql/12/main/postgresql.conf
显示如下信息:

按键盘【上↑下↓箭头】滑动配置文本,并且在【CONNECTIONS AND AUTHENTICATION】一节添加【listen_addresses = '*'】。

保存修改文件,选择【Y/Yes】按【Enter】推出,并且重启 PostgreSQL 服务:
sudo service postgresql restart
使用 ss 工具验证上述配置修改是否生效:
ss -nlt | grep 5432
输出显示 PostgreSQL 服务器正在监听所有的网络接口(0.0.0.0),显示如下信息:

编辑【pg_hba.conf】文件,配置 PostgreSQL 服务器接受远程连接
下面是一些例子,显示不同的用户场景:
# TYPE DATABASE USER ADDRESS METHOD
# The user jane can access all databases from all locations using md5 password
host all jane 0.0.0.0/0 md5
# The user jane can access only the janedb from all locations using md5 password
host janedb jane 0.0.0.0/0 md5
# The user jane can access all databases from a trusted location (192.168.1.134) without a password
host all jane 192.168.1.134 trust
配置防火墙开放 PostgreSQL 服务器默认端口【5432】
假设你正在使用【UFW/Ubuntu 防火墙】来管理你的防火墙,并且你想允许从【192.168.1.0/24】子网过来的访问,你应该运行下面的命令:
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 5432
此处环境配置的子网掩码是【255.255.0.0/16】所以执行如下命令,这里根据自己实际网络环境配置处理。

确保你的防火墙被配置好,并仅仅接受来自受信任 IP 范围的连接。
以上就是 ubuntu server 20.04 lts 服务器环境安装和配置 postgresql 的简单介绍,欢迎更多的小伙伴安装尝试。
关于【pgsql 12.6.x】更多信息,请查看文档 =》PostgreSQL: Documentation: 12: PostgreSQL 12.6 Documentation