一文掌握 PostgreSQL 的各種指令(PostgreSQL指令備忘)

引言

PostgreSQL 作為一款功能強大、開源的關系型數據庫管理系統(RDBMS),以其高擴展性、SQL 標準兼容性以及豐富的功能特性,成為企業級應用的首選數據庫之一。無論是開發、運維還是數據分析,掌握 PostgreSQL 的核心指令是高效工作的關鍵。本文將從基礎到高級,全面梳理 PostgreSQL 的常用指令,并結合實戰場景與創新技巧,幫助讀者快速掌握 PostgreSQL 的精髓。


一、數據庫與用戶管理

1.1 數據庫操作

創建數據庫
CREATE DATABASE mydb WITH OWNER = myuser ENCODING = 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' TEMPLATE = template0;
  • OWNER:指定數據庫所有者。
  • ENCODING:設置字符編碼。
  • TEMPLATE:基于模板創建數據庫(template0為純凈模板)。
刪除數據庫
DROP DATABASE IF EXISTS mydb;
  • IF EXISTS:避免數據庫不存在時報錯。
切換數據庫
\c mydb
  • psql 命令行中快速切換數據庫。

1.2 用戶與權限管理

創建用戶
CREATE USER myuser WITH PASSWORD 'mypassword';
  • 創建用戶并設置密碼。
修改用戶密碼
ALTER USER myuser WITH PASSWORD 'newpassword';
授予權限
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
  • 授予用戶對數據庫的所有權限。
撤銷權限
REVOKE ALL PRIVILEGES ON DATABASE mydb FROM myuser;
刪除用戶
DROP USER IF EXISTS myuser;

二、表與數據操作

2.1 表操作

創建表
CREATE TABLE employees (id SERIAL PRIMARY KEY,name VARCHAR(100) NOT NULL,salary NUMERIC(10, 2),hire_date DATE DEFAULT CURRENT_DATE
);
  • SERIAL:自增主鍵。
  • NOT NULL:字段不允許為空。
  • DEFAULT:設置默認值。
修改表結構
ALTER TABLE employees ADD COLUMN department VARCHAR(50);
ALTER TABLE employees DROP COLUMN department;
ALTER TABLE employees RENAME COLUMN salary TO annual_salary;
刪除表
DROP TABLE IF EXISTS employees;

2.2 數據操作

插入數據
INSERT INTO employees (name, salary, hire_date) VALUES ('Alice', 75000.00, '2023-01-15');
更新數據
UPDATE employees SET salary = 80000.00 WHERE name = 'Alice';
刪除數據
DELETE FROM employees WHERE id = 1;
查詢數據
SELECT * FROM employees WHERE salary > 50000 ORDER BY hire_date DESC;

三、索引與性能優化

3.1 創建索引

單列索引
CREATE INDEX idx_employees_name ON employees (name);
多列索引
CREATE INDEX idx_employees_name_salary ON employees (name, salary);
唯一索引
CREATE UNIQUE INDEX idx_employees_email ON employees (email);

3.2 刪除索引

DROP INDEX IF EXISTS idx_employees_name;

3.3 查詢性能分析

使用 EXPLAIN 分析查詢計劃:

EXPLAIN ANALYZE SELECT * FROM employees WHERE salary > 50000;
  • EXPLAIN:顯示查詢計劃。
  • ANALYZE:執行查詢并返回實際執行時間。

四、高級查詢與數據處理

4.1 聚合函數

SELECT department, AVG(salary) AS avg_salary, COUNT(*) AS employee_count
FROM employees
GROUP BY department
HAVING AVG(salary) > 60000;
  • AVG:計算平均值。
  • COUNT:統計行數。
  • HAVING:對聚合結果進行過濾。

4.2 窗口函數

SELECT name, salary, RANK() OVER (ORDER BY salary DESC) AS salary_rank
FROM employees;
  • RANK():計算排名。
  • OVER:定義窗口范圍。

4.3 子查詢

SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

4.4 聯合查詢

SELECT e.name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.id;

五、事務與并發控制

5.1 事務管理

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
  • BEGIN:開始事務。
  • COMMIT:提交事務。
  • ROLLBACK:回滾事務。

5.2 鎖機制

SELECT * FROM employees WHERE id = 1 FOR UPDATE;
  • FOR UPDATE:對查詢結果加排他鎖。

六、備份與恢復

6.1 邏輯備份

使用 pg_dump 備份數據庫:

pg_dump -U myuser -d mydb -f mydb_backup.sql

6.2 邏輯恢復

psql -U myuser -d mydb -f mydb_backup.sql

6.3 物理備份

使用 pg_basebackup 進行全量備份:

pg_basebackup -U myuser -D /backup/mydb -Ft -Xs -P

