PostgreSQL初試

文章目錄

  • 1 PostgreSQL 簡介
  • 2 PostgreSQL 與 MySQL 的區別
  • 3 PostgreSQL 的安裝
    • 1_Linux部署
    • 2_容器化部署
  • 4 PostgreSQL的配置
    • 1_遠程連接配置
    • 2_配置數據庫的日志
    • 3_設置數據庫密碼
  • 5 PostgreSQL 基本操作
    • 1_用戶操作
    • 2_權限操作
    • 3_創建一個自己的用戶
    • 4_差異補充
  • 6 安裝圖形化界面
    • 1_使用 pgAdmin(官方推薦)
    • 2_DBeaver(多數據庫通用)
    • 3_DataGrip(JetBrains 出品)
    • 4_Navicat for PostgreSQL(商業)
  • 7 總結
    • 1_安全卸載
    • 2_結語

1 PostgreSQL 簡介

PostgreSQL 是一個功能強大、開源的對象-關系型數據庫系統,以其可靠性、數據完整性、可擴展性而著稱,底層使用 C 語言實現。

它采用與 Linux 內核相同的開源協議 —— BSD 協議

這一協議非常寬松,與 MIT 協議類似,允許你在遵守基礎條款的前提下進行二次開發,甚至將其商業化并收費。

自 1986 年起由加州大學伯克利分校開始開發,PostgreSQL 目前在全球范圍擁有活躍的社區和商業支持。

PostgreSQL 最初的前身是名為 Ingres 的數據庫系統。

后來為了改進 Ingres 的架構并解決其存在的問題,開發者將新系統命名為 Postgres,意指 “Ingres 的后繼者(Post-Ingres)”。

隨后,為了強調其對 SQL 的支持,最終定名為 PostgreSQL

PostgreSQL 擁有一個非常活躍的開源社區,通常每三個月會發布一個小版本,頻繁的更新使得常見的 bug 能夠被及時修復。

雖然 PostgreSQL 在國外應用廣泛,但在國內目前仍以 MySQL 為主流。

不過,許多國產數據庫產品都是基于 PostgreSQL 二次開發的,例如:

  • 華為的 GaussDB
  • 騰訊的 TBase

此外,許多企業從 Oracle 遷移數據庫時,也選擇 PostgreSQL 作為替代方案,各大云廠商(如阿里云、騰訊云、華為云)均已支持 PostgreSQL。

得益于開源生態,PostgreSQL 社區提供了大量的數據遷移工具,方便用戶從其他數據庫系統平滑遷移(pgloader)。

主要特性:

  • 完整的 ACID 支持
  • 支持復雜查詢、并發控制、多版本并發控制(MVCC)
  • 支持存儲過程、觸發器、自定義類型、擴展模塊
  • 原生 JSON/JSONB 支持,適合構建混合結構的數據系統

PostgreSQL 官方網站:https://www.postgresql.org/

PostgreSQL 中文社區:http://www.postgres.cn/index.php/v2/home

2 PostgreSQL 與 MySQL 的區別

技術沒有好壞之分,主要看能否解決你的業務需求,其次查看社區的活躍度以及更新的頻次。

對比項PostgreSQL 15MySQL 8.0
數據類型豐富(布爾、網絡地址、XML、數組…)支持類型較基礎
序列(Sequence)機制支持不支持
擴展性高,支持擴展、插件、自定義操作符較低
并發控制MVCC(40 億事務版本號)MVCC(不同的實現)
高并發讀寫性能指標強(極限負載)出現波峰后下滑
JSON 支持原生 JSON/JSONB,強大查詢功能支持 JSON,但功能弱
同步復制機制異步、同步只支持異步
存儲過程支持多種語言(PL/pgSQL、Python、JavaScript 等)主要是 SQL 和最近支持的其他語言
適用場景企業級復雜系統、GIS、大數據處理輕量應用、Web 項目、CMS 系統
開源協議BSD 協議GPL 協議(嚴格)

