在 Ubuntu 20.04 上安装和使用 PostgreSQL

介紹

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

PostgreSQL,或稱Postgres,是一個關聯式資料庫管理系統,提供了SQL查詢語言的實現。它符合標準,並具有許多高級功能,如可靠的交易和並發性而不需要讀取鎖定。

本指南演示了如何在Ubuntu 20.04伺服器上安裝Postgres。它還提供了一些常規資料庫管理的指示。

使用DigitalOcean Managed Databases一鍵部署PostgreSQL資料庫。讓DigitalOcean專注於為您的資料庫進行擴展、維護和升級。

先決條件

要按照本教程操作,您需要一台已配置好的 Ubuntu 20.04 服务器,配置步骤请参考我们的Ubuntu 20.04 初始服务器设置指南。完成此先决条件教程后,您的服务器应具有一个具有 sudo 权限的非root用户和一个基本防火墙。

步骤 1 — 安装 PostgreSQL

Ubuntu 的默认软件源包含了 Postgres 软件包,因此您可以使用 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帳戶運行所需的命令。

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

  1. sudo -u postgres psql

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

同樣,您可以通過輸入以下命令退出交互式Postgres會話:

  1. \q

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

第3步 —— 創建新角色

目前,數據庫中僅配置了postgres角色。您可以使用createrole命令從命令行創建新角色。--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

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

  1. man createuser

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

步驟 4 — 創建新數據庫

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

這表示如果上一節中您創建的用戶被稱為sammy,該角色將嘗試連接到默認情況下也被稱為“sammy”的數據庫。您可以使用createdb命令創建適當的數據庫。

如果您已經以postgres帳戶登錄,您應該輸入類似於以下的內容:

  1. createdb sammy

如果您更喜歡對每個命令使用sudo,而不切換到您的正常帳戶,您可以輸入:

  1. sudo -u postgres createdb sammy

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

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

要使用對等身份驗證登錄,您需要一個與您的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)
);

正如您所见,这些命令为表格命名,然后定义列以及列类型和字段数据的最大长度。您还可以为每列选择性地添加表约束。

您可以在此处了解有关如何创建和管理Postgres中的表格的更多信息。

为演示目的,创建以下表格:

  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. );

此命令将创建一个库存操场设备的表格。表格中的第一列将保存serial类型的设备ID编号,这是一个自动递增的整数。此列还具有PRIMARY KEY的约束,这意味着其中的值必须是唯一且非空的。

下面的兩行分別創建了裝備類型顏色的欄位,兩者都不能為空。在這些之後的一行創建了一個位置欄位,並添加了一個約束,要求其值必須是八個可能的值之一。最後一行創建了一個日期欄位,記錄了安裝裝備的日期。

對於兩個欄位(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表在這裡,但還有一個名為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)

注意,幻燈片行不再是表的一部分。

第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記錄(這將匹配您表中的每個 擺動),並將其顏色更改為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 20.04伺服器上設置了PostgreSQL。如果您想了解更多關於Postgres及如何使用它的信息,我們鼓勵您參閱以下指南:

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