七、擴展與插件

7.1 安裝擴展

CREATE EXTENSION postgis;

7.2 常用擴展

  • postgis:地理信息系統支持。
  • pg_stat_statements:SQL 性能監控。
  • uuid-ossp:生成 UUID。

八、創新技巧與實戰場景

8.1 JSONB 數據處理

PostgreSQL 支持 JSONB 數據類型,適用于半結構化數據存儲:

CREATE TABLE products (id SERIAL PRIMARY KEY,details JSONB
);INSERT INTO products (details) VALUES ('{"name": "Laptop", "price": 1200, "tags": ["electronics", "portable"]}');SELECT details->>'name' AS product_name
FROM products
WHERE details @> '{"tags": ["electronics"]}';

8.2 全文搜索

使用 tsvectortsquery 實現全文搜索:

SELECT title, content
FROM articles
WHERE to_tsvector('english', content) @@ to_tsquery('english', 'PostgreSQL & performance');

8.3 分區表

對大表進行分區,提升查詢性能:

CREATE TABLE sales (id SERIAL PRIMARY KEY,sale_date DATE,amount NUMERIC(10, 2)
) PARTITION BY RANGE (sale_date);CREATE TABLE sales_2023 PARTITION OF salesFOR VALUES FROM ('2023-01-01') TO ('2024-01-01');

結語

PostgreSQL 的強大功能使其成為現代數據管理的利器。通過本文的指令梳理與實戰技巧,讀者可以快速掌握 PostgreSQL 的核心操作,并在實際工作中靈活運用。無論是基礎的數據管理,還是高級的性能優化與擴展功能,PostgreSQL 都能滿足多樣化的需求。未來,隨著 PostgreSQL 生態的不斷發展,其應用場景將更加廣泛,成為數據驅動型企業的核心基礎設施。

延伸閱讀

  • PostgreSQL 官方文檔:https://www.postgresql.org/docs/
  • PostgreSQL 性能優化指南
  • 深入理解 PostgreSQL 的事務與并發控制

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

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

相關文章

fastadmin后臺管理員日志指定方法不記錄

