PostgreSQL 或 Postgres 是一种关系数据库管理系统,提供 SQL 查询语言的实现。它符合标准并具有许多高级功能,例如可靠事务和无读锁的并发性。本篇介绍如何在 Ubuntu 18.04 服务器上快速启动和运行 Postgres,从安装 PostgreSQL 到设置新用户和数据库。

PostgreSQL 在类似BSD授权与MIT授权的PostgreSQL授权下发行。PostgreSQL 这个单字的拼法让有些人觉得很难读,特别是那些把 SQL 读作 “sequel” 的人。PostgreSQL 开发者把它读作 “post-gress-Q-L”。它也经常被简称为”postgres”。

安装 PostgreSQL

1
2
sudo apt update
sudo apt install postgresql postgresql-contrib

查看是否安装允许成功:

1
sudo systemctl status postgresql.service

PostgreSQL 角色和数据库

默认情况下,Postgres 使用一个称为“角色”的概念来处理身份验证和授权。在某些方面,它们类似于常规的 Unix 风格的用户和组。 安装后,Postgres 设置为使用 ident 身份验证,这意味着它将 Postgres 角色与匹配的 Unix/Linux 系统帐户相关联。如果 Postgres 中存在角色,则具有相同名称的 Unix/Linux 用户名可以作为该角色登录。 安装过程创建了一个名为 postgres 的用户帐户,该帐户与默认 Postgres 角色相关联。有几种方法可以利用此帐户访问 Postgres。一种方法是通过运行以下命令切换到服务器上的 postgres 帐户:

1
sudo -i -u postgres

然后您可以通过运行以下命令访问 Postgres 提示符:

1
psql

这将使您登录到 PostgreSQL 提示符,从这里您可以立即自由地与数据库管理系统进行交互。
要退出 PostgreSQL 提示符,请运行以下命令:

1
\q

连接到 Postgres 提示符的另一种方法是使用 sudo 直接以 postgres 帐户运行 psql 命令:

1
sudo -u postgres psql

创建角色

如果您以 postgres 帐户登录,则可以通过运行以下命令来创建新角色:

1
createuser --interactive

相反,如果您更喜欢对每个命令使用 sudo 而不从您的普通帐户切换,请运行:

1
sudo -u postgres createuser --interactive

无论哪种方式,脚本都会提示您一些选择,并根据您的响应执行正确的 Postgres 命令来创建符合您要求的用户。

1
2
3
Output
Enter name of role to add: jinzhongxu
Shall the new role be a superuser? (y/n) y

创建数据库

Postgres 身份验证系统默认做出的另一个假设是,对于任何用于登录的角色,该角色将拥有一个可以访问的同名数据库。 这意味着如果您在上一节中创建的用户名为 jinzhongxu,则该角色将尝试连接到默认情况下也称为“jinzhongxu”的数据库。您可以使用 createdb 命令创建适当的数据库。 如果您以 postgres 帐户登录,您将键入如下内容:

1
2
3
createdb jinzhongxu
# 删除数据库
dropdb jinzhongxu

相反,如果您更喜欢对每个命令使用 sudo 而不从您的普通帐户切换,则可以运行:

1
sudo -u postgres createdb jinzhongxu

使用新角色打开 Postgres

要使用基于身份的身份验证登录,您需要一个与您的 Postgres 角色和数据库同名的 Linux 用户。 如果您没有匹配的 Linux 用户可用,您可以使用 adduser 命令创建一个。您必须从具有 sudo 权限的非 root 帐户执行此操作(意思是,未以 postgres 用户身份登录):

1
2
3
4
5
6
7
sudo adduser jinzhongxu

sudo -i -u jinzhongxu
psql

# or
sudo -u jinzhongxu psql

假设所有组件都已正确配置,此命令将自动让您登录。 如果您希望您的用户连接到不同的数据库,您可以通过指定数据库来实现,如下所示:

1
psql -d postgres

登录后,您可以通过运行以下命令检查您当前的连接信息:

1
\conninfo

参考文献

  1. How To Install PostgreSQL on Ubuntu 20.04