總結:MySQL 輕便易用,適合中小項目;PostgreSQL 功能強大,更適合對復雜業務和數據一致性有高要求的系統。


3 PostgreSQL 的安裝

僅在Linux中嘗試安裝,不推薦大家在Windows下安裝。

1_Linux部署

進入官網選擇Linux和對應的發型商,比如我的是紅帽系的系統:

在這里插入圖片描述

點擊后跳轉到如下地址:https://www.postgresql.org/download/linux/redhat/

選擇好對應的PostgreSQL版本、服務器型號和架構后將出現安裝命令,直接復制即可。

在這里插入圖片描述
命令如下(如果網絡不好直接粘貼下面命令即可):

# 下載PostgreSQL的rpm包
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 安裝PostgreSQL15的軟件程序,需要下載,需要等一會,一般不會失敗,即便失敗,他也會重新幫你找鏡像
sudo yum install -y postgresql15-server
# 數據庫初始化
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
# 設置開啟啟動項,并設置為開啟自行啟動
sudo systemctl enable postgresql-15
# 啟動PostgreSQL
sudo systemctl start postgresql-15

可能出現的問題:鏡像不存在或鏡像倉庫問題(可以使用國內鏡像源比如阿里鏡像站)、插件等相關依賴不存在(配置 Epel 鏡像即可解決)、端口占用、Linux網絡問題等等。。。。

2_容器化部署

如果有docker直接運行如下命令即可:

# 指定好容器名、用戶、密碼、默認數據庫、容器內數據存放路徑、端口號、卷掛載路徑
docker run -d \--name postgres \-e POSTGRES_PASSWORD=postgres \-e POSTGRES_USER=postgres \-e POSTGRES_DB=postgres \-e PGDATA=/var/lib/postgresql/data/pg_data \-p 5432:5432 \-v pg_data:/var/lib/postgresql/data/pg_data \postgres:15
# 可以使用 docker volume inspect pg_data 查看掛載路徑
# 默認在/var/lib/docker/volumes/pg_data/_data目錄下

4 PostgreSQL的配置

要搞兩個配置信息,關于PostgreSQL的遠程連接配置以及PostgreSQL的日志配置。

配置文件通常位于:

/var/lib/pgsql/<version>/data # version = 15

主要文件:

  • postgresql.conf:設置端口、日志、連接數等
  • pg_hba.conf:配置客戶端認證方式(local/host/md5/trust 等)

查看 data 目錄下的所有配置文件

ll /var/lib/pgsql/15/data

在這里插入圖片描述

上圖可以看到,postgreSQL的核心文件,都屬于postgres用戶,操作的時候,盡可能的別用root用戶,容易玩出坑,盡可能先切換到postgres用戶。

1_遠程連接配置

PostgreSQL默認情況下不支持遠程連接的,這個跟MySQL幾乎一樣。

也就是說PostgreSQL也要基于配置文件修改,才能制定用戶是否可以遠程連接。

直接去修改pg_hba.conf配置文件,用戶以及對應數據庫和連接方式的編寫模板

在這里插入圖片描述

# local:代表本地連接,host代表可以指定連接的ADDRESS
# database編寫數據庫名,如果寫all,代表所有庫都可以連接
# user編寫連接的用戶,可以寫all,代表所有用戶
# address代表那些IP地址可以連接
# method加密方式,這塊不用過多關注,直接md5
# 直接來個痛快的配置嗎,允許任意地址的全部用戶連接所有數據庫
host    all             all             0.0.0.0/0               md5

在這里插入圖片描述

為了實現遠程連接,除了用戶級別的這種配置,還要針對服務級別修改一個配置,服務級別的配置在postgresql.conf

在這里插入圖片描述

發現默認情況下,PostgreSQL只允許localhost連接,直接配置為*即可解決問題,為了生效,一定要記得重啟PostgreSQL服務

# postgres密碼不管,直接root用戶
sudo systemctl restart postgresql-15

