## 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 有所幫助。