PostgreSQL 教程

## PostgreSQL 教程

### 1. PostgreSQL 概述
PostgreSQL 是一個開源的對象關系型數據庫管理系統(ORDBMS),以其高擴展性和合規性聞名,支持 SQL 和 JSON 查詢。

### 2. 安裝與配置
- **下載與安裝**:從 PostgreSQL 官方網站下載并安裝 PostgreSQL。可以選擇不同的平臺和版本。
- **初始化數據庫**:安裝后使用 `initdb` 命令初始化數據庫集群。
- **啟動服務**:使用 `pg_ctl` 或系統服務管理器啟動 PostgreSQL 服務。

### 3. 基本概念
- **數據庫**:包含多個表、視圖、函數等對象的集合。
- **表**:存儲結構化數據的基本單位,由行和列組成。
- **模式(Schema)**:數據庫中的命名空間,用于組織數據庫對象。
- **視圖**:基于表的虛擬表,不存儲數據,僅存儲查詢邏輯。
- **函數**:可重復使用的 SQL 代碼塊,執行特定任務。

### 4. 基本操作
- **連接數據庫**:
? ```sh
? psql -h localhost -U username -d databasename
? ```

- **創建數據庫**:
? ```sql
? CREATE DATABASE mydatabase;
? ```

- **創建表**:
? ```sql
? CREATE TABLE employees (
? ? ? employee_id SERIAL PRIMARY KEY,
? ? ? first_name VARCHAR(50),
? ? ? last_name VARCHAR(50),
? ? ? birth_date DATE
? );
? ```

- **插入數據**:
? ```sql
? INSERT INTO employees (first_name, last_name, birth_date)
? VALUES ('John', 'Doe', '1980-01-01');
? ```

- **查詢數據**:
? ```sql
? SELECT * FROM employees;
? ```

- **更新數據**:
? ```sql
? UPDATE employees
? SET first_name = 'Jane'
? WHERE employee_id = 1;
? ```

- **刪除數據**:
? ```sql
? DELETE FROM employees
? WHERE employee_id = 1;
? ```

### 5. 常用函數
- **聚合函數**:`SUM()`, `AVG()`, `COUNT()`, `MAX()`, `MIN()`
? ```sql
? SELECT COUNT(*) FROM employees;
? ```

- **字符串函數**:`LENGTH()`, `SUBSTRING()`, `REPLACE()`
? ```sql
? SELECT LENGTH(first_name) FROM employees;
? ```

- **日期函數**:`CURRENT_DATE`, `AGE()`, `DATE_PART()`
? ```sql
? SELECT CURRENT_DATE;
? ```

### 6. 索引
- **創建索引**:提高查詢性能
? ```sql
? CREATE INDEX idx_last_name ON employees (last_name);
? ```

- **刪除索引**:
? ```sql
? DROP INDEX idx_last_name;
? ```

### 7. 視圖
- **創建視圖**:
? ```sql
? CREATE VIEW employee_names AS
? SELECT first_name, last_name FROM employees;
? ```

- **查詢視圖**:
? ```sql
? SELECT * FROM employee_names;
? ```

### 8. 函數
- **創建函數**:
? ```sql
? CREATE FUNCTION get_employee_by_id(emp_id INT) RETURNS TABLE (
? ? ? employee_id INT,
? ? ? first_name VARCHAR,
? ? ? last_name VARCHAR,
? ? ? birth_date DATE
? ) AS $$
? BEGIN
? ? ? RETURN QUERY SELECT * FROM employees WHERE employee_id = emp_id;
? END;
? $$ LANGUAGE plpgsql;
? ```

- **調用函數**:
? ```sql
? SELECT * FROM get_employee_by_id(1);
? ```

### 9. 觸發器
- **創建觸發器函數**:
? ```sql
? CREATE FUNCTION after_insert_employee() RETURNS TRIGGER AS $$
? BEGIN
? ? ? RAISE NOTICE 'A new row has been inserted.';
? ? ? RETURN NEW;
? END;
? $$ LANGUAGE plpgsql;
? ```

- **創建觸發器**:
? ```sql
? CREATE TRIGGER trg_after_insert
? AFTER INSERT ON employees
? FOR EACH ROW
? EXECUTE FUNCTION after_insert_employee();
? ```