2_配置數據庫的日志

查看postgresql.conf文件

在這里插入圖片描述

PostgreSQL默認情況下,只保存7天的日志,循環覆蓋。

# 日志輸出到標準錯誤中
log_destination = 'stderr'
# 代表日志是開啟的。
logging_collector = on
# 日志存放的路徑,默認放到當前目錄下的log里
log_directory = 'log'
# 日志的文件名,默認是postgresql為前綴,星期作為后綴
log_filename = 'postgresql-%a.log'
# 一天一個日志文件
log_rotation_age = 1d
# 一個日志文件,沒有大小限制
log_rotation_size = 0
# 默認一周過后,日志文件會被覆蓋
log_truncate_on_rotation = on

3_設置數據庫密碼

默認的用戶和密碼配置

sudo -u postgres psql
\password postgres

5 PostgreSQL 基本操作

由于當前PostgreSQL服務就在本機,所以直接執行以下命令

# 切換到postgres用戶
su postgres
# 進入 PostgreSQL 命令行
psql

使用 psql --help,查看psql命令的完整參數如下:

在這里插入圖片描述

PostgreSQL中類似于MySQL中的 DQL、DDL、DML 這些數據庫級別的命令基本相同。

我們主要看一些PostgreSQL特有的服務級別的命令,常用命令如下:

\dt         	-- 查看所有表
\l          	-- 查看所有數據庫
\du         	-- 查看所有用戶
\q          	-- 退出 psql
\? [commands]   -- 顯示反斜線命令的幫助
\? options      -- 顯示 psql 命令行選項的幫助
\? variables 	-- 顯示特殊變量的幫助
\h [NAME]   	-- SQL命令語法上的說明,用*顯示全部命令的語法說明

PostgreSQL默認會為我們生成三個庫,如下

在這里插入圖片描述

1_用戶操作

構建用戶命令巨簡單

-- 區別就是create user默認有連接權限,create role沒有,不過可以基于選項去設置
CREATE USER 名稱 [ [ WITH ] 選項 [ ... ] ]
create role 名稱 [ [ WITH ] 選項 [ ... ] ]

構建一個超級管理員用戶

create user root with SUPERUSER PASSWORD 'root';

在這里插入圖片描述

退出psql命令行

在這里插入圖片描述

嘗試使用root用戶登錄PostgreSQL命令行

psql -h 192.168.200.129 -p 5432 -U root -W
# psql: 錯誤: 連接到"192.168.200.129"上的服務器,端口5432失敗:FATAL:  database "root" does not exist

發現,只有用戶不讓登錄,用戶需要有一個數據庫,直接構建一個root庫

create database root; -- 使用postgre創建

可以在不退出psql的前提下,直接切換數據庫\c database_name

在這里插入圖片描述

也可以退出psql,重新基于psql命令去切換用戶以及數據庫。

如果要修改用戶信息,或者刪除用戶,可以查看

# 修改用戶,直接基于ALTER命令操作
# 刪除用戶,直接基于DROP命令操作

如果要查看現在的全部用戶信息

在這里插入圖片描述

2_權限操作

權限操作前,要先掌握一下PostgreSQL的邏輯結構

邏輯結構圖
在這里插入圖片描述

可以看到PostgreSQL一個數據庫中有多個schema,在每個schema下都有自己的相應的庫表信息,權限粒度會比MySQL更細一些。

在PostgreSQL中,權限的管理分為很多多層

server、cluster、tablespace級別:這個級別一般是基于pg_hba.conf去配置

database級別:通過命令級別操作,grant

namespace、schema級別:不用過多了解這個~~

對象級別:通過grant命令去設置

后面如果需要對database或者是對象級別做權限控制,直接基于grant命令去操作即可

-- 查看grant命令
\help grant

3_創建一個自己的用戶

整體流程如下:

