【Go Web 開發】數據庫安裝與配置

備註:【Go Web 開發】是一個從零開始創建關於電影管理的 Web 項目。

接下來的內容,我們將繼續我們的項目,安裝並配置一個 SQL 數據庫來持久存儲客戶端發送的 movie 數據。

這裏我們將使用 PostgreSQL 數據庫。它是開源的,非常可靠,並且具有一些獨特的新特性——包括支持數組和 JSON 數據類型、全文搜索和地理空間查詢。在項目開發過程中,我們將使用這些新的 PostgreSQL 特性。

接下來的內容你將學習:

配置 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 附帶的擴展列表可以在這裏 [https://www.postgresql.org/docs/current/contrib.html] 找到,還有一些其他擴展你可以單獨下載。

在這個項目中,我們將使用 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)

這篇文章 [https://www.enterprisedb.com/postgres-tutorials/how-tune-postgresql-memory] 地介紹了一些最重要的 PostgreSQL 配置,並指導哪些值可以作爲合理的配置。如果你對優化 PostgreSQL 感興趣,我建議你讀一讀這篇文章。

或者,您可以使用這個基於 web 的工具來根據你的系統硬件生成推薦配置。這個工具的特點是輸出 "ALTER SYSTEM" SQL 語句,你可以運行它來改變你的數據庫設置,而不是手動修改 postgresql.conf 文件。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/UiX6PEtPn-Akb72IWuFWug