欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > PostgreSQL實現(xiàn)批量插入、更新與合并操作的方法

PostgreSQL實現(xiàn)批量插入、更新與合并操作的方法

熱門標(biāo)簽:外呼調(diào)研系統(tǒng) 打電話智能電銷機器人授權(quán) 辦公外呼電話系統(tǒng) 重慶自動外呼系統(tǒng)定制 美容工作室地圖標(biāo)注 漯河外呼電話系統(tǒng) 地圖標(biāo)注和圖片名稱的區(qū)別 合肥公司外呼系統(tǒng)運營商 海豐有多少商家沒有地圖標(biāo)注

前言

就在 2019 年 1 月份微軟收購了 PostgreSQL 數(shù)據(jù)庫的初創(chuàng)公司 CitusData, 在云數(shù)據(jù)庫方面可以增強與 AWS 的竟?fàn)?。AWS 的 RDS 兩大開源數(shù)據(jù)庫就是 MySQL(Aurora 和 MariaDB 是它的變種) 和 PostgreSQL。

而 PostgreSQL 跳出了普通關(guān)系型數(shù)據(jù)庫的類型約束,它靈活的支持 JSON, JSONB, XML, 數(shù)組等類型。比如說字段類型可以是各種形式的數(shù)組,一維或多維。

create table t1(
 address varchar(5)[3],
 counter integer[3][3],
 schedule text[][]
)

上面只是認(rèn)識了一下 PostgreSQL 這一亮眼的特性,本篇重點不在如何定義操作數(shù)組類型的字段,而是對于普通的非數(shù)組字段類型如何用與數(shù)組相關(guān)的 unnest 關(guān)鍵字進(jìn)行記錄的批量插入,更新以及合并操作。

在正式使用介入 unnest 之前先熟悉一下 PostgreSQL 的 upsert(update insert) 操作。受其他數(shù)據(jù)庫的影響,總以后 PostgreSQL 也應(yīng)該支持 merge into 語句,而且竟然 PostgreSQL 官方也有文檔介紹 MERGE 有模有樣的,然而試了一下根本就不支持 merge into 操作。

普通的 insert upsert 操作

不過 PostgreSQL 有另一種 upsert 的語法,或稱之為 insert on conflict,也就是 PostgreSQL 加強版的 insert 語句。如下

INSERT INTO users (id, level)
VALUES (1, 0)
ON CONFLICT (id) DO UPDATE
SET level = users.level + 1;

即插入記錄時存在相同的主鍵可對原記錄的某些列進(jìn)行更新,否則插入該記錄。更詳細(xì)的 insert 語法請參考官方文檔 PostgreSQL INSERT。

注意到上面的 upsert 只是應(yīng)用于處理單條記錄,而本文將要討論到的是批量的處理。我們知道 insert 時可以同時插入多行記錄,那么這個  upsert 語法是否也能同時操作多行記錄呢?我們大膽假設(shè),小心求證,那就動手一試吧

create table users(
 id int primary key,
 level int
)

創(chuàng)建一個表 users, 然后插入一條記錄

INSERT INTO users (id, level) VALUES (1, 0)

查詢 select * from users 表的內(nèi)容如下

執(zhí)行批量的 insert

INSERT INTO users (id, level)
VALUES (1, 3), (2, 1)
ON CONFLICT (id) DO UPDATE
SET level = excluded.level;

理看看 users 表中的內(nèi)容

我們看到已存在行(id=1) 的 level 更新為新的值 3, 并且插入新行。

這里注意到我們用到一個關(guān)鍵字 excluded 用于引用 INSERT 語句中 VALUES 提供的值,相應(yīng)的表名 users 用于引用表中原有的值。

基于 unnest 的 upsert 操作

前面仍然是寫作此文的意外收獲,實際上想要總結(jié)的是 unnest 關(guān)鍵字在批量操作中的作用。下面來進(jìn)行演示

create table testunnest(
  id int primary key,
 col1 int,
 col2 varchar(50)
)

創(chuàng)建一個表并用 unnest 提供并行數(shù)組來進(jìn)行批量插入

insert into testunnest(id, col1, col2) 
 values (unnest(array[1,2]), unnest(array[30,40]), unnest(array['val1', 'val2']));

這時候表中的內(nèi)容為

從執(zhí)行效果來看,它與下面的 insert 語句是等效的

insert into testunnest(id, col1, col2) values
 (1, 30, 'val1')
 (2, 40, 'val2')

換成成 unnest(array[..]) 的形式有一種行轉(zhuǎn)列的行為。

用 unnest 加上 unsert 再執(zhí)行一次插入

