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

PostgreSQL?數(shù)組類型操作使用及特點詳解

 更新時間:2022年10月28日 14:06:21   作者:HelloWorld開發(fā)者社區(qū)  
這篇文章主要為大家介紹了PostgreSQL?數(shù)組類型操作使用及特點詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

PostgreSQL 數(shù)組類型使用詳解

可能大家對 PostgreSQL這個關(guān)系型數(shù)據(jù)庫不太熟悉,因為大部分人最熟悉的,公司用的最多的是 MySQL

我們先對PostgreSQL數(shù)據(jù)庫 (下面簡稱 PG)簡單的介紹一下,以后有機會,再單獨寫一篇專門介紹pgSql的文章

The World's Most Advanced Open Source Relational Database

這是PG官網(wǎng)對自己的介紹,是的,你沒有看錯,“世界上最先進的開源關(guān)系型數(shù)據(jù)庫”。一段嚴重違反我國廣告法的話,上一個敢那么叫囂的技術(shù)是PHP,“世界上最好的語言”,然后這句話就成了碼農(nóng)界最廣為人知的梗,存在于各種笑料中。

不過PG并沒有因為這樣明目張膽地自吹自擂而遭到什么抨擊或調(diào)侃,事實上,無論在務實的碼農(nóng)界,抑或是講究章法的學術(shù)界,人們對PG都是贊許有加,PG是完全當?shù)闷疬@句話的。

下面列出一些PostgreSQL的特點

  • PostgreSQL是一種功能非常齊全關(guān)系型數(shù)據(jù)庫,由加州大學計算機系開發(fā)
  • PostgreSQL開源協(xié)議是類BSD的自有協(xié)議 ,這是一種非常友好的協(xié)議,不論是商用還是自用,或者修改代碼再起個名拿來賣錢,都沒有任何風險
  • PostgreSQL支持的數(shù)據(jù)類型非常多,除了常用的,還有枚舉類型, 幾何類型,UUID類型  , json類型 , 數(shù)組類型 等,其中數(shù)組類型 也是本篇文章的目的,介紹其中數(shù)組類型的使用
  • PostgreSQL 成立時對標的數(shù)據(jù)庫是 Oracle數(shù)據(jù)庫,所有 PostgreSQL 的功能和性能是非常強的。
  • PostgreSQL 對復雜SQL的執(zhí)行,要好于MySql
  • ..................

還有很多的特性,這里只簡單的寫幾個,上面的幾個特點也是我非常在意的,之所 www.helloworld.net 此次改版把Mysql換成了PostgreSQL ,就是有這些原因。

之前很多人問過,hellworld開發(fā)者社區(qū) 改版用到了哪些技術(shù)棧,其中之一,就是把 Mysql 換成了 PostgreSQL

在改版的過程中,所有的表全部重新設計,這對于后端來說,是一個極其需要勇氣的決定,好在我們堅持下來了

在改的過程中,其中有這樣一個場景:

一篇博客,有多個標簽 ,比如 一個博客,有多線程, 并發(fā) , 線程池 這三個標簽

對于這樣的需求,我們可以分析一下

  • 一篇博客,有多個標簽
  • 一個標簽,也可有對應多篇博客

這樣就形成了 多對多 的關(guān)系,建表的話,就會有一張關(guān)聯(lián)表,大部分會想到這樣建表

博客表: blog

標簽表: tag

標簽博客表: tag_blog

其中各表的字段,如下(簡單起見,只列出最少的列):

blog 表:

  • id 數(shù)字類型,博客的 id, 自增長的主鍵
  • title 字符串類型,博客的標題

tag表:

  • id 數(shù)字類型, 標簽的 id , 自增長的主鍵
  • name 字符串類型,標簽的名字

tag_blog

  • id 數(shù)字類型, 自增長的主鍵
  • tag_id 標簽 id (對應 tag 表中的 id )
  • blog_id 博客id (對應 blog 表中的 id )

