PostgreSQL 18新特性之虛擬生成列

PostgreSQL 12 提供了生成列(GENERATED ALWAYS AS STORED)功能,但是只能支持存儲型的生成列,需要占用存儲空間,更新成本高。

為此,PostgreSQL 18 即將引入一個新的增強:虛擬生成列。這種類型的字段值不需要存儲,而是在讀取數據時進行計算。虛擬生成列類似于視圖,而存儲生成列更像物化視圖。

我們可以通過在CREATE TABLE或者ALTER TABLE語句中指定字段的GENERATED ALWAYS AS約束來創建一個生成列:

column_name data_type 
GENERATED ALWAYS AS ( generation_expr ) [ STORED | VIRTUAL ]

其中,GENERATED ALWAYS AS表示創建生成列;generation_expr 指定了生成列的表達式;STORED表示存儲生成列,VIRTUAL代表虛擬生成列(默認值)。

例如以下語句:

CREATE TABLE t_circle(id INTEGER PRIMARY KEY,x NUMERIC NOT NULL,y NUMERIC NOT NULL,radius NUMERIC NOT NULL,perimeter NUMERIC GENERATED ALWAYS AS (2 * 3.14159265 * radius) VIRTUAL
);ALTER TABLE t_circle ADD area NUMERIC GENERATED ALWAYS AS (3.14159265 * radius * radius) VIRTUAL;

首先,CREATE TABLE語句為表 t_circle 定義了一個生成列 perimeter,表示圓的周長。然后,使用ALTER TABLE語句增加一個生成列 area ,表示圓的面積。

接下來我們插入一些數據:

INSERT INTO t_circle VALUES (1, 2, 2, 5);
SELECT * FROM t_circle;
id|x|y|radius|perimeter  |area       |
--|-|-|------|-----------|-----------|1|2|2|     5|31.41592650|78.53981625|INSERT INTO t_circle(id, x, y, radius ,perimeter) VALUES (2, 0, 0, 1, 6.28318530);
SQL Error [42601]: ERROR: cannot insert into column "perimeter"Detail: Column "perimeter" is a generated column.

第一個插入語句沒有指定生成列的值,由數據庫自動計算;第二個插入語句為 perimeter 提供了數據,執行失敗;INSERTUPDATE語句不能為生成列指定值。

虛擬生成列具有查詢時實時計算,不占用存儲空間等優點;但是目前 PostgreSQL 18 提供的虛擬生成列還存在一些限制:

  • 不支持索引,包括唯一約束;
  • 不支持擴展統計信息;
  • 不支持外鍵約束;
  • 不支持非空約束(可以使用檢查約束);
  • 不支持 ALTER TABLE / DROP EXPRESSION 語句;
  • 不支持域類型;
  • 不支持邏輯復制。

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

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

相關文章

GitHub上傳項目

總結(有基礎的話直接執行這幾步,就不需要再往下看了): git init 修改git的config文件:添加:[user]:name你的github用戶名 email你注冊github的用戶名 git branch -m master main git remote add origin 你的URL gi…

常見排序算法深度評測:從原理到10萬級數據實戰

常見排序算法深度評測:從原理到10萬級數據實戰 摘要 本文系統解析冒泡排序、選擇排序、插入排序、希爾排序、歸并排序、快速排序、堆排序和基數排序8種經典算法,通過C語言實現10萬隨機數排序并統計耗時。測試顯示:快速排序綜合性能最優&…

動態規劃填表技巧:固定最后一個數 vs 固定倒數第二個數

在動態規劃中,填表時固定最后一個數還是倒數第二個數,取決于問題的定義和狀態轉移方程的設計。 目錄 1. 固定最后一個數 適用場景 特點 示例 2. 固定倒數第二個數 適用場景 特點 示例 3. 固定最后一個數與倒數第二個數的對比 4. 總結 1. 固定最…

【C】鏈式二叉樹算法題2

目錄 1 另一棵樹的子樹 1) 題目描述 示例1: 示例2: 2) 算法解析 3) 代碼 2 二叉樹的遍歷 1) 問題描述 2) 算法解析 3) 代碼 3 總結 1 另一棵樹的子樹 leetcode鏈接…

配置Hadoop集群

Hadoop的運行模式 本地運行:在一臺單機上運行,沒有分布式文件系統,直接讀寫本地操作系統的文件系統。特點:不對配置文件進行修改,Hadoop 不會啟動 偽分布式:也是在一臺單機上運行,但用不同的 …

python辦公自動化--數據可視化(pandas+matplotlib)--生成條形圖和餅狀圖

前言 前幾天我們學習了pandas讀取數據,還學習了如何用patplotlib繪制柱狀圖和折線圖。 今天我們繼續學習,如何繪制條形圖和餅狀圖。 一、課程回顧-pandas讀取數據 1.示例數據文件 這里我們用到的依舊是d盤底下的這個excel工作簿,這個工作簿…

基于大模型的結節性甲狀腺腫診療全流程預測與方案研究報告