### 10. 事務管理
- **事務控制**:`BEGIN`, `COMMIT`, `ROLLBACK`
? ```sql
? BEGIN;
? UPDATE employees SET first_name = 'John' WHERE employee_id = 1;
? COMMIT;
? ```

### 11. 安全管理
- **用戶和權限**:
? ```sql
? CREATE USER myuser WITH PASSWORD 'mypassword';
? GRANT SELECT ON employees TO myuser;
? ```

### 12. 性能優化
- **查詢優化**:使用索引、避免不必要的列和表掃描、優化 SQL 語句。
- **數據庫維護**:定期重建索引、更新統計信息、備份和恢復。

### 參考資料
- [PostgreSQL 官方文檔](https://www.postgresql.org/docs/)
- 《PostgreSQL: Up and Running》 - Regina O. Obe, Leo S. Hsu

以上是 PostgreSQL 基礎學習的一個簡要教程,希望對你學習 PostgreSQL 有所幫助。

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

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

相關文章

C++ Primer Plus第十七章復習題

1、iostream文件在CI/O中扮演這種角色? 答: iostream文件定義了用于管理輸入和輸出的類、常量和操縱符,這些對象管理用于處理I/O的流和緩沖區。該文件還創建了一些標準對象(cin、cout、cerr和 clog以及對應的寬字符對象),用于處理與每個程序…

【論文筆記】| 微調LLM晶體生成

【論文筆記】| 微調LLM晶體生成 Fine-Tuned Language Models Generate Stable Inorganic Materials as Text NYU, ICLR 2024 Theme:Material Generation Main work: 微調大型語言模型以生成穩定的材料 可靠性:在樣本結構中,90% …

如何修改WordPress網站的域名

我的網站用的是Hostease的虛擬主機,但是域名是之前在其他平臺買的,而且已經快到期了,因為主機和域名在不同的平臺上,管理不太方便,所以我又在Hostease重新注冊了一個域名,然后把網站換成了新的域名&#xf…

(Java企業 / 公司項目)配置Linux網絡-導入虛擬機

公司給了我一個IP地址 ,提供了一個虛擬機或者自己搭建虛擬機,還有提供登錄的賬號密碼 可以查看我之前的文章 VMware Workstation Pro 17虛擬機超級詳細搭建(含redis,nacos,docker, rabbitmq,sentinel&…

Oracle數據庫中的PCTUSED解析

PCTUSED是Oracle數據庫中與數據塊空間管理相關的另一個參數,它與PCTFREE共同作用于表空間的段管理。PCTUSED定義了一個數據塊中空閑空間的比例,低于這個比例時,塊被視為“足夠空閑”,可以再次用于插入新的數據行。其主要作用是提高…

3D透視圖模型轉模型變形?---模大獅模型網

3D建模是數字藝術和設計領域中的重要技術,它可以為我們帶來豐富多彩的視覺體驗和創意表達。在本文中,我們將探討一個引人注目的話題:3D透視圖中模型轉換是否會導致變形?通過深入探討這個問題,我們希望能夠幫助您更好地理解在3D建…

GitHub的原理及應用詳解(四)

本系列文章簡介: GitHub是一個基于Git版本控制系統的代碼托管平臺,為開發者提供了一個方便的協作和版本管理的工具。它廣泛應用于軟件開發項目中,包括但不限于代碼托管、協作開發、版本控制、錯誤追蹤、持續集成等方面。 GitHub的原理可以簡單…

【C++風云錄】數字邏輯設計優化:電子設計自動化與集成電路

集成電路設計:打開知識的大門 前言 本文將詳細介紹關于數字芯片設計,電子設計格式解析,集成電路設計工具,硬件描述語言分析,電路驗證以及電路優化六個主題的深入研究與實踐。每一部分都包含了主題的概述,…

如何通過軟件SPI讀寫W25Q64

STM32F1之SPI通信軟件SPI代碼編寫-CSDN博客 目錄 1. W25Qxx系列簡介 2. W25Q64硬件電路 3. W25Q64框圖 4. Flash操作注意事項 5. 代碼編寫 5.1 初始化 5.2 W25Q64讀取ID號 5.3 W25Q64寫使能 5.4 W25Q64等待忙 5.5 W25Q64頁編程 5.6 W25Q64扇區擦除&#x…

WebRTC | 網絡傳輸協議 RTP 和 RTCP

WebRTC | 網絡傳輸協議 RTP 和 RTCP WebRTC | 網絡傳輸協議 RTP 和 RTCP如何選擇 TCP 與 UDPRTP概述工作機制報文結構RTP 的使用RTP 拓展頭RTP 中的填充數據翻譯器和混合器同步控制報文大小wireshark 抓取 RTP 報文 RTCP概述工作機制分組類型報文結構WebRTC 的反饋報文RTPFBPSF…

深入淺出遞歸算法

文章目錄 遞歸思想遞歸的題目1.漢諾塔問題問題分析代碼展示 2.合并兩個有序鏈表問題分析代碼展示 3.反轉鏈表問題分析代碼展示 4.兩兩交換 鏈表中的節點問題分析代碼展示 總結 遞歸思想 遞歸就是將一個很大的問題拆分成子問題,然后再將子問題繼續拆分,拆…

經典正則表達式實例

1、由26個字母組成的字符串 ^[A-Za-z]$2、 由26個字母和數字組成的字符串 ^[A-Za-z0-9]$3、整數形式的字符串 ^-?\d$4、正整數形式的字符串 ^[0-9]*[1-9][0-9]*$5、中國境內郵政編碼,6位 [1-9\d{5}6、匹配中文字符 [\u4e00-\u9fa5]7、國內電話號碼,010-6872**** \d{3}-…

【linux-IMX6ULL-字符設備驅動簡單框架實驗】

目錄 1. 字符設備驅動簡介1.1 重要函數1.2 簡單框架代碼流程1.3 linux中關于驅動的重要命令 2. 字符設備驅動簡單框架編寫2.1 添加LICENSE信息2.2 驅動模塊的入口與出口2.3 入口和出口函數的編寫2.4 設備操作結構體定義2.4.1 結構體函數內容填充 3. 應用程序簡介:4.…

Design to code(2)

【碎碎念】從七點到十一點,累計用時4個小時完成的代碼翻譯Σ( ̄。 ̄ノ)ノ DCDS圖 順序圖(支付過程) 交互圖(訂單) 我的代碼 Payment public class Payment { //定義支付訂單金額 private…

static的了解

【關鍵字】static 使用總結_c static關鍵字-CSDN博客 本文來自上面的文章,這里用于學習,謝謝大佬的分享!!! 非原創!!! 1.一個項目中創建main.cpp和demo.cpp (1&#…

FL Studio2025中文最新版本專業編曲軟件有哪些新功能?

FL Studio 21,也被音樂制作愛好者親切地稱為“水果編曲軟件”,是比利時的Image-Line公司研發的一款完整的音樂制作環境或數字音頻工作站(DAW)。自從1990年代推出以來,FL Studio 以其直觀的用戶界面、豐富的插件支持和強…

Rust分割字符串的常見操作方法

在Rust編程語言中,分割字符串是一個常見的操作,可以通過多種方式實現。以下是一些常用的方法: 使用split方法: split方法可以按照指定的字符或字符序列來分割字符串。它返回一個迭代器,可以迭代分割后的字符串片段。 l…

玩機社區 - 2024年最美社區源碼開源

玩機社區 - 2024年最美社區源碼開源 教程源碼文檔都內置到壓縮包了 https://pan.baidu.com/s/1xwcscTne-JMbmKEntiuAuA?pwd78oi

邏輯分析儀 - 采樣率/采樣深度

采樣深度(Sampling Depth) 采樣深度指的是邏輯分析儀在一次捕獲過程中可以記錄的最大樣本數量。簡單來說,采樣深度越大,邏輯分析儀可以記錄的數據量就越多。這對于分析長時間的信號變化或復雜的信號序列非常重要。 采樣率&#…

2024年5月23日 (周四) 葉子游戲新聞

《Unclogged》Steam頁面上線 馬桶主題恐怖逃脫解謎Brody制作并發行,一款奇葩創意馬桶主題恐怖逃脫解謎新游《Unclogged》Steam頁面上線,本作暫不支持中文。 Meta人工智能主管楊立昆 大語言模型不會達到人類智能水平IT之家今日(5月23日&#x…