婷婷综合国产,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在线无精精品入口| 在线影院国内精品| 欧美日韩精品电影| 欧美一区二区精品久久911| 日韩一区二区三区免费看 | 欧美精品aⅴ在线视频| 91九色02白丝porn| 欧美日韩精品一区二区天天拍小说 | 日韩国产在线观看| 免费在线观看一区二区三区| 日韩影院在线观看| 久久99精品国产.久久久久| 国产综合成人久久大片91| 亚洲在线视频网站| 日本大胆欧美人术艺术动态| 国产麻豆成人精品| 色噜噜久久综合| 欧美日韩精品一区二区三区| 日韩精品综合一本久道在线视频| 久久伊人中文字幕| 亚洲色图另类专区| 亚洲精品日日夜夜| 黑人巨大精品欧美一区| 91污在线观看| 精品国产制服丝袜高跟| 国产精品视频线看| 午夜欧美大尺度福利影院在线看| 美腿丝袜亚洲色图| 91亚洲精品久久久蜜桃网站| 7777精品伊人久久久大香线蕉的| 久久免费美女视频| 亚洲成年人网站在线观看| 国产在线精品一区二区夜色| 99vv1com这只有精品| 日韩美一区二区三区| 亚洲色图视频网| 国产福利91精品| 91精品欧美福利在线观看| 国产精品免费网站在线观看| 舔着乳尖日韩一区| av在线这里只有精品| 日韩欧美123| 亚洲午夜视频在线观看| 成人黄色在线看| 日韩一本二本av| 亚洲午夜激情网站| 成人自拍视频在线| 日韩精品一区二区在线| 一二三区精品福利视频| 成人网在线免费视频| 精品成人a区在线观看| 美女诱惑一区二区| 69堂国产成人免费视频| 一区二区三区**美女毛片| 成人国产亚洲欧美成人综合网| 日韩一级大片在线观看| 三级欧美在线一区| 欧美日韩高清一区二区三区| 18欧美亚洲精品| 91美女精品福利| 亚洲欧洲精品成人久久奇米网| 国产麻豆日韩欧美久久| 久久久精品欧美丰满| 久久 天天综合| 欧美精品一区二区久久婷婷| 人人精品人人爱| 欧美一区二区久久| 国产电影一区在线| 26uuu色噜噜精品一区| 久久成人综合网| 日韩免费在线观看| 精品一区二区三区的国产在线播放| 日韩三级av在线播放| 看电影不卡的网站| 久久日一线二线三线suv| 国产乱码精品1区2区3区| 国产女主播视频一区二区| 国产激情视频一区二区在线观看| 久久久久久久久久看片| 成人精品视频一区二区三区| 久久久久久久久久久久久夜| www.成人网.com| 亚洲一区二区在线视频| 91精品国产综合久久香蕉麻豆 | 精品写真视频在线观看| 欧美成人a∨高清免费观看| 美美哒免费高清在线观看视频一区二区 | 欧美午夜不卡视频| 日韩精品午夜视频| 久久夜色精品国产欧美乱极品| 国产精品影视在线| 亚洲激情五月婷婷| 日韩欧美不卡一区| 91麻豆国产福利精品| 日本aⅴ亚洲精品中文乱码| 亚洲国产精品成人综合色在线婷婷 | 久久影院电视剧免费观看| 成人a级免费电影| 五月天亚洲婷婷| 国产色综合一区| 欧美在线你懂的| 久久99精品久久久久久| 亚洲天堂免费在线观看视频| 日韩亚洲欧美高清| 色噜噜偷拍精品综合在线| 久久草av在线| 一区二区三区在线观看网站| 洋洋成人永久网站入口| 日韩午夜在线播放| 91精彩视频在线| 国产成人综合亚洲91猫咪| 亚洲国产精品一区二区久久恐怖片| 精品99一区二区三区| 欧美日韩在线免费视频| 国产91清纯白嫩初高中在线观看| 亚洲午夜免费福利视频| 欧美国产日韩亚洲一区| 精品少妇一区二区三区日产乱码 | 日本精品一级二级| 成人av中文字幕| 精品一二三四区| 天天亚洲美女在线视频| 一区二区中文字幕在线| 久久一二三国产| 久久婷婷国产综合精品青草| 欧美日韩国产精品自在自线| 91网站视频在线观看| 国产999精品久久久久久| 奇米精品一区二区三区四区| 一区二区三区欧美| 日韩理论电影院| 国产精品免费观看视频| 久久久久久久久久久久电影 | 久久精品一区二区三区不卡| 日韩亚洲欧美综合| 欧美一区二视频| 欧美一卡二卡在线| 日韩一区二区三区视频在线 | 欧美欧美午夜aⅴ在线观看| 97久久精品人人做人人爽50路| 国产成人午夜电影网| 国产成人精品在线看| 国产福利一区二区三区视频在线 | 日韩成人伦理电影在线观看| 一区二区理论电影在线观看| 一区二区三区四区中文字幕| 亚洲三级小视频| 一区二区成人在线视频| 一区二区激情小说| 天堂蜜桃91精品| 久久99精品久久久久久| 韩国v欧美v亚洲v日本v| 国产精品一区二区久久精品爱涩| 国产乱人伦偷精品视频免下载| 成人一区二区在线观看| 99re视频精品| 欧美日韩国产综合一区二区| 4438成人网| 国产亚洲欧美一级| 国产精品美女久久久久久久久| 欧美国产精品v| 亚洲成人av在线电影| 日本欧美一区二区| 成人午夜碰碰视频| 欧美亚洲尤物久久| 精品国产乱码久久久久久免费| 久久精品一区四区| 一卡二卡三卡日韩欧美| 免费久久精品视频| 不卡欧美aaaaa| 欧美精品99久久久**| 欧美精彩视频一区二区三区| 有码一区二区三区| 免费在线一区观看| 色综合久久天天综合网| 欧美一区二区二区| 亚洲天堂2014| 裸体健美xxxx欧美裸体表演| 成人免费视频一区| 日韩欧美一区二区久久婷婷| 国产精品毛片久久久久久久| 日韩国产欧美在线视频| 99这里都是精品| 2017欧美狠狠色| 午夜a成v人精品| av中文字幕一区| 欧美精品一区二区三区在线播放| 一区二区三区在线高清| 成人免费视频播放| 欧美精品一区二区三区蜜桃| 亚洲va天堂va国产va久| 91麻豆精品秘密|