-- 準備用戶
create user shenyang with password 'shenyang';
-- 準備數據庫
create database shenyang;
-- 切換數據庫
\c shenyang;
-- 構建schema
create schema shenyang;
-- 將schema的擁有者修改為 shenyang 用戶
alter schema shenyang owner to shenyang;
-- 將shenyang庫下的shenyang的schema中的表的增,改,查權限賦予給shenyang用戶
grant select,insert,update on all tables in schema shenyang to shenyang;
-- 用postgres用戶先構建一張表
create table shenyang.test(id int);
-- 切換到shenyang用戶的shenyang庫。
\c shenyang -shenyang 
-- 報錯:
-- 致命錯誤:  對用戶"-shenyang"的對等認證失敗
-- Previous connection kept
-- 上述方式直接涼涼,原因是匹配連接方式時,基于pg_hba.conf文件去從上往下找
-- 找到的第一個是local,匹配上的。發現連接方式是peer。
-- peer代表用當前系統用戶去連接PostgreSQL
-- 當前系統用戶只有postgres,沒有shenyang,無法使用peer連接
-- 想構建shenyang用戶時,發現postgreSQL的所有文件擁有者和所屬組都是postgres,并且能操作的只有擁有者-- 基于上述問題,不采用本地連接即可。
-- 采用遠程連接。
psql -h 192.168.200.129 -p 5432 -U shenyang -W
-- 這樣依賴,跳過了local鏈接方式的匹配,直接鎖定到后面的host,host的連接方式是md5,md5其實就是密碼加密了。
-- 登錄后,直接輸入
\dn

查看到當前database下有兩個schema

在這里插入圖片描述

這種權限的賦予方式,可以用管理員用戶去構建整體表結構,如此一來,分配指定用戶,賦予不同的權限,就不怕用戶誤操了。

4_差異補充

還有很重要的一點需要補充:

PostgreSQL填充關鍵字時并不像MySQL使用``反引號標記,而是使用雙引號""


6 安裝圖形化界面

1_使用 pgAdmin(官方推薦)

  • 下載地址:https://www.pgadmin.org/download/
  • 跨平臺支持,功能全面(表管理、SQL 查詢、權限配置等)

2_DBeaver(多數據庫通用)

  • 官網:https://dbeaver.io/
  • 開源、UI 美觀,支持 PostgreSQL、MySQL、Oracle 等

3_DataGrip(JetBrains 出品)

  • 強大的 SQL 編輯器和數據庫管理工具,適合高級用戶

4_Navicat for PostgreSQL(商業)

  • 功能完整,適合商業場景,但非免費

7 總結

1_安全卸載

使用如下命令完全卸載PostgreSQL,容器化安裝則無需考慮數據殘留問題

# 卸載PostgreSQL,清空全部數據
version=15 # 定義你自己的版本號
sudo systemctl stop postgresql-${version} # 停止服務
sudo yum remove -y postgresql${version}\* # 卸載軟件和軟件包
# 刪除所有相關目錄
sudo rm -rf /var/lib/pgsql/${version}/
sudo rm -rf /usr/pgsql-${version}/
sudo rm -rf /var/log/pgsql/
# 刪除用戶和用戶組
sudo userdel postgres
# sudo groupdel postgres
# 刪除倉庫配置
sudo yum remove -y pgdg-redhat-repo
# 完整清理檢查
sudo find / -name "*pgsql*" -o -name "*postgres*" 2>/dev/null

2_結語

PostgreSQL 是一個值得深入掌握的數據庫系統,它不僅穩定高效,而且功能強大,支持豐富的擴展能力。

無論是從性能、SQL 規范支持,還是企業級部署能力來看,它都具備成為核心數據庫的實力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904141.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904141.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904141.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Fortran語言,do-end do循環,相互包含測試,自動性能優化

1&#xff09;上代碼 !$omp parallel private(n, j, dx, dy, dz, r, a)do n 1, nsteps!$omp dodo i 0, nparticles - 1x_tmp(i) x(i) vx(i) * dty_tmp(i) y(i) vy(i) * dtz_tmp(i) z(i) vz(i) * dtdo j 0, nparticles - 1dx x(j) - x(i)dy y(j) - y(i)dz z(j) - z(…

