# 新鮮出爐的PostgreSQL 18

> 突破性的速度。重大的新功能。

## 速度突破，功能革新。
#

<img src="https://cdn-console.zeabur.com/f/EoBSX/psql18inblog.png" alt="PostgreSQL 18" className="w-full rounded-xl" />

漫長的等待終於結束。PostgreSQL 全球開發組已正式發布 **PostgreSQL 18**，延續其近十年來每年秋季發布重大更新的傳統。這不僅是一次常規的增量更新，更是一個里程碑式的版本，包含了 **202 項新功能**——比去年增加了 25%。

對於依賴這款全球最受歡迎的資料庫的開發者和團隊而言，PostgreSQL 18 實現了三大核心承諾：革命性的效能、编写更少程式碼的強大新工具，以及更智慧、更安全的操作。

下面，讓我們深入剖析這些將對您的應用程式產生最大影響的功能，並向您展示如何立即在 Zeabur 上開始使用它們。

---

### 效能的量子飛躍：非同步 I/O

PostgreSQL 18 中最引人注目的無疑是全新的**非同步 I/O (AIO) 子系統**。這是一項旨在徹底解決資料庫最大效能瓶頸之一的基礎性升級：等待資料在磁碟和記憶體之間傳輸所花費的時間。

**過去的問題：** 以前，當 Postgres 需要從磁碟讀取資料時，它必須暫停並等待該操作完成，然後才能繼續執行其他任務。這就像打一個電話然後一直在线等待，寶貴的 CPU 週期被白白浪費，而這些資源本可以用於處理其他工作。

**AIO 的解決方案：** PostgreSQL 18 徹底改變了這一模式。現在，資料庫可以同時發出多個 I/O 請求，並在磁碟處理這些請求時並行處理其他任務。CPU 資源得以保持空閒，使查詢和背景操作能夠同時進行。

**這對您意味著什麼：**
初步的部落格文章和基準測試顯示，對於循序掃描和 vacuum 等 I/O 密集型工作負載，效能提升可達 **2 到 3 倍**。對您的應用程式而言，這意味著：

- **更快的查詢執行：** 您的應用程式回應更靈敏。
- **更高的吞吐量：** 分析和機器學習管線能更快地處理資料。
- **更高的硬體效率：** 無需修改任何一行應用程式程式碼，就能從現有 CPU 中獲得更強的效能。

---

### 賦能開發者：更強功能，更少程式碼

Postgres 18 引入了多項改善開發體驗的功能，不僅解決了長期以來的爭論，還讓日常開發工作變得更輕鬆、更高效。

#### 1. 原生支援 UUIDv7

關於主鍵應該使用 `SERIAL` 還是 `UUID` 的爭論幾乎可以告一段落了。PostgreSQL 18 引入了原生的 `uuidv7()` 函式。

- **它是什麼：** 一種嵌入了時間戳的新標準 UUID 格式。
- **為何更好：** 與隨機的 UUIDv4 不同，UUIDv7 的值是自然有序的。這極大地提升了 B-tree 索引的效能和快取效率，從而在**加快插入和更新速度**的同時，避免了隨機鍵值導致的索引膨脹問題。

```sql
-- 使用 UUIDv7 作為主鍵建立資料表
CREATE TABLE orders (
    id UUID PRIMARY KEY DEFAULT uuidv7(),
    total DECIMAL(10,2),
    created_at TIMESTAMP DEFAULT NOW()
);
```

#### 2. 虛擬衍生欄位成為預設選項

衍生欄位變得更智慧了。在 Postgres 18 中，它們現在預設為 `VIRTUAL`（虛擬）。

- **它是什麼：** 欄位的值在讀取時動態計算，而不是在寫入時計算並儲存在磁碟上。
- **為何更好：** 這透過消除冗餘資料顯著節省了磁碟空間，並加快了 `INSERT` 和 `UPDATE` 操作。它非常適合衍生資料，例如根據 `monthly_salary` 計算 `annual_salary`。

```sql
CREATE TABLE employees (
    salary DECIMAL(10,2),
    -- 'VIRTUAL' 現在是預設值，無需額外關鍵字
    annual_salary DECIMAL(12,2) GENERATED ALWAYS AS (salary * 12)
);
```

#### 3. 更智慧的索引：B-tree 跳躍掃描

此功能消除了多欄位索引一個長期存在的限制。以前，如果您在 `(region, category, sale_date)` 上建立了索引，只有當查詢條件包含前導欄位 `region` 時，才能高效地使用該索引。

- **它是什麼：** 透過跳躍掃描，Postgres 可以智慧地「跳過」被省略的前綴欄位中的不同值。
- **為何更好：** 您的多欄位索引變得更加靈活。現在，即使不按 `region` 篩選，您也可以高效地按 `category` 和 `sale_date` 進行查詢，使現有索引在分析和報告方面功能更強大。

#### 4. 在 `RETURNING` 中存取 `OLD` 和 `NEW` 值

`RETURNING` 子句的功能得到了極大的增強。您現在可以在單個語句中同時存取更新前 (`OLD`) 和更新後 (`NEW`) 的值。這對於建立稽核日誌或處理複雜邏輯來說是一個巨大的進步，無需再使用觸發器或額外的查詢。

```sql
-- 更新價格並在一個查詢中同時查看新舊值
UPDATE products
SET price = price * 1.10
WHERE name = 'Widget'
RETURNING
    name,
    old.price AS old_price,
    new.price AS new_price;
```

---

### 更智慧、更安全的操作

PostgreSQL 18 還包含了一些能夠減輕維運負擔、幫助您建構更穩健系統的功能。

- **內建 OAuth 2.0 認證：** 這對企業用戶來說是一項重大利好。您現在可以將身份驗證委託給 Google、Auth0 或 Okta 等身份提供商。這集中管理了憑證，並允許應用程式使用存取權杖而不是密碼進行連線。
- **時間約束 (`WITHOUT OVERLAPS`)：** 您現在可以在 schema 層級強制執行基於時間的完整性。這能確保表格中的時間範圍不會錯誤地重疊——非常適用於排程系統、預訂系統或員工合約。它保證了甘特圖上的「時間條」在不應重疊時絕不重疊。
- **改進的 `EXPLAIN` 輸出：** 查詢最佳化變得更容易了。`EXPLAIN ANALYZE` 的輸出現在**預設包含緩衝區使用資訊**，幫助您即時發現以前容易忽略的 I/O 效能問題。

---

### 立即在 Zeabur 上部署 PostgreSQL 18

了解這些功能固然很好，但親身體驗更佳。我們很高興地宣布，**PostgreSQL 18 現已在 Zeabur 上線，可供部署。**

您只需一鍵即可啟動一個全新的、完全設定好的 PostgreSQL 18 服務，將從非同步 I/O 到原生 UUIDv7 的所有強大功能盡握手中。親身體驗這場速度與功能的革命吧。

[**立即部署 PostgreSQL 18**](https://zeabur.com/templates/B20CX0)
