婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

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

PostgreSQL實現批量插入、更新與合并操作的方法

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

前言

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

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

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

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

在正式使用介入 unnest 之前先熟悉一下 PostgreSQL 的 upsert(update insert) 操作。受其他數據庫的影響,總以后 PostgreSQL 也應該支持 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;

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

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

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

創建一個表 users, 然后插入一條記錄

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

查詢 select * from users 表的內容如下

執行批量的 insert

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

理看看 users 表中的內容

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

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

基于 unnest 的 upsert 操作

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

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

創建一個表并用 unnest 提供并行數組來進行批量插入

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

這時候表中的內容為

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

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

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

用 unnest 加上 unsert 再執行一次插入

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

再查看表的內容如下

 

unnest 與 JDBC 操作

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

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); //影響的記錄數是 2

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

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

鏈接:

Upsert Records with PostgresSQL 9.5

總結

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

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

標簽:烏海 株洲 錦州 來賓 珠海 晉城 蚌埠 衡陽

巨人網絡通訊聲明:本文標題《PostgreSQL實現批量插入、更新與合并操作的方法》,本文關鍵詞  PostgreSQL,實現,批量,插入,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PostgreSQL實現批量插入、更新與合并操作的方法》相關的同類信息!
  • 本頁收集關于PostgreSQL實現批量插入、更新與合并操作的方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美一区二区三区影视| 亚洲成人av免费| 91麻豆精品一区二区三区| 国产精品一卡二| 国产成人午夜精品5599| 国产亚洲午夜高清国产拍精品 | 97精品国产露脸对白| 99re亚洲国产精品| 欧美精品日韩一区| 久久精品视频网| 亚洲已满18点击进入久久| 久久一区二区三区国产精品| 国产精品久久综合| 亚洲成av人片一区二区梦乃| 国产欧美精品一区aⅴ影院 | 日韩中文字幕91| 蜜桃av一区二区| 国产欧美日本一区二区三区| 亚洲欧美国产高清| 蜜桃免费网站一区二区三区| 国产精品18久久久久久vr| 不卡一区在线观看| 欧美一区二区三区免费视频| 欧美视频日韩视频在线观看| 久久精品国产**网站演员| 成熟亚洲日本毛茸茸凸凹| 欧美男同性恋视频网站| 精品国产a毛片| 午夜伦欧美伦电影理论片| 成人综合婷婷国产精品久久蜜臀| 日韩一区二区在线看| 国产精品欧美一级免费| 久久国产福利国产秒拍| 91精品国产综合久久福利| 理论电影国产精品| 日本一区免费视频| 日韩精品影音先锋| 久久久久9999亚洲精品| 精品久久久三级丝袜| 日日夜夜免费精品| 在线精品亚洲一区二区不卡| 国产午夜亚洲精品理论片色戒| 亚欧色一区w666天堂| 欧美视频中文一区二区三区在线观看| 亚洲精品一区二区三区福利 | 麻豆精品一二三| 国产69精品久久久久777| 日本道精品一区二区三区 | 国产成人综合自拍| 国产麻豆精品在线| 日韩一级黄色片| 美女视频黄频大全不卡视频在线播放| 欧美日韩在线免费视频| 久久精品国产亚洲高清剧情介绍| 一区二区三区不卡视频在线观看| 亚洲综合视频在线观看| 91免费小视频| 一区二区三区在线观看国产 | 亚洲图片欧美综合| 99国内精品久久| 中文字幕在线不卡国产视频| 国产成人亚洲综合a∨猫咪| 国产日韩亚洲欧美综合| 国产精品996| 久久综合999| 粉嫩aⅴ一区二区三区四区| 国产欧美日韩三区| 日本福利一区二区| 亚洲精品视频在线观看网站| 91麻豆免费看| 视频一区二区不卡| 久久久久久9999| 波多野结衣中文字幕一区| 一区二区三区在线影院| 在线一区二区观看| 亚洲成人777| 精品久久久久久久久久久久久久久久久| 久久综合狠狠综合久久激情 | 欧美不卡123| 国产酒店精品激情| 亚洲欧美综合网| 91精品福利视频| 午夜精品福利在线| 国产农村妇女精品| 在线视频国内自拍亚洲视频| 欧美电影免费观看高清完整版在线观看| 久久亚洲精品小早川怜子| 不卡一区在线观看| 亚洲第一搞黄网站| 国产亚洲1区2区3区| 在线视频国内自拍亚洲视频| 精品第一国产综合精品aⅴ| 国产综合成人久久大片91| 不卡一区二区中文字幕| 1000部国产精品成人观看| 日韩欧美视频一区| 福利视频网站一区二区三区| 亚洲国产精品视频| 欧美伊人精品成人久久综合97 | 色综合一区二区三区| 91精品午夜视频| 不卡欧美aaaaa| 首页国产丝袜综合| 亚洲天堂网中文字| 精品久久国产老人久久综合| 国产精品一色哟哟哟| 日本大胆欧美人术艺术动态| 国内精品不卡在线| 欧美亚洲另类激情小说| 久久精品亚洲乱码伦伦中文| 亚洲va韩国va欧美va| 不卡影院免费观看| 亚洲精品在线电影| 日日夜夜免费精品| 成人短视频下载| 精品久久久久久久人人人人传媒 | 国产成人免费视频| 国产精品亚洲专一区二区三区| 一区二区三区精密机械公司| 国产精品亚洲成人| 日韩视频永久免费| 亚洲已满18点击进入久久| 成人黄色在线看| 欧美变态口味重另类| 国产精品911| 日产精品久久久久久久性色| 不卡区在线中文字幕| 欧美电影精品一区二区| 亚洲精品美国一| av电影在线不卡| 国产精品久久久久久久久免费相片 | 日日夜夜免费精品| 欧美中文一区二区三区| 综合分类小说区另类春色亚洲小说欧美| 久久国产精品免费| 欧美成人一级视频| 美女性感视频久久| 欧美成人精品3d动漫h| 美女视频一区二区| 韩国av一区二区| 欧美一级淫片007| 日韩av在线发布| 日韩免费视频一区| 国产一区二区三区免费播放 | 日韩av中文在线观看| 欧美久久婷婷综合色| 亚洲午夜国产一区99re久久| 在线观看国产精品网站| 亚洲黄色av一区| 亚洲欧美一区二区视频| 国产片一区二区| 91精品国产高清一区二区三区| 午夜精品福利在线| 欧美日韩中文字幕一区二区| 亚洲成人tv网| 日韩一区二区精品在线观看| 日本一区中文字幕| 欧美大片一区二区| 国产美女主播视频一区| 久久久久久久性| av亚洲精华国产精华| 亚洲欧美一区二区三区久本道91| 国产高清不卡一区| 亚洲国产精品精华液ab| 成人夜色视频网站在线观看| 亚洲视频小说图片| 欧美日韩高清在线| 国产一区二区三区黄视频 | 国产人成亚洲第一网站在线播放| 成人av免费在线观看| 亚洲欧洲在线观看av| 欧美日韩一区二区三区视频| 亚洲国产成人高清精品| 91.成人天堂一区| 青青草伊人久久| 国产精品理论片在线观看| 欧美午夜影院一区| 视频在线观看国产精品| 日韩av中文字幕一区二区三区| 日韩成人一区二区| 欧美激情中文不卡| 欧美撒尿777hd撒尿| www.亚洲免费av| 久久99精品视频| 免费人成在线不卡| 亚洲国产精品一区二区久久恐怖片| 2021久久国产精品不只是精品| 91麻豆免费看片| 国产毛片精品视频| 婷婷夜色潮精品综合在线| 久久久久久97三级| 欧美喷水一区二区| 91污片在线观看| 国产精品2024| 久久精品72免费观看| 亚洲免费av高清| 国产欧美精品区一区二区三区 | 99国产精品一区| 午夜激情一区二区三区| 亚洲激情校园春色|