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