如何在 Ubuntu 22.04 上安裝並使用 PostgreSQL

介紹

關聯式資料庫管理系統是許多網站和應用程式的關鍵組件。它們提供了一種結構化的方法來存儲、組織和訪問信息。

PostgreSQL,或稱為Postgres,是一種提供了SQL查詢語言實現的關聯式資料庫管理系統。它符合標準,並具有許多高級功能,如可靠的事務和無讀鎖的並發性。

本指南演示了如何在Ubuntu 22.04伺服器上安裝Postgres。它還提供了一些一般數據庫管理的指示。

先決條件

要跟著本教程進行,您將需要一台已通過我們的Ubuntu 22.04的初始伺服器設置指南進行配置的伺服器。完成此先決教程後,您的伺服器應該具有一個具有sudo權限的非root用戶和一個基本防火牆。

步驟1 — 安裝 PostgreSQL

Ubuntu 的預設軟體庫包含了 PostgreSQL 套件,因此您可以使用 apt 套件管理系統來安裝這些套件。

如果您最近沒有這麼做,請更新您的伺服器本地套件索引:

  1. sudo apt update

然後,安裝 Postgres 套件以及一個 -contrib 套件,該套件添加了一些額外的工具和功能:

  1. sudo apt install postgresql postgresql-contrib

使用 systemctl start 命令確保伺服器正在運行:

  1. sudo systemctl start postgresql.service

現在軟體已安裝並運行,我們可以了解其工作方式以及與您可能使用過的其他關聯式資料庫管理系統有何不同。

步驟2 — 使用 PostgreSQL 角色和資料庫

預設情況下,Postgres 使用一個稱為 角色 的概念來處理身份驗證和授權。這在某些方面類似於常規的 Unix 風格帳戶,但是 Postgres 不區分使用者和群組,而是更喜歡更靈活的術語 “角色”。

安裝完畢後,Postgres 設置為使用對等認證,這意味著它將 Postgres 角色與匹配的 Unix/Linux 系統帳戶關聯起來。如果在 Postgres 中存在一個角色,具有相同名稱的 Unix/Linux 用戶名就能以該角色身份登錄。

安裝過程創建了一個名為postgres的用戶帳戶,該帳戶與默認的 Postgres 角色關聯。要使用 Postgres,您可以登錄該帳戶。

有幾種方法可以使用此帳戶訪問 Postgres。

切換到 postgres 帳戶

在您的伺服器上切換到postgres帳戶,輸入:

  1. sudo -i -u postgres

現在您可以立即輸入以下命令訪問 PostgreSQL 提示:

  1. psql

從那裡,您可以按需與資料庫管理系統互動。

通過輸入以下命令退出 PostgreSQL 提示:

  1. \q

這將帶您回到postgres Linux 用戶的命令提示符。

在不切換帳戶的情況下訪問 Postgres 提示

您也可以直接使用sudo帳戶運行所需的命令。

例如,在上一個示例中,您被指示首先切換到postgres用戶,然後運行psql來打開Postgres提示符。您可以通過使用sudopostgres用戶的身份運行單個命令psql來一次完成此操作,就像這樣:

  1. sudo -u postgres psql

這將直接將您登錄到Postgres,而不需要中間的bash shell。

同樣,您可以通過鍵入退出交互式Postgres會話:

  1. \q

許多用例需要不止一個Postgres角色。繼續閱讀以了解如何配置這些角色。

步驟3 —— 創建新角色

目前,您已在數據庫中配置了postgres角色。您可以使用createuser命令從命令行創建新角色。--interactive標誌將提示您輸入新角色的名稱,並問您是否應該具有超級用戶權限。

如果您以postgres帳戶登錄,則可以輸入以下命令創建新用戶:

  1. createuser --interactive

如果您更喜歡每個命令都使用sudo而無需從您的常規帳戶切換,則輸入:

  1. sudo -u postgres createuser --interactive

該腳本將提示您進行一些選擇,並根據您的回答執行正確的Postgres命令以創建符合您要求的用戶。

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

通過傳遞一些額外的標誌,您可以獲得更多控制。通過查看createuser命令的man頁面來查看選項:

  1. man createuser

您的Postgres安裝現在有一個新用戶,但您尚未添加任何數據庫。下一節描述了這個過程。

步驟4 —— 創建新數據庫

Postgres身份驗證系統默認假設的另一個假設是,對於任何用於登錄的角色,該角色將具有與其同名的數據庫,可以訪問該數據庫。

這意味著,如果您在上一節中創建的用戶名為sammy,則該角色將默認嘗試連接到一個名為“sammy”的數據庫。您可以使用createdb命令創建相應的數據庫。

如果您以postgres帳戶登錄,您將輸入類似以下的命令:

  1. createdb sammy

如果您希望在不切換到您的常規帳戶的情況下為每個命令使用sudo,則您將輸入:

  1. sudo -u postgres createdb sammy

這種靈活性提供了根據需要創建數據庫的多種途徑。

步驟 5 — 使用新角色開啟 Postgres 提示

要使用同等名稱的 Linux 使用者以對等驗證方式登入,您需要一個與您的 Postgres 角色和資料庫相同名稱的 Linux 使用者。

如果您沒有相符的 Linux 使用者可用,您可以使用 adduser 指令創建一個。您將需要從您的非 root 帳戶以 sudo 權限執行此操作(也就是說,不以 postgres 使用者身份登入):

  1. sudo adduser sammy

