【Go Web开发】数据库安装与配置

备注:【Go Web开发】是一个从零开始创建关于电影管理的Web项目。

接下来的内容,我们将继续我们的项目,构建并设置一个SQL数据库来持久存储客户端发送的movie数据。

这里我们将使用PostgreSQL数据库。它是开源的,非常可靠,并且具有一些独特的新特性——包括支持数组和JSON数据类型、全文搜索和地理空间查询。在项目开发过程中,我们将使用这些新的PostgreSQL特性。

接下来的内容你将学习:

  • 如何在自己机器上安装和设置PostgreSQL。
  • 如何使用psql交互式工具创建数据库,PostgreSQL扩展和用户帐户。
  • 如何在Go中初始化数据库连接池并修改配置以提高性能和稳定性。

配置PostgreSQL数据库

安装PostgreSQL数据库

如果您跟随本系列文章步骤操作,那么此时您需要在计算机上安装PostgreSQL。官方的PostgreSQL文档包含了所有类型操作系统的下载和安装说明,但如果你使用的是macOS,你应该能够使用brew安装:

$ brew install postgresql

如果您使用的是Linux发行版,您应该能够通过包管理器来安装它。例如,如果你的操作系统支持apt包管理器(像Debian和Ubuntu一样),你可以这样安装:

$ sudo apt install postgresql

在Windows机器上,你可以使用Chocolatey包管理器安装PostgreSQL:

> choco install postgresql

命令行连接PostgreSQL

当PostgreSQL被安装的时候,你的计算机上应该已经创建了一个psql二进制文件。它包含一个基于终端的命令行工具,用于与PostgreSQL数据库交互。

你可以通过在你的终端上运行psql --version命令来检查它是否可用,如下所示:

$ psql --version
psql (PostgreSQL) 13.4

如果您还不熟悉PostgreSQL,那么第一次使用psql连接到它的过程可能有点不直观。让我们花点时间来解释一下。

当PostgreSQL刚安装时,它只有一个用户:一个叫做postgres的超级用户。在第一次使用时,我们需要以该超级用户身份连接到PostgreSQL来做任何操作-此时我们可以执行任何需要的设置,如创建数据库和创建其他用户。

在安装期间,已经在您的机器上创建一个名为postgres的操作系统用户。在基于unix的系统上,你可以检查/etc/passwd文件来确认这一点,像这样:

$ cat /etc/passwd|grep 'postgres'
_postgres:*:216:216:PostgreSQL Server:/var/empty:/usr/bin/false

这很重要,因为默认情况下,PostgreSQL使用对等认证(peer authentication)的身份验证方案,对来自本地机器的任何连接进行验证。对等认证是指如果当前操作系统用户的用户名与一个有效的PostgreSQL用户名匹配,可以作为该用户登录PostgreSQL,而无需进一步认证。不涉及密码。

因此,如果我们切换到名为postgres的操作系统用户,我们应该能够使用psql连接到PostgreSQL,而不需要任何进一步的身份验证。事实上,你可以用下面的命令一步完成这两件事:

$ sudo -u postgres psql
psql (13.4)
Type "help" for help.

postgres=# 

因此,为了确认一下,我们在这里使用sudo命令(superuser do)以操作系统用户postgres的身份运行psql命令。这将在在终端打开一个会话,以PostgreSQL超级用户(称为postgres)进行身份验证。

你可以通过运行“SELECT current_user”来确认你当前是哪个PostgreSQL用户:

postgres=# SELECT current_user;
current_user 
--------------
postgres 
(1 row)

创建数据库,用户和扩展

当我们以postgres超级用户的身份连接时,可以为我们的项目创建一个名为greenlight的新数据库,然后使用\c命令连接到数据库,如下所示:

postgres=# create database greenlight;
CREATE DATABASE
postgres=# \c greenlight
You are now connected to database "greenlight" as user "postgres".

在PostgreSQL中,\字符表示元命令。其他一些有用的元命令有\l用于列出所有数据库,\dt用于列出表,以及\du用于列出用户。你还可以运行?查看可用元命令的完整列表。

现在我们的greenlight数据库已经存在并连接到它,有两个任务需要完成。

第一个任务是创建一个没有超级用户权限的新用户greenlight,我们可以使用该用户执行SQL迁移并从Go应用程序连接到数据库。我们希望将这个新用户设置为使用基于密码的身份验证,而不是对等身份验证。

PostgreSQL也有扩展的概念,它在标准功能的基础上增加额外的功能。PostgreSQL附带的扩展列表可以在这里找到,还有一些其他扩展你可以单独下载。

在这个项目中,我们将使用citext扩展。该扩展给PostgreSQL添加了区分大小写的字符串类型,我们将在本书后面使用它来存储用户邮件地址。需要注意的是,扩展只能由超级用户添加到特定的数据库中。

继续,并运行以下命令来创建一个新的greenlight用户与特定的密码,并添加citext扩展到我们的数据库:

greenlight=# CREATE ROLE greenlight WITH LOGIN PASSWORD 'pa55word';
CREATE ROLE
greenlight=# CREATE EXTENSION IF NOT EXISTS citext;
CREATE EXTENSION

重要提示:如果您按照此方法进行操作,请务必记住您为greenlight用户设置的密码。在接下来的步骤中您需要使用。

一旦成功完成以上操作,您可以键入exit或\q来关闭终端与数据库连接,并恢复为您的正常操作系统用户。

 greenlight=# exit

以新用户连接数据库

在进行进一步操作之前,让我们证明之前的操作都设置正确,并尝试以greenlight用户连接到greenlight数据库。出现提示时,输入在上面步骤中设置的密码。

$ psql --host=localhost --dbname=greenlight --username=greenlight
Password for user greenlight:
psql (13.4)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off) Type "help" for help.
greenlight=> SELECT current_user;
current_user --------------
greenlight (1 row)
greenlight=> exit

很好!这确认了我们的数据库和带有密码验证的新用户greenlight可以正常使用,并且我们能够以该用户执行SQL语句。

附加内容

优化PostgreSQL设置

PostgreSQL的默认设置是相当保守的,通常可以通过调整PostgreSQL.conf文件中的值来提高数据库的性能。

你可以通过下面的SQL查询来检查postgresql.conf文件的位置:

$ sudo -u postgres psql -c 'SHOW config_file;'
                config_file   
--------------------------------------------
 /opt/homebrew/var/postgres/postgresql.conf
(1 row)

这篇文章地介绍了一些最重要的PostgreSQL配置,并指导哪些值可以作为合理的配置。如果你对优化PostgreSQL感兴趣,我建议你读一读这篇文章。

或者,您可以使用这个基于web的工具来根据你的系统硬件生成推荐配置。这个工具的特点是输出"ALTER SYSTEM" SQL语句,你可以运行它来改变你的数据库设置,而不是手动修改postgresql.conf文件。

你可能感兴趣的:(【Go Web开发】数据库安装与配置)