RDS for PostgreSQL 批量更新删除或插入数据

前言

在 PostgreSQL 中,我们推荐使用批量操作来进行插入,更新和删除数据,这样可以减少客户端与数据库的交互次数,进而提高数据库的吞吐量。

批量插入数据

1.使用insert into...select的方式

dbtest=# create table test(id serial, login varchar(10),time_now date);
CREATE TABLE

dbtest=# INSERT INTO test (id, login ,time_now) SELECT GENERATE_SERIES(1,10000),'dbtest',NOW();
INSERT 0 10000

dbtest=# select * from test limit 10;
 id | login  |  time_now  
----+--------+------------
  1 | dbtest | 2022-01-11
  2 | dbtest | 2022-01-11
  3 | dbtest | 2022-01-11
  4 | dbtest | 2022-01-11
  5 | dbtest | 2022-01-11
  6 | dbtest | 2022-01-11
  7 | dbtest | 2022-01-11
  8 | dbtest | 2022-01-11
  9 | dbtest | 2022-01-11
 10 | dbtest | 2022-01-11
(10 rows)

2.insert 后使用多个values

dbtest=# INSERT INTO test (id,login,time_now) VALUES (1001,'wanyix',NOW()), (1002,'wanyix',NOW()), (1003,'wanyix',NOW()); 
INSERT 0 3

3.copy 命令插入效率更高

简单的使用如下:

dbtest=# COPY test FROM stdin delimiter ',' csv header;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself, or an EOF signal.
>> 1006,liwangz,2022-01-11
>> 1007,mezhng,2022-01-11
>> \.
COPY 1
批量更新数据

我们可以使用 update 后加多个value的方式,示例如下:

dbtest=# UPDATE test SET login=tmp.login from (VALUES (1,'tianzhou'),(2,'tianzhou'),(6,'tianzhou')) AS tmp (id,login) WHERE test.id=tmp.id; 
UPDATE 3

dbtest=# select * from test where id in(1,2,6);
 id |  login   |  time_now  
----+----------+------------
  1 | tianzhou | 2022-01-11
  2 | tianzhou | 2022-01-11
  6 | tianzhou | 2022-01-11
(3 rows)
批量删除数据
dbtest=# DELETE FROM test USING (VALUES (3),(4),(5)) AS tmp(id) WHERE test.id=tmp.id;
DELETE 3

如果您有删除全表的需求,请直接使用truncate 而不是delete。

如果您有其他问题,欢迎您联系火山引擎技术支持服务

257
0
0
0
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论