一旦這個新帳戶可用,您可以通過輸入以下命令切換並連接到資料庫:

  1. sudo -i -u sammy
  2. psql

或者,您可以直接內嵌這樣做:

  1. sudo -u sammy psql

該命令將自動登入您,假設所有組件都已正確配置。

如果您想讓您的使用者連接到不同的資料庫,您可以透過像這樣指定資料庫:

  1. psql -d postgres

登入後,您可以通過輸入以下命令檢查您當前的連接資訊:

  1. \conninfo
Output
You are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".

如果您正在連接到非預設資料庫或使用非預設使用者,這很有用。

步驟 6 — 創建和刪除資料表

現在你知道如何連接到 PostgreSQL 數據庫系統了,你可以學習一些基本的 Postgres 管理任務。

創建表格的基本語法如下:

CREATE TABLE table_name (
    column_name1 col_type (field_length) column_constraints,
    column_name2 col_type (field_length),
    column_name3 col_type (field_length)
);

此命令為表格命名,然後定義列以及列類型和字段數據的最大長度。可選地,您可以為每個列添加約束。

你可以通過查看我們的指南了解更多有關創建表格的信息:如何在SQL中創建和管理表格

為演示目的,創建以下表格:

  1. CREATE TABLE playground (
  2. equip_id serial PRIMARY KEY,
  3. type varchar (50) NOT NULL,
  4. color varchar (25) NOT NULL,
  5. location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
  6. install_date date
  7. );

此命令將創建一個監視操場設備的表格。表格中的第一列將保存自動增量整數的設備 ID 號,該類型為 serial。此列還具有 PRIMARY KEY 約束,這意味著其中的值必須是唯一的且不為 null。

接下來的兩行分別創建了設備類型和顏色的列,這兩個列都不能為 null。這之後的行創建了一個帶有約束的 location 列,該約束要求值是八個可能值之一。最後一行創建了一個記錄安裝設備日期的 date 列。

對於兩個列(equip_idinstall_date),命令未指定字段長度。這樣做的原因是一些數據類型不需要設置長度,因為長度或格式是隱含的。

輸入以下命令檢查你的新表格:

  1. \d
Output
List of relations Schema | Name | Type | Owner --------+-------------------------+----------+------- public | playground | table | sammy public | playground_equip_id_seq | sequence | sammy (2 rows)

您的游乐场桌子已经到位,但还有一个名为playground_equip_id_seq的东西,其类型为sequence。这是您给equip_id列分配的serial类型的表示。它跟踪序列中的下一个数字,并且会自动生成为此类型的列。

如果您只想查看表而不包括序列,可以键入:

  1. \dt
Output
List of relations Schema | Name | Type | Owner --------+------------+-------+------- public | playground | table | sammy (1 row)

有了准备好的表,让我们用它来练习管理数据。

步骤7 — 在表中添加、查询和删除数据

现在您有了一张表,可以向其中插入一些数据。举个例子,通过调用您要添加到的表,命名列,然后为每列提供数据,来添加一个滑梯和一个秋千,就像这样:

  1. INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
  2. INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');

在输入数据时要小心,避免一些常见的错误。首先,不要用引号包裹列名,但您输入的列值确实需要引号。

另一件需要记住的事情是,不要为equip_id列输入值。这是因为每当您向表中添加新行时,它会自动生成。

通过键入检索您添加的信息:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 1 | slide | blue | south | 2017-04-28 2 | swing | yellow | northwest | 2018-08-16 (2 rows)

请注意,您的equip_id已成功填充,并且所有其他数据已被正确组织。

如果操場上的溜滑梯壞了,你需要移除它,你也可以通過輸入以下內容從你的表格中刪除該行:

  1. DELETE FROM playground WHERE type = 'slide';

再次查詢表格:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 2 | swing | yellow | northwest | 2018-08-16 (1 row)

請注意,slide 行不再是表格的一部分。

步驟 8 — 從表格中添加和刪除列

創建表格後,你可以通過添加或刪除列來修改它。輸入以下內容來添加一列,以顯示每台設備的上次維護訪問:

  1. ALTER TABLE playground ADD last_maint date;

再次查看你的表格信息。已添加了新列,但尚未輸入任何數據:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date | last_maint ----------+-------+--------+-----------+--------------+------------ 2 | swing | yellow | northwest | 2018-08-16 | (1 row)

如果你發現你的工作人員使用單獨的工具來記錄維護歷史,你可以通過輸入以下內容來刪除該列:

  1. ALTER TABLE playground DROP last_maint;

這將刪除 last_maint 列及其中找到的任何值,但保留所有其他數據。

步驟 9 — 更新表格中的數據

到目前為止,你已經學會了如何向表格中添加記錄以及如何刪除它們,但這個教程還沒有涵蓋如何修改現有條目。

您可以通過查詢要更新的記錄並將列設置為您希望使用的值來更新現有記錄的值。您可以查詢 swing 記錄(這將匹配您表中的每個 swing)並將其顏色更改為 red。如果您對秋千組進行了油漆作業,這可能很有用:

  1. UPDATE playground SET color = 'red' WHERE type = 'swing';

您可以再次查詢數據來驗證操作是否成功:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+-------+-----------+-------------- 2 | swing | red | northwest | 2018-08-16 (1 row)

滑梯現在被註冊為紅色。

結論

您現在已在您的 Ubuntu 22.04 服務器上設置了 PostgreSQL。如果您想了解更多關於 Postgres 以及如何使用它的信息,我們鼓勵您查閱以下指南:

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-22-04