上面這個博客標簽需求,需要 3 張表,我們知道,PostgreSQL 的列的類型是支持數(shù)組類型

我們是不是可以優(yōu)化一下上面的需求,把 3 張表變成 1 張表

只保留一張 blog 表,在 blog 表中增加一列 tags , 類似就是 text[ ]

新的博客表字段如下:

blog表:

  • id 數(shù)字類型(bigint),博客的 id, 自增長的主鍵
  • title 字符串類型(text ),博客的標題
  • tags 字符串數(shù)組類型(text[ ] )

為了方便大家測試,建表SQL 如下

CREATE TABLE IF NOT EXISTS public.blog
(
    id bigint NOT NULL DEFAULT nextval('blog_id_seq'::regclass),
    title text COLLATE pg_catalog."default",
    tags text[] COLLATE pg_catalog."default",
    CONSTRAINT blog_pkey PRIMARY KEY (id)
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.blog
    OWNER to postgres;

下面我們針對 tags 字段作一些基本操作

數(shù)組類型的基本操作

1 查詢

現(xiàn)在表中沒有數(shù)據(jù),我們查詢一下看看

select * from blog

結(jié)果如下:

2 插入數(shù)據(jù)

插入一條記錄,標題是 www.helloworld.net , 對應的標簽有3個,分別是 helloworld , 技術(shù) , 社區(qū)

insert into blog (title,tags) values('www.helloworld.net','{"helloworld","技術(shù)","社區(qū)"}')

再次查詢

select * from blog

結(jié)果如下:

可以看到,已經(jīng)有了一條數(shù)據(jù)了,tags 數(shù)組里面有3個元素,分別是 helloworld , 技術(shù) , 社區(qū)

我們再次插入兩條數(shù)據(jù),方便我們測試

insert into blog (title,tags) values('www.juejin.im','{"掘金","技術(shù)","開發(fā)者"}');
insert into blog (title,tags) values('www.oschina.net','{"開源中國","oschina","開源"}');

查詢結(jié)果如下:

3 條件查詢

3.1 查詢標簽中有 技術(shù)標簽的博客

語法 select * from blog where 'xx' = any(數(shù)組字段) 

sql 語句如下

select * from blog where '技術(shù)'= any(tags)

查詢結(jié)果如下:

3.2 查詢標簽中有 helloworld標簽或者有 開源中國標簽的博客

sql語句如下:

select * from blog where 'helloworld'= any(tags) or '開源中國' = any(tags)

結(jié)果如下:

4 更新

4.1 更新標簽的名稱

我們將 id = 1 的記錄的 tags 數(shù)組中, 社區(qū)改成開發(fā)者社區(qū)

注意:pg中數(shù)組類型,索引是從 1 開始,我們將 id = 1 的記錄,社區(qū)元素索引為3,修改語法為: update 表名 set 字段[index] = 'xx' where id=1 

sql如下:

update blog set tags[3] = '開發(fā)者社區(qū)' where id=1 

再次查詢,結(jié)果如下:

可以發(fā)現(xiàn),通過 tags[3] = '開發(fā)者社區(qū)' ,成功的把 社區(qū)修改成了 開發(fā)者社區(qū)

4.2 添加一個標簽

我們把 id=1 的記錄,標簽再增加一個 程序員標簽

可以使用PostgreSQL的 array_append 函數(shù)

使用方法如下:

sql寫法如下:

update blog set tags = array_append(tags, '程序員'::text) where id=1

再次查詢結(jié)果如下:

5 刪除

我們刪除標簽

把 id= 3 的記錄中的標簽,刪除開源

sql如下:

update blog set tags = array_remove(tags, '開源'::text) where id=3

執(zhí)行后,再次查詢,如下:

總結(jié)

以上就是關(guān)于 PostgreSQL 的數(shù)組類型的常見的用法,至于其它的用法,大家可以看一下官方文檔,再結(jié)合本例的SQL寫法

應該很容易就能掌握

以上的需求,其實實際應用中并不是適合用數(shù)組類型解決,數(shù)組適合的場景,操作,交互不多,不太重要,可以用

helloworld開發(fā)者社區(qū)在改版的過程中,數(shù)據(jù)庫雖然換成了 PostgreSQL ,但是博客的標簽這塊需求,并沒有用這種方式

此例只是方便說明用法,具體實際中怎么用,大家還需要結(jié)合自己的業(yè)務需求,靈活選擇

以上就是PostgreSQL 數(shù)組類型操作使用及特點詳解的詳細內(nèi)容,更多關(guān)于PostgreSQL 數(shù)組類型的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • PostgreSQL HOT與PHOT有哪些區(qū)別

    PostgreSQL HOT與PHOT有哪些區(qū)別

    這篇文章主要介紹了PostgreSQL8.3版本開始就引入的HOT機制與PHOT使用區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-09-09
  • psql除法保留小數(shù),實現(xiàn)向上取整和向下取整操作

    psql除法保留小數(shù),實現(xiàn)向上取整和向下取整操作

    這篇文章主要介紹了psql除法保留小數(shù),實現(xiàn)向上取整和向下取整操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 修改一行代碼提升 Postgres 性能 100 倍

    修改一行代碼提升 Postgres 性能 100 倍

    在一個(差)的PostgreSQL 查詢中只要一個小小到改動(ANY(ARRAY[...])to ANY(VALUES(...)))就能把查詢時間從20s縮減到0.2s
    2013-09-09
  • PostgreSQL Sequence序列的使用詳解

    PostgreSQL Sequence序列的使用詳解

    這篇文章主要介紹了PostgreSQL Sequence序列的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 在postgresql中結(jié)束掉正在執(zhí)行的SQL語句操作

    在postgresql中結(jié)束掉正在執(zhí)行的SQL語句操作

    這篇文章主要介紹了在postgresql中結(jié)束掉正在執(zhí)行的SQL語句操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • PostgreSQL排查連接鎖問題的常用SQL語句

    PostgreSQL排查連接鎖問題的常用SQL語句

    正常情況下,PostgreSQL只要連上了就能愉快地使用了,但是在一些特別的場景,如壓測或者某些不可描述的異常,會出現(xiàn)數(shù)據(jù)庫連接異常的情況,比如連接數(shù)占滿了,所以本文給大家介紹了PostgreSQL排查連接鎖問題的常用SQL語句,需要的朋友可以參考下
    2024-04-04
  • PostgreSQL存儲過程循環(huán)調(diào)用方式

    PostgreSQL存儲過程循環(huán)調(diào)用方式

    這篇文章主要介紹了PostgreSQL存儲過程循環(huán)調(diào)用方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL設置主鍵自增的方法詳解

    PostgreSQL設置主鍵自增的方法詳解

    在使用Mysql時,創(chuàng)建表結(jié)構(gòu)時可以通過關(guān)鍵字auto_increment來指定主鍵是否自增,但在Postgresql數(shù)據(jù)庫中,雖然可以實現(xiàn)字段的自增,但從本質(zhì)上來說卻并不支持Mysql那樣的自增,所以本文給大家介紹了PostgreSQL如何設置主鍵自增,需要的朋友可以參考下
    2024-08-08
  • SQLite教程(七):數(shù)據(jù)類型詳解

    SQLite教程(七):數(shù)據(jù)類型詳解

    這篇文章主要介紹了SQLite教程(七):數(shù)據(jù)類型詳解,本文講解了存儲種類和數(shù)據(jù)類型、類型親緣性、比較表達式、操作符等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • PostgreSQL 實現(xiàn)sql放入文件批量執(zhí)行

    PostgreSQL 實現(xiàn)sql放入文件批量執(zhí)行

    這篇文章主要介紹了PostgreSQL 實現(xiàn)sql放入文件批量執(zhí)行,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論