欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PostgreSQL生成列實(shí)現(xiàn)過(guò)程介紹

 更新時(shí)間:2023年01月12日 10:13:20   作者:夢(mèng)想畫(huà)家  
PostgreSQL 12 增加新的特性——生成列(Generated Columns),也就是計(jì)算列。在之前版本也可以實(shí)現(xiàn),但需要定義函數(shù)和觸發(fā)器,利用該功能可以更容易使用并可以提升性能。生成列是給表指定計(jì)算列,其數(shù)據(jù)可以根據(jù)其他列數(shù)據(jù)自動(dòng)生成,當(dāng)原數(shù)據(jù)更新時(shí)其自動(dòng)更新

PostgreSQL中生成列是從其他列計(jì)算而來(lái)的特殊列。生成列與普通列不同,不是固定的值,而是又引用表中其他列的表達(dá)式?jīng)Q定的。生成列在SQL標(biāo)準(zhǔn)(ISO/IEC 9075)中引入,被主流RDBMS支持,PostgreSQL12開(kāi)始支持生成列。

示例

下面首先創(chuàng)建一張表,用于演示PostgreSQL生成列:

CREATE TABLE Students (
  Id INTEGER PRIMARY KEY,
  FirstName VARCHAR(50),
  LastName VARCHAR(50),
  FullName VARCHAR(101) GENERATED ALWAYS AS (FirstName || ' ' || LastName) STORED
);

上面示例中最后一列是生成列,PostgreSQL生成列在定義中必須有GENERATED ALWAYS(通常其他關(guān)系型數(shù)據(jù)庫(kù)為可選)。另外生成列結(jié)尾必須有STORED。這指定了生成列需要被存儲(chǔ)(相對(duì)于virtual,下面有解釋?zhuān)?,其他關(guān)系型數(shù)據(jù)庫(kù)這通常也是可選的(默認(rèn)值為virtual)。

生成列的語(yǔ)法如下:

<column_name> <datatype> GENERATED ALWAYS AS(expression) [STORED|VIRTUAL]

在GENERATED ALWAYS AS (expression) Stored子句中,使用現(xiàn)有的列指定生成列表達(dá)式,為生成列計(jì)算值。

現(xiàn)在我們已經(jīng)創(chuàng)建了帶生成列的表,下面插入數(shù)據(jù):

INSERT INTO Students (Id, FirstName, LastName) 
VALUES (0001, 'Lucy', 'Green');
INSERT INTO Students (Id, FirstName, LastName) 
VALUES (0002, 'Aziz', 'Ahmad');
INSERT INTO Students (Id, FirstName, LastName) 
VALUES (0003, 'Zohan', 'Ahuja');
INSERT INTO Students (Id, FirstName, LastName) 
VALUES (0004, 'Homer', 'Presley');
INSERT INTO Students (Id, FirstName, LastName) 
VALUES (0005, 'Sally', 'Smith');

注意,我們插入數(shù)據(jù)不包括生成列,現(xiàn)在查看數(shù)據(jù):

SELECT * FROM Students;

結(jié)果為:

 id | firstname | lastname |   fullname    
----+-----------+----------+---------------
  1 | Lucy      | Green    | Lucy Green
  2 | Aziz      | Ahmad    | Aziz Ahmad
  3 | Zohan     | Ahuja    | Zohan Ahuja
  4 | Homer     | Presley  | Homer Presley
  5 | Sally     | Smith    | Sally Smith

我們看到生成列包含F(xiàn)irstName和LastName兩列值的連接串。生成列表達(dá)式不僅為字符串連接,舉例:一些場(chǎng)景中需要基于原價(jià)和折扣計(jì)算實(shí)際價(jià)格。

Stored vs Virtual

生成列可以為 stored 或 virtual. 兩者的差異為:

  • STORED (aka 持久化): 列值被存儲(chǔ)在表里. 當(dāng)寫(xiě)(插入或更新)時(shí)存儲(chǔ)列被重新計(jì)算,并像普通列一樣占用存儲(chǔ)空間。
  • VIRTUAL: 虛擬生成列不占用存儲(chǔ)空間,僅當(dāng)讀時(shí)才計(jì)算。PostgreSQL (14) 僅支持stored 生成列。