Cona編譯問題

問題描述 Clion 使用conan插件配置了C工程&#xff0c;然后想通過命令行進行編譯執行。 出現以下錯誤 CMake Error at /usr/local/Cellar/cmake/3.30.1/share/cmake/Modules/CMakeDetermineSystem.cmake:152 (message):Could not find toolchain file: conan_toolchain.cmake…

Qt實現 hello world + 內存泄漏(5)

文章目錄 實現hello world的兩種方式通過圖形化的方式通過純代碼的方式1. 新老頭文件的說明2.堆或棧上創建對象的選擇3.QString的說明 內存泄漏問題 實現hello world的兩種方式 通過圖形化的方式 通過圖形化的方式&#xff0c;在界面上創建出一個控件&#xff0c;顯示出hello …

【翻譯、轉載】【譯文】模型上下文協議(Model Context Protocol, MCP)簡介

原文地址&#xff1a; https://michaelwapp.medium.com/model-context-protocol-mcp-an-introduction-guide-25736f3dd672 在人工智能和 AI 驅動應用日新月異的格局中&#xff0c;一種與大型語言模型&#xff08;LLM&#xff09;交互的新方式正在興起。隨著 AI 智能體&#x…

[方法論]軟件工程中的軟件架構設計:從理論到實踐的深度解析

文章目錄 軟件架構設計&#xff1a;從理論到實踐的深度解析引言一、軟件架構設計的核心目標體系1.1 質量屬性矩陣1.2 架構權衡藝術 二、架構設計方法論演進2.1 傳統設計范式2.2 現代架構方法論2.3 設計模式演化路徑 三、主流架構風格全景圖3.1 單體架構&#xff08;Monolithic&…

【win11 】win11 鍵盤測試

我的鍵盤是支持mac和win的&#xff0c;fn tab 就能切換&#xff0c;有可能是用錯了模式&#xff0c;導致 我alt a 就會彈出 win11的 wifi 等菜單控制 鍵盤測試網站 https://keyboard.bmcx.com/ 識別到我按下的是alt

Linux環境部署iview-admin項目

環境&#xff1a;阿里云服務 系統&#xff1a;CentOS7.X系統 1、下載源碼安裝包 wget https://nodejs.org/dist/v14.17.3/node-v14.17.3-linux-x64.tar.xz2、解壓并放入指定目錄 tar -xf node-v14.17.3-linux-x64.tar.xz && mv node-v14.17.3-linux-x64 /usr/local/no…

VSCode常用插件推薦

文章目錄 VSCode常用插件推薦1 Git相關插件2 代碼格式3 AI工具4 語言插件通用工具參考 VSCode常用插件推薦 1 Git相關插件 2 代碼格式 3 AI工具 4 語言插件 通用工具 參考 50 個 VSCode 必裝插件推薦 https://mp.weixin.qq.com/s/b_OKvg3hdavtnv7pbWcKWg

【Unity】使用XLua進行熱修復

準備工作&#xff1a; &#xff08;1&#xff09;將XLua的Tool拖入Asset &#xff08;2&#xff09;配置熱修復 &#xff08;3&#xff09;運行Genrate Code &#xff08;4&#xff09;運行Hotfix Inject In Editor 編寫腳本&#xff08;注意類上帶有[Hotfix]&#xff09; [Hot…

javaEE——單例模式

目錄 前言1.概念2. 實現3. 比較和改進總結 前言 本篇文章來介紹單例模式&#xff0c;并講述在保證線程安全的前提下&#xff0c;單例模式的寫法。 1.概念 單例模式是一種設計模式&#xff0c;可以說是寫代碼的一種模板&#xff0c;如果在一些固定的場景下按照設計模式進行寫…

TS 對象類型

