postgresql入门
多年来,PostgreSQL一直是企业软件和开放源代码中保存最好的秘密之一-功能强大,健壮且经过专家维护的关系数据库。 MySQL可能更广为人知,但PostgreSQL提供了MySQL刚开始提供的许多功能。
在本文中,我将逐步介绍设置和运行基本PostgreSQL安装的步骤。 大多数讨论将针对完全重新开始的人们,但我将介绍有关从以前的PostgreSQL安装或其他数据库解决方案迁移数据的详细信息。 最后,本文重点介绍PostgreSQL 10系列发行版,即撰写本文时PostgreSQL最新和最新版本。
PostgreSQL可用于所有主要操作系统的二进制形式:Windows的台式机和服务器版本,Linux,MacOS的所有流行版本以及Solaris等企业中使用的其他一些OS。
总的来说,PostgreSQL在所支持的各种平台上的功能都是相同的。 我们将在下面详细讨论该规则的一些例外情况,因此请记住这些例外情况如何影响任何部署或应用程序开发计划。
Linux发行版在软件安装和维护方面有很大不同:不同的软件包管理器,不同的软件包格式,不同的软件存储库理念。 PostgreSQL不能免除这些差异,这可能是在您的平台上获取软件的最新版本的障碍。
例如, Ubuntu在其APT存储库中维护PostgreSQL版本。 如果它不是最新版本,则需要将apt.postgresql.org存储库添加到您的回购列表中,然后从那里获取PostgreSQL。
对于Red Hat和Fedora Linux,每个版本库中都包含一个PostgreSQL版本。 与Red Hat Enterprise Linux相比,Fedora的更新频率更高(每年大约两次),并且采用新版本的应用程序的速度要快得多,但是无论哪种情况,通过存储库提供的PostgreSQL版本可能都不是您想要的版本。 例如,在Red Hat Enterprise Linux的默认存储库中,您找不到比9.2更高的PostgreSQL版本。
因此,为Red Hat或Fedora安装最新版本的PostgreSQL最可靠方法是直接通过交互式下载页面从PostgreSQL或从PostgreSQLyum
存储库下载安装工件。
可从Docker Hub获得 Linux上每个主要PostgreSQL版本的Docker容器映像。 请注意,您将需要为容器提供用于持久数据存储的位置。 默认位置是/var/lib/postgresql/data
。 您可以通过编辑PGDATA
环境变量来指向其他位置。
Linux上的另一个注意事项是要使用哪个文件系统来存储PostgreSQL数据。 过去的基准测试通常偏爱XFS或Ext4,尽管根据链接文章,它们必须配置特定的选项(例如, nobarrier
)才能获得最佳效果。 尽管PostgreSQL FAQ引用ZFS的委派管理和快照功能,但Ubuntu是当今唯一捆绑ZFS的主要Linux发行版。 在其他Linux发行版中,您将必须自行设置ZFS。
Mac用户经常依赖Homebrew ,它是MacOS的开源软件包管理器,已经成为从命令行在Mac上安装开源项目的实际方法。 Homebrew允许您使用一个命令( brew install postgresql
) 安装PostgreSQL及其所有依赖项。
在MacOS上安装PostgreSQL另一种方法是Postgres.app ,这是将PostgreSQL重新包装为常规Mac应用程序的第三方。 该网站提供了最新版本的PostgreSQL和所有主要的PostgreSQL GUI客户端的安装程序,甚至在需要时进行自我更新。 Postgres.app还为您执行一些自动预配置,例如初始化数据目录和用户数据库,并捆绑了许多常用工具,如pg_upgrade
。
那些希望在Windows上设置PostgreSQL用户可以选择由第三方打包的安装程序,从简单的.ZIP存档到交互式GUI驱动的安装程序,应有尽有。
在Windows上运行PostgreSQL时要牢记的一个重要警告是,在给定的时间内PostgreSQL可以保持打开状态的连接数限制约为125。 此限制仅在PostgreSQL作为服务运行时适用,而不是从命令行调用。
根据PostgreSQL Wiki ,这是因为“ PostgreSQL依赖的某些库依赖于user32.dll,后者从称为Desktop Heap的区域分配内存。” 由于堆的大小是固定的,并且每个连接都会消耗一定数量的内存,因此大约125个以上的连接可能会发生故障。
就是说,在大多数使用情况下这不太可能成为问题,因为很少有人需要与PostgreSQL同时建立许多直接连接。 设计良好的应用程序可以使用连接池来避免遇到连接限制。 无论如何,连接池都是您应该做的事情,以保持与数据库的连接数与服务器上可用的硬件线程数相称。
如果您使用上述的PostgreSQL图形安装程序之一,尤其是Windows,则将逐步完成运行PostgreSQL安装所需的步骤。 但是,在Linux中,大多数情况下,您需要自己采取这些步骤。
PostgreSQL 10包含在Fedora 28的默认存储库中,因此运行sudo dnf install postgresql-server postgresql-contrib
将直接安装这些位。 之后,您可能希望启用PostgreSQL在引导时启动:
sudo systemctl enable postgresql
您还需要手动运行PostgreSQL安装脚本来创建初始数据库:
sudo postgresql-setup --initdb --unit postgresql
设置postgres
系统密码,即PostgreSQL服务运行帐户的密码:
sudo passwd postgres
启动PostgreSQL服务器:
sudo systemctl start postgresql
然后设置postgres
内部用户帐户的密码,即用于直接连接到PostgreSQL帐户。 运行psql
命令行应用程序以连接到PostgreSQL,然后发出命令\password postgres
(注意前导反斜杠)。
Fedora Wiki中提供了许多有关在Fedora Linux上安装PostgreSQL附加说明,但是这些步骤对于基本设置而言已足够。
Ubuntu 18.04的默认存储库中包括PostgreSQL 10,因此设置过程与Fedora的相似,但更加简化:
sudo apt update
sudo apt install postgresql postgresql-contrib
sudo passwd postgres
sudo systemctl enable postgresql
sudo systemctl start postgresql
sudo -i -u postgres
psql
请注意,这里不需要postgresql-setup
步骤。 安装过程包含执行该步骤所需的触发器。
您将要采取的最后步骤之一是将数据从PostgreSQL任何旧实例迁移到新实例。 从版本10开始,PostgreSQL具有三种在数据库升级期间迁移数据的主要方式。
pg_upgrade
实用程序是在PostrgreSQL版本之间迁移数据的首选方法。 当您同时安装新版本的PostgreSQL和旧版本的PostgreSQL时,通常使用它。 您从新安装中运行pg_upgrade
,将其指向旧安装,然后将其移到数据上。 pg_upgrade
利用PostgreSQL数据格式的点修订之间的一致性来加快迁移过程,因此它不仅是最方便的迁移方式,而且通常是最快的方式。 pg_dumpall
实用程序将PostgreSQL服务器的全部内容导出到一个或多个SQL转储文件。 然后,生成的脚本或归档文件可以在新服务器上执行或导入到新服务器中。 还可以并排设置新旧服务器,并使用pg_dumpall
来“管道”它们之间的转储操作。 使用pg_dumpall
的最大缺点是它很慢,但是可以用作绝对的回退方法。 PostgreSQL第三方管理工具pgAdmin 4提供了用于管理PostgreSQL安装的有用的Web GUI。 不幸的是,由于该工具是用Python编写的,因此从某种意义上来说很难启动和运行,并且依赖于该语言。
MacOS和Windows用户可以从pgAdmin网站下载pgAdmin 4的二进制安装程序 。
对于Ubuntu, 有一个APT软件包 。 Ask Ubuntu论坛中还有一篇帖子,介绍了安装pgAdmin 4,使其运行并创建启动脚本的便捷快捷方式所需的步骤。
对于Fedora和Red Hat, 有一个RPM软件包 。 但是,在撰写本文时,RPM软件包有一个小错误,其中省略了主要的Python软件包。 下面的食谱复制了上一个链接的许多步骤,其中包括一个额外的步骤(第2行),该步骤可解决此问题:
$ sudo dnf install pgadmin4
$ sudo dnf install python3-flask-babelex
$ sudo /usr/pgadmin4/bin/pgadmin4-web-setup.sh
$ pgadmin4
最后一个命令启动pgAdmin 4后端,最后启动一个Web浏览器来查看它。
如果您是Docker用户,则可以通过将Docker容器与pgAdmin 4及其所有依赖项一起使用并使用来避免大部分麻烦。
翻译自: https://www.infoworld.com/article/3300799/postgresql-tutorial-get-started-with-postgresql-10.html
postgresql入门