insert into testunnest(id, col1, col2)
 values (unnest(array[2,3]), unnest(array[80,90]), unnest(array['valupdated', 'val3']))
 on conflict (id) do update
 set col1 = excluded.col1, col2 = excluded.col2

再查看表的內(nèi)容如下

 

unnest 與 JDBC 操作

insert into users values (?, ?) on conflict.... 的 SQL 語句的單條記錄或批量操作(addBatch(), executeBatch()) 就不多說了,主要看下用 JDBC 怎么對 unnest 進(jìn)行賦值操作。

PreparedStatement pstmt = conn.prepareStatement(
 "INSERT INTO testunnest(id, col1, col2) " +
  " VALUES (unnest(?), unnest(?), unnest(?))" +
  " ON CONFLICT (id) DO UPDATE" +
  " SET col1 = excluded.col1, col2 = excluded.col2"
);
 
pstmt.setArray(1, conn.createArrayOf("int", new Integer[]{2, 3}));
pstmt.setArray(2, conn.createArrayOf(JDBCType.INTEGER.getName(), new Integer[]{80, 90}));
pstmt.setArray(3, conn.createArrayOf("varchar", new String[]{"val1", "val2"}));
 
int update = pstmt.executeUpdate();
System.out.println(update); //影響的記錄數(shù)是 2

點位符要用 unnest(?),設(shè)置參數(shù)時要用 setArray(), 參數(shù)用 conn.createArrayOf(type, array) 來指定。需要指明數(shù)組中的元素類型,這么普通的 setInt(), setString() 是一個意思。

用不著轉(zhuǎn)換為 PostgreSQL 特定的 PreparedStatement 來操作,用 JDBC 通用的 PreparedStatement 接口就能支持對數(shù)組類型的賦值,難道是其他類型的數(shù)據(jù)庫也能支持類似的數(shù)組操作?

鏈接:

Upsert Records with PostgresSQL 9.5

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • 基于PostgreSQL和mysql數(shù)據(jù)類型對比兼容
  • 解決postgresql 數(shù)據(jù)庫 update更新慢的原因
  • 將MySQL數(shù)據(jù)庫移植為PostgreSQL
  • PostgreSQL使用MySQL外表的步驟詳解(mysql_fdw)
  • PostgreSQL使用MySQL外表的步驟詳解(mysql_fdw)
  • 實現(xiàn)MySQL + PostgreSQL批量插入更新insertOrUpdate

