介绍
pgAdmin是 PostgreSQL 及其相关数据库管理系统的开源管理和开发平台。它用 Python 和 jQuery 编写,支持 PostgreSQL 中的所有功能。您可以使用 pgAdmin 完成从编写基本 SQL 查询到监控数据库和配置高级数据库架构的所有工作。
在本教程中,我们将介绍在 Ubuntu 18.04 服务器上安装和配置最新版本的 pgAdmin、通过 Web 浏览器访问 pgAdmin 并将其连接到服务器上的 PostgreSQL 数据库的过程。
先决条件
要完成本教程,您需要:
- 运行 Ubuntu 18.04 的服务器。此服务器应具有具有 sudo 权限的非 root 用户,以及配置为
ufw
. 如需有关设置的帮助,请遵循我们的 Ubuntu 18.04 初始服务器设置指南。 - 安装在您的服务器上的 Apache Web 服务器。按照我们关于如何在 Ubuntu 18.04 上安装 Apache Web 服务器的指南在您的机器上进行配置。
- PostgreSQL 安装在您的服务器上。您可以按照我们关于如何在 Ubuntu 18.04 上安装和使用 PostgreSQL 的指南进行设置。当您按照本指南进行操作时,请务必创建一个新的角色和数据库,因为您将需要两者来将 pgAdmin 连接到您的 PostgreSQL 实例。
- Python 3 并
venv
安装在您的服务器上。按照如何在 Ubuntu 18.04 服务器上安装 Python 3 和设置编程环境来安装这些工具并设置虚拟环境。
步骤 1 — 安装 pgAdmin 及其依赖项
在撰写本文时,pgAdmin 的最新版本是 pgAdmin 4,而通过官方 Ubuntu 存储库提供的最新版本是 pgAdmin 3。虽然不再支持 pgAdmin 3,项目维护者建议安装 pgAdmin 4。在这一步,我们将介绍在虚拟环境中安装最新版本的 pgAdmin 4 的过程(按照项目开发团队的建议)并使用apt
.
首先,如果您最近没有更新服务器的包索引:
- sudo apt update
接下来,安装以下依赖项。这些包括libgmp3-dev
,一个多精度算术库;libpq-dev
,其中包括头文件和一个有助于与 PostgreSQL 后端通信的静态库;和libapache2-mod-wsgi-py3
Apache 模块,它允许您在 Apache 中托管基于 Python 的 Web 应用程序:
- sudo apt install libgmp3-dev libpq-dev libapache2-mod-wsgi-py3
在此之后,创建几个目录,pgAdmin 将在其中存储其会话数据、存储数据和日志:
- sudo mkdir -p /var/lib/pgadmin4/sessions
- sudo mkdir /var/lib/pgadmin4/storage
- sudo mkdir /var/log/pgadmin4
然后,将这些目录的所有权更改为您的非 root 用户和组。这是必要的,因为它们当前由您的root用户拥有,但是我们将从您的非 root 用户拥有的虚拟环境中安装 pgAdmin,并且安装过程涉及在这些目录中创建一些文件。但是,安装后,我们会将所有权更改为www-data用户和组,以便可以将其提供给网络:
- sudo chown -R sammy:sammy /var/lib/pgadmin4
- sudo chown -R sammy:sammy /var/log/pgadmin4
接下来,打开您的虚拟环境。导航到您的编程环境所在的目录并激活它。按照必备 Python 3 教程的命名约定,我们将转到environments
目录并激活my_env
环境:
- cd environments/
- source my_env/bin/activate
激活虚拟环境后,请谨慎确保pip
您的系统上安装了最新版本。的版本pip
这可以从Ubuntu默认18.04库版本为9.0.1,而最新的版本是21.0.1。如果pyton3-pip
按照先决条件 Python 安装教程中的说明安装了软件包,但您尚未将其升级到最新版本,则在下一步配置 pgAdmin 时会遇到问题。
要升级pip
到最新版本,请运行以下命令:
- python -m pip install -U pip
在此之后,将 pgAdmin 4 源代码下载到您的机器上。要查找最新版本的源代码,请导航到pgAdmin 4 (Python Wheel) 下载页面。单击最新版本的链接(在撰写本文时为v5.1),然后在下一页单击链接阅读pip。从这个文件浏览器页面,复制以.whl
– 用于 Python 发行版的标准内置包格式结尾的文件链接。然后返回您的终端并运行以下wget
命令,确保将链接替换为您从 PostgreSQL 站点复制的链接,该链接会将.whl
文件下载到您的服务器:
- wget https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v5.1/pip/pgadmin4-5.1-py3-none-any.whl
接下来安装wheel
包,参考实现车轮打包标准。一个 Python 库,这个包用作构建轮子的扩展,并包含一个用于处理.whl
文件的命令行工具:
- python -m pip install wheel
然后使用以下命令安装 pgAdmin 4 包:
- python -m pip install pgadmin4-5.1-py3-none-any.whl
这负责安装 pgAdmin 及其依赖项。但是,在将其连接到数据库之前,您需要对程序的配置进行一些更改。
第 2 步 – 配置 pgAdmin 4
尽管 pgAdmin 已安装在您的服务器上,但您仍然必须执行一些步骤以确保它具有允许其正确服务 Web 界面所需的权限和配置。
pgAdmin 的主要配置文件,config.py
,在任何其他配置文件之前被读取。它的内容可以用作可以在 pgAdmin 的其他配置文件中指定的进一步配置设置的参考点,但是为了避免不可预见的错误,您不应编辑config.py
文件本身。我们将向名为 的新文件添加一些配置更改,该文件config_local.py
将在主文件之后读取。
现在使用您首选的文本编辑器创建此文件。在这里,我们将使用nano
:
- nano my_env/lib/python3.6/site-packages/pgadmin4/config_local.py
在您的编辑器中,添加以下内容:
LOG_FILE = '/var/log/pgadmin4/pgadmin4.log'
SQLITE_PATH = '/var/lib/pgadmin4/pgadmin4.db'
SESSION_DB_PATH = '/var/lib/pgadmin4/sessions'
STORAGE_DIR = '/var/lib/pgadmin4/storage'
SERVER_MODE = True
以下是这五个指令的作用:
LOG_FILE
:这定义了将存储 pgAdmin 日志的文件。SQLITE_PATH
: pgAdmin 将用户相关数据存储在 SQLite 数据库中,该指令将 pgAdmin 软件指向此配置数据库。由于此文件位于持久目录下/var/lib/pgadmin4/
,因此升级后您的用户数据不会丢失。SESSION_DB_PATH
: 指定将用于存储会话数据的目录。STORAGE_DIR
:定义 pgAdmin 将存储其他数据的位置,例如备份和安全证书。SERVER_MODE
: 将此指令设置为True
告诉 pgAdmin 在服务器模式下运行,而不是桌面模式。
请注意,这些文件路径中的每一个都指向您在步骤 1 中创建的目录。
添加这些行后,保存并关闭文件。如果您使用的nano
,由按这样做CTRL + X
,然后Y
,然后ENTER
。
完成这些配置后,运行 pgAdmin 设置脚本来设置您的登录凭据:
- python my_env/lib/python3.6/site-packages/pgadmin4/setup.py
运行此命令后,您将看到一个提示,要求您输入电子邮件地址和密码。当您稍后访问 pgAdmin 时,这些将用作您的登录凭据,因此请务必记住或记下您在此处输入的内容:
Output. . .
Enter the email address and password to use for the initial pgAdmin user account:
Email address: [email protected]
Password:
Retype password:
在此之后,停用您的虚拟环境:
- deactivate
调用您在config_local.py
文件中指定的文件路径。这些文件保存在您在步骤 1 中创建的目录中,这些目录当前归您的非 root 用户所有。但是,它们必须可由运行您的 Web 服务器的用户和组访问。默认情况下,在 Ubuntu 18.04 上,这些是www-data用户和组,因此更新以下目录的权限以授予www-data对它们的所有权:
- sudo chown -R www-data:www-data /var/lib/pgadmin4/
- sudo chown -R www-data:www-data /var/log/pgadmin4/
这样,pgAdmin 就完全配置好了。但是,您的服务器尚未提供该程序,因此它仍然无法访问。为了解决这个问题,我们将配置 Apache 为 pgAdmin 提供服务,以便您可以通过 Web 浏览器访问其用户界面。
第 3 步 – 配置 Apache
Apache Web 服务器使用虚拟主机来封装配置详细信息,并从一台服务器托管多个域。如果您遵循先决条件 Apache 教程,您可能已经在 name 下设置了一个示例虚拟主机文件your_domain.conf
,但在此步骤中,我们将创建一个新的,我们可以从中为 pgAdmin Web 界面提供服务。
首先,请确保您位于根目录中:
- cd /
然后在您的/sites-available/
目录中创建一个名为pgadmin4.conf
. 这将是您服务器的虚拟主机文件:
- sudo nano /etc/apache2/sites-available/pgadmin4.conf
将以下内容添加到此文件中,确保更新突出显示的部分以与您自己的配置保持一致:
<VirtualHost *>
ServerName your_server_ip
WSGIDaemonProcess pgadmin processes=1 threads=25 python-home=/home/sammy/environments/my_env
WSGIScriptAlias / /home/sammy/environments/my_env/lib/python3.6/site-packages/pgadmin4/pgAdmin4.wsgi
<Directory "/home/sammy/environments/my_env/lib/python3.6/site-packages/pgadmin4/">
WSGIProcessGroup pgadmin
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Directory>
</VirtualHost>
保存并关闭虚拟主机文件。接下来,使用a2dissite
脚本禁用默认虚拟主机文件,000-default.conf
:
- sudo a2dissite 000-default.conf
注意:如果您遵循先决条件 Apache 教程,您可能已经禁用000-default.conf
并设置了示例虚拟主机配置文件(your_domain.conf
在先决条件中命名)。如果是这种情况,您需要your_domain.conf
使用以下命令禁用虚拟主机文件:
- sudo a2dissite your_domain.conf
然后使用a2ensite
脚本启用您的pgadmin4.conf
虚拟主机文件。这将创建从/sites-available/
目录中的虚拟主机文件到目录的符号链接/sites-enabled/
:
- sudo a2ensite pgadmin4.conf
在此之后,测试您的配置文件的语法是否正确:
- apachectl configtest
如果您的配置文件一切正常,您将看到Syntax OK
. 如果您在输出中看到错误,请重新打开pgadmin4.conf
文件并仔细检查您的 IP 地址和文件路径是否全部正确,然后重新运行configtest
.
Syntax OK
在输出中看到后,重新启动 Apache 服务,以便它读取您的新虚拟主机文件:
- sudo systemctl restart apache2
pgAdmin 现在已完全安装和配置。接下来,我们将介绍如何在将 pgAdmin 连接到 PostgreSQL 数据库之前从浏览器访问它。
第 4 步 – 访问 pgAdmin
在您的本地机器上,打开您首选的 Web 浏览器并导航到您服务器的 IP 地址:
http://your_server_ip
在那里,您将看到类似于以下内容的登录屏幕:
输入您在第 2 步中定义的登录凭据,您将被带到 pgAdmin 欢迎屏幕:
现在您已经确认您可以访问 pgAdmin 界面,剩下要做的就是将 pgAdmin 连接到您的 PostgreSQL 数据库。不过,在此之前,您需要对 PostgreSQL 超级用户的配置做一个小改动。
第 5 步 — 配置您的 PostgreSQL 用户
如果您遵循先决条件 PostgreSQL 教程,您应该已经在您的服务器上安装了 PostgreSQL,并设置了新的超级用户角色和数据库。
默认情况下,在 PostgreSQL 中,您使用“身份协议”或“身份”身份验证方法以数据库用户身份进行身份验证。这涉及 PostgreSQL 获取客户端的 Ubuntu 用户名并将其用作允许的数据库用户名。在许多情况下,这可以提供更高的安全性,但在您希望外部程序(例如 pgAdmin)连接到您的数据库之一的情况下,它也会导致问题。为了解决这个问题,我们将为这个 PostgreSQL 角色设置一个密码,这将允许 pgAdmin 连接到您的数据库。
在您的终端中,以您的超级用户角色打开 PostgreSQL 提示符:
- sudo -u sammy psql
在 PostgreSQL 提示符下,更新用户配置文件以使用您选择的强密码:
- ALTER USER sammy PASSWORD 'password';
然后退出 PostgreSQL 提示符:
- \q
接下来,返回浏览器中的 pgAdmin 4 界面,找到左侧的浏览器菜单。右键单击Servers以打开上下文菜单,将鼠标悬停在Create 上,然后单击Server…。
这将导致您的浏览器中弹出一个窗口,您将在其中输入有关您的服务器、角色和数据库的信息。
在“常规”选项卡中,输入此服务器的名称。这可以是您想要的任何内容,但您可能会发现使其具有描述性很有帮助。在我们的示例中,服务器名为Sammy-server-1
。
接下来,单击连接选项卡。在主机名/地址字段中,输入localhost
。该端口应设置为5432
默认情况下,将这种设置的工作,因为这是PostgreSQL所使用的默认端口。
在维护数据库字段中,输入要连接的数据库的名称。请注意,此数据库必须已在您的服务器上创建。然后,分别在用户名和密码字段中输入您之前配置的 PostgreSQL 用户名和密码。
其他选项卡中的空白字段是可选的,只有当您考虑到需要它们的特定设置时才需要填写它们。单击“保存”按钮,数据库将出现在“浏览器”菜单中的“服务器”下。
您已成功将 pgAdmin4 连接到您的 PostgreSQL 数据库。您可以从 pgAdmin 仪表板中执行任何操作,就像在 PostgreSQL 提示符下一样。为了说明这一点,我们将创建一个示例表并通过 Web 界面用一些示例数据填充它。
步骤 6 — 在 pgAdmin 仪表板中创建表
在 pgAdmin 仪表板中,找到窗口左侧的浏览器菜单。单击服务器 (1)旁边的加号 ( + )以展开其中的树形菜单。接下来,单击您在上一步中添加的服务器左侧的加号(在我们的示例中为Sammy-server-1),然后展开Databases,您添加的数据库的名称(在我们的示例中为sammy),然后模式 (1)。您应该会看到如下所示的树形菜单:
右键单击Tables列表项,然后将光标悬停在Create 上并单击Table…。
这将打开一个创建表窗口。在此窗口的常规选项卡下,输入表的名称。这可以是您想要的任何内容,但为了简单起见,我们将其称为table-01。
然后导航到“列”选项卡并单击窗口右上角的+号以添加一些列。添加列时,您需要为其指定Name和Data type,如果您选择的数据类型需要,您可能需要选择Length。
此外,官方 PostgreSQL 文档指出向表添加主键通常是最佳实践。甲主键是一个约束,其指示可以用作用于在表中的行的特殊标识符列的特定列或组。这不是必需的,但如果您想将一个或多个列设置为主键,请将最右侧的开关从No切换到Yes。
单击“保存”按钮以创建表。
至此,您已经创建了一个表并向其中添加了几列。但是,这些列尚不包含任何数据。要将数据添加到新表,请在浏览器菜单中右键单击表的名称,将光标悬停在Scripts 上,然后单击INSERT Script。
这将在仪表板上打开一个新面板。在顶部,您将看到一个部分完成的INSERT
语句,带有适当的表和列名称。继续并用一些虚拟数据替换问号 ( ? ),确保您添加的数据与您为每列选择的数据类型一致。请注意,您还可以通过在一组新括号中添加每一行来添加多行数据,每组括号用逗号分隔,如下例所示。
如果您愿意,可以随意INSERT
用以下示例INSERT
语句替换部分完成的脚本:
INSERT INTO public."table-01"(
col1, col2, col3)
VALUES ('Juneau', 14, 337), ('Bismark', 90, 2334), ('Lansing', 51, 556);
单击横向三角形图标 ( ▶ ) 以执行INSERT
语句。请注意,在旧版本的 pgAdmin 中,执行图标改为闪电 ( ⚡ )。
要查看表格及其中的所有数据,请再次在浏览器菜单中右键单击表格名称,将光标悬停在View/Edit Data 上,然后选择All Rows。
这将打开另一个新面板,在下方面板的“数据输出”选项卡中,您可以查看该表中保存的所有数据。
这样,您就成功地创建了一个表,并通过 pgAdmin Web 界面用一些数据填充它。当然,这只是您可以用来通过 pgAdmin 创建表的一种方法。例如,可以使用 SQL 而不是此步骤中描述的基于 GUI 的方法来创建和填充表。
结论
在本指南中,您学习了如何从 Python 虚拟环境安装 pgAdmin 4、配置它、使用 Apache 将其提供给 Web,以及如何将其连接到 PostgreSQL 数据库。此外,本指南介绍了一种可用于创建和填充表的方法,但 pgAdmin 不仅可用于创建和编辑表。
有关如何充分利用 pgAdmin 的所有功能的更多信息,我们鼓励您查看该项目的文档。您还可以通过我们关于该主题的社区教程了解有关 PostgreSQL 的更多信息。