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

