詳解如何在Ubuntu?18.04上安裝和使用PostgreSQL
簡介
關系數(shù)據(jù)庫管理系統(tǒng)是許多網站和應用程序的關鍵組件。它們提供了一種結構化的方式來存儲、組織和訪問信息。
PostgreSQL,或者簡稱為 Postgres,是一個關系數(shù)據(jù)庫管理系統(tǒng),提供了 SQL 查詢語言的實現(xiàn)。它是許多小型和大型項目的熱門選擇,并且具有符合標準的優(yōu)勢,以及可靠的事務和并發(fā)性而無需讀取鎖定等許多高級功能。
本指南演示了如何在 Ubuntu 18.04 VPS 實例上安裝 Postgres,并提供了基本數(shù)據(jù)庫管理的說明。
先決條件
要按照本教程進行操作,您需要一個已經按照我們的《Ubuntu 18.04 初始服務器設置指南》進行配置的 Ubuntu 18.04 服務器。完成先決條件教程后,您的服務器應該具有一個具有 sudo 權限的非 root 用戶和一個基本防火墻。
步驟 1 — 安裝 PostgreSQL
Ubuntu 的默認軟件倉庫中包含了 Postgres 軟件包,因此您可以使用 apt 軟件包管理系統(tǒng)來安裝這些軟件包。
由于這是您在本次會話中第一次使用 apt,請先刷新本地軟件包索引。然后,安裝 Postgres 軟件包以及一個 -contrib 軟件包,該軟件包添加了一些額外的實用工具和功能:
sudo apt update sudo apt install postgresql postgresql-contrib
使用 systemctl start 命令確保服務器正在運行:
sudo systemctl start postgresql.service
現(xiàn)在軟件已安裝并運行,我們可以了解它的工作原理以及它與您可能使用過的類似數(shù)據(jù)庫管理系統(tǒng)有何不同。
步驟 2 — 使用 PostgreSQL 角色和數(shù)據(jù)庫
默認情況下,Postgres 使用一種稱為 角色 的概念來處理身份驗證和授權。在某些方面,這與常規(guī)的 Unix 風格帳戶類似,但 Postgres 不區(qū)分用戶和組,而是更傾向于更靈活的術語 “角色”。
在安裝時,Postgres 被設置為使用 ident 身份驗證,這意味著它將 Postgres 角色與匹配的 Unix/Linux 系統(tǒng)帳戶關聯(lián)起來。如果一個角色存在于 Postgres 中,具有相同名稱的 Unix/Linux 用戶名就能夠以該角色登錄。
安裝過程創(chuàng)建了一個名為 postgres 的用戶帳戶,該帳戶與默認的 Postgres 角色關聯(lián)。要使用 Postgres,您可以登錄到該帳戶。
有幾種方法可以使用該帳戶訪問 Postgres。
切換到 postgres 帳戶
通過輸入以下命令,在服務器上切換到 postgres 帳戶:
sudo -i -u postgres
現(xiàn)在,您可以立即通過輸入以下命令訪問 Postgres 提示符:
psql
這將使您登錄到 PostgreSQL 提示符,從這里您可以立即與數(shù)據(jù)庫管理系統(tǒng)交互。
通過輸入以下命令退出 PostgreSQL 提示符:
\q
這將帶您回到 postgres Linux 命令提示符。
在不切換帳戶的情況下訪問 Postgres 提示符
在上一個示例中,您被指示首先切換到 postgres 用戶,然后運行 psql 打開 Postgres 提示符。您也可以通過以下單個命令在 postgres 用戶下使用 sudo 來完成這一步:
sudo -u postgres psql
這將直接將您登錄到 Postgres,而不需要中間的 bash shell。
同樣,您可以通過輸入以下命令退出交互式 Postgres 會話:
\q
許多用例需要多個 Postgres 角色。接下來了解如何配置這些角色。
步驟 3 — 創(chuàng)建新角色
目前,您只配置了數(shù)據(jù)庫中的 postgres 角色。您可以使用 createrole 命令從命令行創(chuàng)建新角色。--interactive 標志將提示您輸入新角色的名稱,并詢問是否應該具有超級用戶權限。
如果您已登錄為 postgres 帳戶,可以通過輸入以下命令創(chuàng)建新用戶:
createuser --interactive
如果您更喜歡在不切換到正常帳戶的情況下為每個命令使用 sudo,則輸入以下命令:
sudo -u postgres createuser --interactive
該腳本將提示您進行一些選擇,并根據(jù)您的響應執(zhí)行正確的 Postgres 命令以創(chuàng)建符合您規(guī)格的用戶。
首先,提示將要求您指定新角色的名稱。以下示例將角色命名為 sammy,但您可以根據(jù)需要命名:
Enter name of role to add: sammy
接下來,將詢問新角色是否應該是超級用戶。在 PostgreSQL 中,超級用戶角色擁有極其廣泛的特權,并且可以繞過幾乎所有權限檢查。
以下示例指定 sammy 角色應該是超級用戶,但是由于超級用戶角色在數(shù)據(jù)庫上具有極大的權限和控制,您不應該輕易授予新角色超級用戶狀態(tài):
Enter name of role to add: sammy Shall the new role be a superuser? (y/n) y
請注意,只有在以已經是超級用戶的角色創(chuàng)建它們時,才能創(chuàng)建新的超級用戶角色。默認情況下,postgres 角色是超級用戶。
您可以通過傳遞一些額外的標志來獲得更多控制。通過查看 man 頁面來查看選項:
man createuser
您的 Postgres 安裝現(xiàn)在有了一個新角色,但您尚未添加任何數(shù)據(jù)庫。下一節(jié)將描述此過程。
步驟 4 —— 創(chuàng)建新數(shù)據(jù)庫
Postgres 認證系統(tǒng)默認假設任何用于登錄的角色都將擁有同名的數(shù)據(jù)庫,并且可以訪問該數(shù)據(jù)庫。
這意味著,如果你在上一節(jié)創(chuàng)建的用戶叫做 sammy,那么該角色將默認嘗試連接到一個也叫“sammy”的數(shù)據(jù)庫。你可以使用 createdb 命令創(chuàng)建相應的數(shù)據(jù)庫。
如果你以 postgres 賬戶登錄,你可以輸入如下命令:
createdb sammy
如果你更喜歡在不切換到 postgres 用戶的情況下為每個命令使用 sudo,你可以輸入:
sudo -u postgres createdb sammy
這種靈活性提供了多種創(chuàng)建數(shù)據(jù)庫的途徑。
步驟 5 —— 使用新角色打開 Postgres 提示符
要使用基于 ident 的認證登錄,你需要一個與你的 Postgres 角色和數(shù)據(jù)庫同名的 Linux 用戶。
如果你沒有匹配的 Linux 用戶可用,你可以使用 adduser 命令創(chuàng)建一個。你需要在擁有 sudo 權限的非 root 賬戶下執(zhí)行此操作(也就是說,不要以 postgres 用戶登錄):
sudo adduser sammy
一旦新賬戶可用,你可以切換并連接到數(shù)據(jù)庫,輸入:
sudo -i -u sammy psql
或者,你可以內聯(lián)執(zhí)行:
sudo -u sammy psql
這個命令將自動登錄你,假設所有組件都已正確配置。
如果你想讓你的用戶連接到不同的數(shù)據(jù)庫,你可以這樣指定數(shù)據(jù)庫:
psql -d postgres
登錄后,你可以通過輸入以下命令檢查當前連接信息:
\conninfo
You are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".
如果你連接到非默認數(shù)據(jù)庫或使用非默認用戶,這將非常有用。
步驟 6 —— 創(chuàng)建和刪除表
現(xiàn)在你知道如何連接到 PostgreSQL 數(shù)據(jù)庫系統(tǒng),可以學習一些基本的 Postgres 管理任務。
首先,創(chuàng)建一個表來存儲一些數(shù)據(jù)。舉個例子,創(chuàng)建一個描述一些游樂場設備的表。
這個命令的基本語法如下:
CREATE TABLE table_name (
column_name1 col_type (field_length) column_constraints,
column_name2 col_type (field_length),
column_name3 col_type (field_length)
);
這些命令為表命名,然后定義列以及列類型和字段數(shù)據(jù)的最大長度。你還可以為每個列可選地添加表約束。
你可以在這里了解更多關于如何在 Postgres 中創(chuàng)建和管理表的信息。
為了演示目的,創(chuàng)建一個樣本表如下:
CREATE TABLE playground (
equip_id serial PRIMARY KEY,
type varchar (50) NOT NULL,
color varchar (25) NOT NULL,
location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
install_date date
);
這些命令將創(chuàng)建一個用于存儲游樂場設備清單的表。首先是一個設備 ID,它是 serial 類型。這種數(shù)據(jù)類型是自增整數(shù)。你還給這個列添加了 primary key 約束,這意味著值必須是唯一的且不為空。
對于兩個列(equip_id 和 install_date),命令沒有指定字段長度。這是因為某些列類型不需要設置長度,因為長度由類型隱含確定。
接下來的兩個命令分別為設備 type 和 color 創(chuàng)建了列,每個列都不能為空(由應用到每個列的 NOT NULL 約束指定)。在這些命令之后的行創(chuàng)建了一個 location 列,并添加了一個約束,要求該列的值必須是八個可能值中的一個。括號內的最后一行創(chuàng)建了一個 date 列,記錄你安裝設備的日期。
請注意,在 SQL 中,每個語句必須以分號(;)結尾。
如果你正確輸入了 CREATE TABLE 操作,它將返回以下輸出:
CREATE TABLE
你可以通過輸入以下命令找到此數(shù)據(jù)庫中的表列表:
\d
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 類型的表示。它跟蹤序列中的下一個數(shù)字,并且會自動為此類型的列創(chuàng)建。
如果你只想返回表而不返回序列,你可以輸入:
\dt
List of relations Schema | Name | Type | Owner --------+------------+-------+------- public | playground | table | sammy (1 row)
步驟 7 —— 向表中添加、查詢和刪除數(shù)據(jù)
現(xiàn)在你已經有了一個表,你可以向其中插入一些數(shù)據(jù)。
舉個例子,通過調用你想要添加數(shù)據(jù)的表,命名列,然后為每列提供數(shù)據(jù),來添加一個滑梯和一個秋千,就像這樣:
INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');
在輸入數(shù)據(jù)時要小心,避免一些常見的問題。首先,不要用引號括住列名,但是你輸入的列值需要加上引號。
另一件需要記住的事情是,不要為 equip_id 列輸入值。這是因為每當在表中創(chuàng)建新行時,它會自動生成。
通過輸入以下命令來檢索你添加的信息:
SELECT * FROM playground;
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 已經成功填充,而且所有其他數(shù)據(jù)都被正確地組織了起來。
如果游樂場上的滑梯壞了,你需要移除它,你也可以通過輸入以下命令從表中移除這一行:
DELETE FROM playground WHERE type = 'slide';
再次查詢表:
SELECT * FROM playground;
equip_id | type | color | location | install_date
----------+-------+--------+-----------+--------------
2 | swing | yellow | northwest | 2018-08-16
(1 row)
注意到你的滑梯不再是表中的一部分了。
步驟 8 —— 向表中添加和刪除列
在創(chuàng)建表之后,你可以相對容易地修改它來添加或刪除列。通過輸入以下命令來添加一個列,用于顯示每個設備的最后維護日期:
ALTER TABLE playground ADD last_maint date;
下次再次查看表信息時,新列將已經被添加(但是沒有數(shù)據(jù)被輸入):
SELECT * FROM playground;
equip_id | type | color | location | install_date | last_maint
----------+-------+--------+-----------+--------------+------------
2 | swing | yellow | northwest | 2018-08-16 |
(1 row)
要刪除一個列,你可以輸入一個與你用來添加 last_maint 列非常相似的 SQL 語句。如果你發(fā)現(xiàn)你的工作人員使用單獨的工具來跟蹤維護歷史,你可以通過輸入以下命令來刪除該列:
ALTER TABLE playground DROP last_maint;
這將刪除 last_maint 列以及其中找到的任何值,但會保留所有其他數(shù)據(jù)。
步驟 9 —— 更新表中的數(shù)據(jù)
到目前為止,你已經學會了如何向表中添加記錄以及如何刪除它們,但是本教程還沒有涵蓋如何修改現(xiàn)有條目。
你可以通過查詢你想要的記錄并將列設置為你希望使用的值來更新現(xiàn)有條目的值。你可以查詢 “swing” 記錄(這將匹配表中的 每個 秋千)并將其顏色更改為 “red”。如果你給秋千涂了一層油漆,這可能會很有用:
UPDATE playground SET color = 'red' WHERE type = 'swing';
你可以通過再次查詢數(shù)據(jù)來驗證操作是否成功:
SELECT * FROM playground;
equip_id | type | color | location | install_date
----------+-------+-------+-----------+--------------
2 | swing | red | northwest | 2010-08-16
(1 row)
正如這個輸出所示,你的秋千現(xiàn)在被注冊為紅色了。
結論
你現(xiàn)在已經在你的 Ubuntu 18.04 服務器上設置了 PostgreSQL。然而,還有 更多 關于 Postgres 的知識等待你去學習。
以上就是詳解如何在Ubuntu 18.04上安裝和使用PostgreSQL的詳細內容,更多關于Ubuntu 18.04安裝使用PostgreSQL的資料請關注腳本之家其它相關文章!
相關文章
解決sqoop從postgresql拉數(shù)據(jù),報錯TCP/IP連接的問題
這篇文章主要介紹了解決sqoop從postgresql拉數(shù)據(jù),報錯TCP/IP連接的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
pgsql之pg_stat_replication的使用詳解
這篇文章主要介紹了pgsql之pg_stat_replication的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
PostgreSQL三種自增列sequence,serial,identity的用法區(qū)別
這篇文章主要介紹了PostgreSQL三種自增列sequence,serial,identity的用法區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
PostgreSQL中insert_username的擴展使用
insert_username?是 PostgreSQL 的一個實用擴展,用于自動記錄數(shù)據(jù)行的創(chuàng)建者和最后修改者信息,本文就來詳細的介紹一下insert_username擴展,感興趣的可以了解一下2025-06-06
postgreSql分組統(tǒng)計數(shù)據(jù)的實現(xiàn)代碼
這篇文章給大家介紹postgreSql的監(jiān)控記錄表里多條不同時間的數(shù)據(jù),只取最新的數(shù)據(jù),并分組統(tǒng)計,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2020-12-12