給對象添加類型注解 ![在這里插入圖片描述(https://i-blog.csdnimg.cn/direct/6c413992c11142d88106633ec442b905.png) 格式&#xff1a;數據類型名:類型別名 注意&#xff1a;對象類型限制使用分號&#xff0c;如果對象中存在方法就寫成&#xff1a;方法&#xff08;&#x…

C++類_虛基類

在 C 里&#xff0c;虛基類是用來解決菱形繼承問題的。菱形繼承問題是指當一個派生類從兩個或更多基類派生&#xff0c;而這些基類又從同一個基類派生時&#xff0c;派生類會包含多份間接基類的數據副本&#xff0c;這可能會引發數據冗余和二義性問題。虛基類可以保證在派生類中…

詳細案例,集成算法

以下是一個使用 隨機森林&#xff08;RF&#xff09; 和 XGBoost 解決結構化數據分類問題的完整案例&#xff08;以泰坦尼克號生存預測為例&#xff09;&#xff0c;包含數據處理、建模和結果分析&#xff1a; 案例&#xff1a;泰坦尼克號乘客生存預測 目標&#xff1a;根據乘客…

《C#數據結構與算法》—201線性表

線性表的實現方式 順序表 線性表的順序存儲是指在內存中用一塊地址連續的空間依次存放線性表的數據元素&#xff0c;用這種方式存儲的線性表叫順序表。 特點&#xff1a;表中相鄰的數據元素在內存中存儲位置也相鄰。 順序表接口實現&#xff1a; 方法名參數返回值描述GetLen…

深入解析C++11委托構造函數:消除冗余初始化的利器

一、傳統構造函數的痛點 在C11之前&#xff0c;當多個構造函數需要執行相同的初始化邏輯時&#xff0c;開發者往往面臨兩難選擇&#xff1a; class DataProcessor {std::string dataPath;bool verbose;int bufferSize; public:// 基礎版本DataProcessor(const std::string&am…

LeetCode 熱題 100 189. 輪轉數組

LeetCode 熱題 100 | 189. 輪轉數組 大家好&#xff0c;今天我們來解決一道經典的算法題——輪轉數組。這道題在LeetCode上被標記為中等難度&#xff0c;要求我們將數組中的元素向右輪轉 k 個位置。下面我將詳細講解解題思路&#xff0c;并附上Python代碼實現。 問題描述 給定…

GAEA商業前景和生態系統擴展

GAEA情感坐標系不僅增強了AI對人類情感的理解&#xff0c;也為Web3生態注入了新的活力。通過去中心化的數據存儲和共享&#xff0c;GAEA構建了一個開放透明的數據市場&#xff0c;為AI訓練提供了優質的數據源。同時&#xff0c;貢獻數據的用戶將獲得靈魂積分&#xff08;SOUL P…

[原創](現代Delphi 12指南):[macOS 64bit App開發]: [2]如何使用跨平臺消息框?

[作者] 常用網名: 豬頭三 出生日期: 1981.XX.XX 企鵝交流: 643439947 個人網站: 80x86匯編小站 編程生涯: 2001年~至今[共24年] 職業生涯: 22年 開發語言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 開發工具: Visual Studio、Delphi、XCode、…

js逆向繞過指紋識別

??一、兼容性說明?? 官方支持 curl_cffi 明確支持 Windows 平臺&#xff0c;并提供了預編譯的安裝包。其核心功能&#xff08;如瀏覽器指紋模擬、HTTP/2 支持&#xff09;在 Windows 上與 Linux/macOS 表現一致。 版本要求 ? Python 3.8 及以上版本&#xff08;推薦 Pyth…

聊聊對Mysql的理解

目錄 1、Sql介紹 1.1、SQL的分類 1.2、數據庫的三大范式 1.3、數據表的約束 1.4、約束的添加與刪除 2、核心特性 3、主要組件 4、數據結構原理 5、索引失效 6、常用問題 7、優勢與局限 前言 MySQL是一個開源的關系型數據庫管理系統(RDBMS)&#xff0c;由瑞典MySQL A…