限制說(shuō)明

生成的列有許多限制。例如,生成表達(dá)式不能引用另一個(gè)生成的列。此外,它們只能使用不可變函數(shù),不能以任何方式使用子查詢(xún)或引用當(dāng)前行以外的任何內(nèi)容。具體包括:

  • 生成表達(dá)式只能使用不可變函數(shù),不能以任何方式使用子查詢(xún)或引用當(dāng)前行以外的任何內(nèi)容。
  • 生成表達(dá)式不能引用另一個(gè)生成的列。
  • 生成表達(dá)式不能引用系統(tǒng)列(表類(lèi)除外)。
  • 生成的列不能有列默認(rèn)值或標(biāo)識(shí)定義。
  • 生成的列不能是分區(qū)鍵的一部分。
  • 外部表可以生成列

到此這篇關(guān)于PostgreSQL生成列實(shí)現(xiàn)過(guò)程介紹的文章就介紹到這了,更多相關(guān)PostgreSQL生成列內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PostgreSQL 流復(fù)制異步轉(zhuǎn)同步的操作

    PostgreSQL 流復(fù)制異步轉(zhuǎn)同步的操作

    這篇文章主要介紹了PostgreSQL 流復(fù)制異步轉(zhuǎn)同步的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • postgresql中的時(shí)間戳格式化

    postgresql中的時(shí)間戳格式化

    這篇文章主要介紹了postgresql中的時(shí)間戳格式化問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • shell腳本操作postgresql的方法

    shell腳本操作postgresql的方法

    PostgreSQL支持大部分的SQL標(biāo)準(zhǔn)并且提供了很多其他現(xiàn)代特性,如復(fù)雜查詢(xún)、外鍵、觸發(fā)器、視圖、事務(wù)完整性、多版本并發(fā)控制等這篇文章主要介紹了shell腳本操作postgresql,需要的朋友可以參考下
    2022-12-12
  • 15個(gè)postgresql數(shù)據(jù)庫(kù)實(shí)用命令分享

    15個(gè)postgresql數(shù)據(jù)庫(kù)實(shí)用命令分享

    這篇文章主要介紹了15個(gè)實(shí)用的postgresql數(shù)據(jù)庫(kù)命令分享,都是一些技巧性的postgresql命令,需要的朋友可以參考下
    2014-07-07
  • PostgreSQL LIKE 大小寫(xiě)實(shí)例

    PostgreSQL LIKE 大小寫(xiě)實(shí)例

    這篇文章主要介紹了PostgreSQL LIKE 大小寫(xiě)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。 一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • PostgreSQL中的COMMENT用法說(shuō)明

    PostgreSQL中的COMMENT用法說(shuō)明

    這篇文章主要介紹了PostgreSQL中的COMMENT用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • Postgresql限制用戶(hù)登錄錯(cuò)誤次數(shù)的實(shí)例代碼

    Postgresql限制用戶(hù)登錄錯(cuò)誤次數(shù)的實(shí)例代碼

    這篇文章主要介紹了Postgresql限制用戶(hù)登錄錯(cuò)誤次數(shù)的實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • postgresql 中round函數(shù)的用法說(shuō)明

    postgresql 中round函數(shù)的用法說(shuō)明

    這篇文章主要介紹了postgresql 中round函數(shù)的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • PostgreSQL數(shù)據(jù)類(lèi)型格式化函數(shù)操作

    PostgreSQL數(shù)據(jù)類(lèi)型格式化函數(shù)操作

    這篇文章主要介紹了PostgreSQL數(shù)據(jù)類(lèi)型格式化函數(shù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 對(duì)Postgresql中的json和array使用介紹

    對(duì)Postgresql中的json和array使用介紹

    這篇文章主要介紹了對(duì)Postgresql中的json和array使用介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01

最新評(píng)論