標(biāo)簽:烏海 株洲 錦州 來賓 珠海 晉城 蚌埠 衡陽

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PostgreSQL實現(xiàn)批量插入、更新與合并操作的方法》,本文關(guān)鍵詞  PostgreSQL,實現(xiàn),批量,插入,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PostgreSQL實現(xiàn)批量插入、更新與合并操作的方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于PostgreSQL實現(xiàn)批量插入、更新與合并操作的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    亚洲欧洲日韩综合一区二区| 成人一道本在线| 国产大学生av| 91高清视频免费看| 日韩一区在线看| 懂色av一区二区在线播放| 国产123在线| wwwwxxxx国产| 欧美一区永久视频免费观看| 亚洲国产精品天堂| 亚洲精品久久久久久| 欧美视频一区二| 亚洲激情男女视频| 日批视频免费看| 欧美日韩夫妻久久| 亚洲成人一区二区| 国产女人18毛片水真多18| 欧美美女视频在线观看| 亚洲成av人片在线观看| 超碰97在线资源站| 欧美电影精品一区二区| 麻豆精品在线播放| 性欧美精品男男| 久久毛片高清国产| 国产精品资源在线| 精品亚洲乱码一区二区| 成人欧美一区二区三区| 91在线视频官网| 欧美日韩激情一区二区| 亚洲成人av一区二区三区| 黄色短视频在线观看| 精品久久久影院| 国产一区二区精品久久| 人人澡人人澡人人看| 中文字幕欧美一区| av在线天堂网| 日韩欧美自拍偷拍| 狠狠色综合播放一区二区| a亚洲天堂av| 黄色片网站在线播放| 国产精品久久免费看| 成人精品gif动图一区| 日本韩国一区二区三区| 亚洲国产综合色| 亚洲乱码国产乱码精品精大量| 精品福利一二区| 国产成人午夜99999| 色综合天天综合网天天看片| 亚洲一区二区三区美女| aaaaa级少妇高潮大片免费看| 国产色爱av资源综合区| 亚洲视频你懂的| 在线观看一区二区三区四区| 精品久久久久久最新网址| 国产成人高清在线| 欧美日韩在线三级| 久久66热偷产精品| 91国在线观看| 精品在线免费视频| 91久久精品一区二区| 日韩黄色片在线观看| 精品视频第一页| 夜夜揉揉日日人人青青一国产精品| 中文在线永久免费观看| 国产精品色在线| 中文在线观看免费视频| 国产欧美精品一区二区三区四区 | 久久人人妻人人人人妻性色av| 久久久久久夜精品精品免费| av激情亚洲男人天堂| 精品剧情在线观看| 又黄又爽又色的视频| 2020日本不卡一区二区视频| 94色蜜桃网一区二区三区| 精品久久免费看| 无码人妻一区二区三区一| 国产欧美一区二区精品性色超碰| 中文字幕永久免费| 国产丝袜欧美中文另类| 久久人妻少妇嫩草av无码专区| 国产精品天天摸av网| 亚洲一区二区三区无码久久| 中文字幕+乱码+中文字幕一区| 国产大学生视频| 国产精品国产精品国产专区不蜜| jizz欧美性20| 亚洲精品一二三| 91香蕉视频污在线观看| 日日摸夜夜添夜夜添亚洲女人| 日本伦理一区二区| 国产盗摄女厕一区二区三区| 日韩视频免费直播| 无码国产精品久久一区免费| 欧美高清在线精品一区| 97人妻天天摸天天爽天天| 亚洲制服丝袜一区| 久久国产精品国语对白| 成人免费视频app| 日韩免费高清av| 欧美老女人bb| 中文字幕一区二区日韩精品绯色| 国产毛片久久久久久久| 亚洲国产精品综合小说图片区| 欧美色图亚洲视频| 国产米奇在线777精品观看| 日韩一区国产二区欧美三区| 中文字幕在线观看视频www| 亚洲同性同志一二三专区| 大桥未久av一区二区三区中文| 日韩欧美在线影院| 亚洲美女高潮久久久| 亚洲激情中文1区| 色综合中文字幕国产 | 久久精品视频免费| 超碰97人人干| 奇米888四色在线精品| 欧美日韩电影一区| 免费人成视频在线播放| 亚洲色图在线看| 国产一区二区三区在线视频观看| 国产一区二区三区蝌蚪| 久久午夜色播影院免费高清| 性高潮久久久久久久| 蜜臀av性久久久久蜜臀av麻豆| 91精品国产高清一区二区三区蜜臀| 性一交一黄一片| 夜色激情一区二区| 欧美性受xxxx| 影音先锋资源av| 国产一区二区导航在线播放| 精品一区二区三区免费| 欧美精品日韩一区| 91欧美一区二区| 国产盗摄一区二区三区在线| 国产一区二区不卡| 久久久国产综合精品女国产盗摄| 中日韩精品一区二区三区 | 国产一区二区成人久久免费影院| 久久亚洲二区三区| 精品人体无码一区二区三区| 国产综合色精品一区二区三区| 久久人人97超碰com| 欧美日韩生活片| 成人综合在线网站| 亚洲私人黄色宅男| 欧美日韩综合在线| 国产性生活毛片| 日韩国产精品91| 精品福利视频一区二区三区| 久久久视频6r| 国产精品白丝av| 最新日韩av在线| 欧美国产日韩在线观看| 国产精品久久久久无码av色戒| 久久精品国产99| 国产日韩欧美高清| 日本黄色小说视频| 中国老熟女重囗味hdxx| 香蕉乱码成人久久天堂爱免费| 欧美高清dvd| 国产人妻大战黑人20p| 国产伦精品一区二区三区视频青涩| 国产日韩精品视频一区| 一本色道久久综合亚洲精品按摩| 91在线国内视频| 日韩av一级电影| 久久精品男人天堂av| 色哟哟国产精品免费观看| 久久国产劲爆∧v内射| 久久精品国产77777蜜臀| 国产精品高潮呻吟| 欧美日本视频在线| 国产激情av在线| 91亚洲男人天堂| 日本成人在线看| 国产精品你懂的在线| 欧美老人xxxx18| 波多野结衣一二三四区| 99精品久久免费看蜜臀剧情介绍| 婷婷综合另类小说色区| 久久精品亚洲国产奇米99| 在线免费观看日韩欧美| 欧美特黄一区二区三区| 粗大黑人巨茎大战欧美成人| 亚洲电影激情视频网站| 国产亚洲美州欧州综合国| 欧美日韩一级片在线观看| 国精产品一区二区三区| 91蝌蚪porny成人天涯| 美国av一区二区| 18欧美乱大交hd1984| 日韩一区二区三区在线| 天堂网avav| av网站有哪些| av影院午夜一区| 久久er精品视频| 亚洲专区一二三| 中文字幕二三区不卡| 欧美一区二区在线不卡| 中文字幕亚洲欧美日韩|