做的訂單提醒,只要在線會把日志自動存儲進去,這個又是每30s執行一次,數據庫沒多久就爆掉了,最終找到一個處理方法,可能不是最好的,僅供大家參考 具體位置: application/admin/model/AdminLog.php里面的$ignoreRegex方法 protected static $ignoreRegex [/^(.*)\/(selectpage…

Redis Sentinel(哨兵模式)高可用性解決方案

一、概述 Redis Sentinel(哨兵模式)是Redis的高可用性(High Availability, HA)解決方案,它通過哨兵系統和Redis實例的協同工作,確保了Redis服務的高可用性和數據的持久性。哨兵系統由一個或多個哨兵進程組…

密碼學(Public-Key Cryptography and Discrete Logarithms)

Public-Key Cryptography and Discrete Logarithms Discrete Logarithm 核心概念:離散對數是密碼學中一個重要的數學問題,特別是在有限域和循環群中。它基于指數運算在某些群中是單向函數這一特性。也就是說,給定一個群 G G G和一個生成元 …

tcp 通信在wifi 下會出現內容錯誤嗎?

TCP通信在WiFi下可能會出現內容錯誤。TCP(Transmission Control Protocol,傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。在WiFi環境下,由于信號干擾、信號衰減、多徑傳播等因素,可能會造成數據…

JVM OOM問題如何排查和解決

在 Java 開發中,JVM OOM(OutOfMemoryError)問題通常是指程序運行時,JVM 無法為對象分配足夠的內存空間,導致發生內存溢出的錯誤。這個問題往往和內存的配置、內存泄漏、或者資源過度使用等因素有關。 1. OOM 錯誤類型…

深入解析音頻編解碼器(Audio CODEC):硬件、接口與驅動開發

音頻編解碼器(Audio CODEC)是音頻處理系統中的核心組件,負責 模擬信號與數字信號的相互轉換,廣泛應用于 智能音箱、嵌入式系統、消費電子產品 等設備。本篇文章將從 硬件結構、接口解析、驅動開發 和 軟件配置 等方面,…

【QGIS_Python】在QGIS的Python控制臺生成SHP格式點數據并顯示標注

參考文章: 「GIS教程」使用DeepSeek輔助QGIS快速制圖 | 麻辣GIS 示例代碼說明:使用參考文章中的省會城市坐標點,左側增加一列城市序號code, 圖層標注顯示 code 城市名稱,同時在指定路徑下生成對應SHP格式點數據。 import os fr…

deepSpeed多機多卡訓練服務器之間,和服務器內兩個GPU是怎么通信

DeepSpeed 在多機多卡訓練時,主要依賴 NCCL 和 PyTorch Distributed 進行通信。具體來說,分為服務器之間和服務器內兩種情況: 1. 服務器之間的通信(跨節點通信) DeepSpeed 采用 NCCL(NVIDIA Collective Communications Library)作為主要的通信后端,結合 PyTorch Distr…

k8s-coredns-CrashLoopBackOff 工作不正常

本文作者: slience_me 問題描述 # 問題描述 # rootk8s-node1:/home/slienceme# kubectl get pods --all-namespaces # NAMESPACE NAME READY STATUS RESTARTS AGE # kube-flannel kube-flannel-ds-66bcs …

新能源電站系統建設提速!麒麟信安操作系統驅動光伏風電雙領域安全升級

在全球能源結構加速向清潔能源轉型的背景下,新能源電站建設正如火如荼地展開,麒麟信安操作系統為光伏與風電領域提供了穩定可靠的底座支持,目前已在中電乾陽光伏、遼寧鐵嶺風電場、清河光伏、鑫田茨溝風電場、連山風電場等新能源場站落地應用…

Oracle 19c 子分區表索引測試

一、建表語句放在最后,方便查看 二、創建各類索引 --創建本地的主鍵約束,但必須加上分區鍵、子分區鍵MT_O_CODE,M_YMD alter table MS_DMG.A_RED drop constraint MGR_PK_AREAD ; alter table MS_DMG.A_RED add constraint MGR_PK_AREAD primary key …

Linux Vim 寄存器 | 從基礎分類到高級應用

注:本文為 “vim 寄存器” 相關文章合輯。 英文引文,機翻未校。 中文引文,略作重排。 未整理去重,如有內容異常,請看原文。 Registers 寄存器 Learning Vim registers is like learning algebra for the first ti…

【Java/數據結構】隊列(Quque)

本博客將介紹隊列的相關知識,包括基于數組的普通隊列,基于鏈表的普通隊列,基于數組的雙端隊列,基于鏈表的雙端隊列,但不包括優先級隊列(PriorityQueue),此數據結構將單獨發一篇博客&…

[數據結構]排序之 歸并排序(有詳細的遞歸圖解)

一、非遞歸 基本思想: 歸并排序( MERGE-SORT )是建立在歸并操作上的一種有效的排序算法 , 該算法是采用分治法( Divide andConquer)的一個非常典型的應用。將已有序的子序列合并,得到完全有序的序列&#x…

docker安裝向量數據庫Milvus及可視化工具 Attu

前置條件 1.安裝了docker 2.服務器網絡正常,可以連接到容器下載地址 3.服務器磁盤空間正常,docker磁盤占用過大,請參考docker容量占用過大解決辦法 一、下載yml文件 可在文章資源下載或者自行下載:下載yml 下載這個單機版本的…

科技云報到:AI Agent打了個響指,商業齒輪加速轉動

科技云報到原創。 3月16日,百度旗下文心大模型4.5和文心大模型X1正式發布。目前,兩款模型已在文心一言官網上線,免費向用戶開放。 同時,文心大模型4.5已上線百度智能云千帆大模型平臺,企業用戶和開發者登錄即可調用AP…

CSS 用于圖片的樣式屬性

CSS 設置圖像樣式 CSS中用于圖片的樣式屬性主要包括以下幾個方面: ?邊框和背景?: ?border?:可以設置圖片的邊框樣式、寬度和顏色。例如,img { border: 1px solid #ddd; } 會給圖片添加1像素的實線邊框,顏色為灰色…

EasyExcel--導入和導出Excel的方法

原文網址:EasyExcel--導入和導出Excel的方法_IT利刃出鞘的博客-CSDN博客 簡介 本文介紹SpringBoot整合EasyExcel導入和導出Excel的方法。 使用 Excel導入 實體類 Data public class OrderImportBO {ExcelProperty("訂單號")NotBlank(message "…

金融級安全加速:群聯SD-WAN如何兼顧防御與低延遲?

一、SD-WAN的核心價值 1. 傳統回源痛點 暴露風險:公網回源可能泄露源站IP,易遭針對性攻擊。延遲抖動:跨國業務因網絡擁堵導致延遲波動(如金融交易超時)。 2. 群聯方案優勢 加密專線:通過IPSec/SSL VPN建…

Apache Tomcat漏洞公開發布僅30小時后即遭利用

近日,Apache Tomcat曝出一項安全漏洞,在公開發布概念驗證(PoC)僅30小時后,該漏洞即遭到攻擊者利用。這一漏洞編號為CVE-2025-24813,主要影響以下版本: 1. Apache Tomcat 11.0.0-M1 至 11.0.2 …