目錄 一、引言 1.1 研究背景與目的 1.2 研究意義 1.3 國內外研究現狀 二、大模型預測原理與方法 2.1 相關大模型概述 2.2 數據收集與預處理 2.3 模型訓練與驗證 三、術前預測與評估 3.1 結節性質預測 3.1.1 良惡性判斷 3.1.2 與傳統診斷方法對比 3.2 手術風險預測…

不同開發語言對字符串的操作

一、字符串的訪問 Objective-C: 使用 characterAtIndex: 方法訪問字符。 NSString *str "Hello, World!"; unichar character [str characterAtIndex:0]; // 訪問第一個字符 H NSLog("%C", character); // 輸出: H NSString 內部存儲的是 UTF-16 編…

Java開發者如何接入并使用DeepSeek

目錄 一、準備工作 二、添加DeepSeek SDK依賴 三、初始化DeepSeek客戶端 四、數據上傳與查詢 五、數據處理與分析 六、實際應用案例 七、總結 【博主推薦】:最近發現了一個超棒的人工智能學習網站,內容通俗易懂,風格風趣幽默&#xff…

S19文件格式詳解:汽車ECU軟件升級中的核心鏡像格式

文章目錄 引言一、S19文件格式的起源與概述二、S19文件的核心結構三、S19在汽車ECU升級中的應用場景四、S19與其他格式的對比五、S19文件實例解析六、工具鏈支持與安全考量七、未來趨勢與挑戰結語引言 在汽車電子控制單元(ECU)的軟件升級過程中,S19文件(也稱為Motorola S-…

CTF雜項——[suctf 2019]簽到題

base64轉圖片 可以直接用隨波逐流 得到flag SUCTF{ffffffffT4nk}

【Python】整數除法不正確,少1的問題,以及有關浮點數轉換的精度問題

1. 問題 今天在做leetcode 不同路徑 的時候發現了個問題 對于m53 n4class Solution:def uniquePaths(self, m: int, n: int) -> int:rlt 1for i in range(0, m-1):rlt * (m n - 2 - i)for i in range(0, m-1):rlt / (i 1)return int(rlt)為什么這個結果是 26234class S…

AI無代碼平臺

以下是目前支持快速開發產品的高生產力免費AI無代碼平臺推薦,按功能和適用場景分類: 一、全棧應用開發類 Bolt.DIY DeepSeek-R1 無需編寫代碼即可開發全棧應用,提供免費API和無速率限制,支持AI編碼助手與自動化流程 。 優勢&…

Gini系數的應用 - 指標波動貢獻分析

基尼系數的定義 基尼系數是衡量數據分布不均衡程度的指標,取值范圍在0到1之間: 0 表示完全均衡(所有值相等)。1 表示完全不均衡(所有值集中在一個點)。 基尼系數的計算公式 假設有 n n n 個數據點&…

第一節: 網絡基礎與參考模型

深入理解OSI七層模型與TCP/IP四層模型:網絡工程師的入門指南 在網絡通信的世界中,OSI七層模型和TCP/IP四層模型是理解網絡架構的基礎。無論是配置路由器、排查網絡故障,還是設計復雜的網絡系統,掌握這些模型的分層結構及其功能都是必不可少的。本文將從新手角度出發,深入…

HTTP拾技雜談

HTTP拾技雜談 簡單聊聊HTTP中的那些東西 文章目錄 HTTP拾技雜談前言HTTP協議1.請求從客戶端到服務器端的4個步驟一般客戶端請求如下:服務端響應如下 2.Keep-AliveHTTP方法Cookie 總結 前言 超文本傳輸協議(Hypertext Transfer Protocol ,HT…

用Deepseek寫一個五子棋微信小程序

在當今快節奏的生活中,休閑小游戲成為了許多人放松心情的好選擇。五子棋作為一款經典的策略游戲,不僅規則簡單,還能鍛煉思維。最近,我借助 DeepSeek 的幫助,開發了一款五子棋微信小程序。在這篇文章中,我將…

自然語言處理:最大期望值算法

介紹 大家好,博主又來給大家分享知識了,今天給大家分享的內容是自然語言處理中的最大期望值算法。那么什么是最大期望值算法呢? 最大期望值算法,英文簡稱為EM算法,它的核心思想非常巧妙。它把求解模型參數的過程分成…

【從零開始學習計算機科學】計算機體系結構(一)計算機體系結構、指令、指令集(ISA)與量化評估

【從零開始學習計算機科學】計算機體系結構(一)計算機體系結構、指令、指令集(ISA)與量化評估 概論計算機體系結構簡介計算機的分類并行體系結構指令集體系結構(ISA)分類存儲器尋址尋址模式操作數大小指令ISA的編碼程序的優化計算機體系結構量化評估存儲器體系結構概論 …

Electron使用WebAssembly實現CRC-32 常用標準校驗

Electron使用WebAssembly實現CRC-32 常用標準校驗 將C/C語言代碼,經由WebAssembly編譯為庫函數,可以在JS語言環境進行調用。這里介紹在Electron工具環境使用WebAssembly調用CRC-32 常用標準格式校驗的方式。 CRC-32 常用標準校驗函數WebAssembly源文件…