使用小批量运行大型PostgreSQL更新和删除查询以防止锁定
pg-batch的Python项目详细描述
#PG批次
[![构建状态](https://travis-ci.org/gaffl/pg-batch.svg?branch=master)(https://travis ci.org/gabfl/pg batch)
更新或删除postgresql中的大量行将创建锁,使其他并行运行的查询瘫痪。
并以小批量删除查询以限制锁定。如果需要更新或删除大量行,也可以限制一次选择的行数。
chema.sql](sample_table/schema.sql)
/>``` bash
pg廑batch--host localhost\
--用户postgres\
--密码机密廑password\
--数据库"测试"\
--表"batch廑test"\
--写入廑batch廑size 20\
--其中"数字>;30和日期为空"\
--设置"d"ate=now()"
```
输出示例:
``bash
*选择数据…
查询:从批次测试中选择id作为id,其中number>;30和date为空,id>;0按id限制排序10000
*准备修改70行…
*更新20行…
查询:更新批次est set date=now(),其中id in(31、32、33、34、35、36、37、38、39、40、41、42、43、44、45、46、47、48、49、50)开始更新?[Y/N]
*正在更新20行…
查询:update batch_test set date=now(),其中id in(51、52、53、54、55、56、57、58、59、60、61、62、63、64、65、66、67、68、69、70)
*正在更新20行…
查询:update batch_test set date=now(),其中id in(71、72、73、74、75、76、77、78、79、80、81、82、83、84、85、86、87、88、89、90)
*更新10行…
查询:更新批次测试集日期=now(),其中id位于(91、92、93、94、95、96、97、98、99、100)
*选择数据…
查询:从批次测试中选择id作为id,其中number>;30和date为空,id>;100 order by id limit 10000
*没有更多行可修改!
*程序退出
```
:
``` bash
pg廑batch--主机localhost\
--用户postgres\
--密码机密廑password\
--数据库"测试"\
--表"batch廑test"\
--写入廑batch廑size 20\
--其中"数字>;30和日期为空"\
--操作"delete"
```
输出示例:
``bash
*选择数据…
查询:从批处理测试中选择id作为id,其中number>;30和date为空,id>;0按id限制排序10000
*准备修改70行…
*删除20行…
查询:delete from批处理测试,其中id in(31、32、33、34、35、36、37、38、39、40、41、42、43、44、45、46、47、48、49、50)开始删除?[Y/N]
*删除20行…
查询:从ID位于(51、52、53、54、55、56、57、58、59、60、61、62、63、64、65、66、67、68、69、70)的批次测试中删除
*删除20行…
查询:从ID位于(71、72、73、74、75、76、77、78、79、80、81、82、83、84、85、8)的批次测试中删除6,87,88,89,90)
*删除10行…
查询:从批次测试中删除,其中ID位于(91,92,93,94,95,96,97,98,99,100)
*选择数据…
查询:从批次测试中选择ID作为ID,其中编号>;30,日期为空,ID>;100按ID排序限制10000
*没有更多行可修改!
*程序退出
```
[-a{update,delete}[-n]
可选参数:
-h,--帮助显示此帮助消息并退出
-h主机,--主机postgresql服务器主机
-p端口,--端口postgresql服务器端口
-u用户,--用户postgresql用户
-p密码,--密码密码
postgresql密码
-d数据库,--数据库数据库
postgresql数据库名称
-t表,--表表
postgresql表
-id主键,--主键主键
主键列的名称
-w where,--where
select where子句
-s set,--set set update set子句
-rbz read_batch_size,--read_batch_size read_batch_size
select batch size
-wbz write_batch_size,--write_batch_size write_batch_size
更新/删除batch size
-s睡眠,--sleep睡眠
每个批次后睡眠
-a{update,delete},--action{update,delete}
action('update'或'delete')
-n,--no_确认在运行write
查询之前不要要求确认
```
[![构建状态](https://travis-ci.org/gaffl/pg-batch.svg?branch=master)(https://travis ci.org/gabfl/pg batch)
更新或删除postgresql中的大量行将创建锁,使其他并行运行的查询瘫痪。
并以小批量删除查询以限制锁定。如果需要更新或删除大量行,也可以限制一次选择的行数。
chema.sql](sample_table/schema.sql)
/>``` bash
pg廑batch--host localhost\
--用户postgres\
--密码机密廑password\
--数据库"测试"\
--表"batch廑test"\
--写入廑batch廑size 20\
--其中"数字>;30和日期为空"\
--设置"d"ate=now()"
```
输出示例:
``bash
*选择数据…
查询:从批次测试中选择id作为id,其中number>;30和date为空,id>;0按id限制排序10000
*准备修改70行…
*更新20行…
查询:更新批次est set date=now(),其中id in(31、32、33、34、35、36、37、38、39、40、41、42、43、44、45、46、47、48、49、50)开始更新?[Y/N]
*正在更新20行…
查询:update batch_test set date=now(),其中id in(51、52、53、54、55、56、57、58、59、60、61、62、63、64、65、66、67、68、69、70)
*正在更新20行…
查询:update batch_test set date=now(),其中id in(71、72、73、74、75、76、77、78、79、80、81、82、83、84、85、86、87、88、89、90)
*更新10行…
查询:更新批次测试集日期=now(),其中id位于(91、92、93、94、95、96、97、98、99、100)
*选择数据…
查询:从批次测试中选择id作为id,其中number>;30和date为空,id>;100 order by id limit 10000
*没有更多行可修改!
*程序退出
```
:
``` bash
pg廑batch--主机localhost\
--用户postgres\
--密码机密廑password\
--数据库"测试"\
--表"batch廑test"\
--写入廑batch廑size 20\
--其中"数字>;30和日期为空"\
--操作"delete"
```
输出示例:
``bash
*选择数据…
查询:从批处理测试中选择id作为id,其中number>;30和date为空,id>;0按id限制排序10000
*准备修改70行…
*删除20行…
查询:delete from批处理测试,其中id in(31、32、33、34、35、36、37、38、39、40、41、42、43、44、45、46、47、48、49、50)开始删除?[Y/N]
*删除20行…
查询:从ID位于(51、52、53、54、55、56、57、58、59、60、61、62、63、64、65、66、67、68、69、70)的批次测试中删除
*删除20行…
查询:从ID位于(71、72、73、74、75、76、77、78、79、80、81、82、83、84、85、8)的批次测试中删除6,87,88,89,90)
*删除10行…
查询:从批次测试中删除,其中ID位于(91,92,93,94,95,96,97,98,99,100)
*选择数据…
查询:从批次测试中选择ID作为ID,其中编号>;30,日期为空,ID>;100按ID排序限制10000
*没有更多行可修改!
*程序退出
```
[-a{update,delete}[-n]
可选参数:
-h,--帮助显示此帮助消息并退出
-h主机,--主机postgresql服务器主机
-p端口,--端口postgresql服务器端口
-u用户,--用户postgresql用户
-p密码,--密码密码
postgresql密码
-d数据库,--数据库数据库
postgresql数据库名称
-t表,--表表
postgresql表
-id主键,--主键主键
主键列的名称
-w where,--where
select where子句
-s set,--set set update set子句
-rbz read_batch_size,--read_batch_size read_batch_size
select batch size
-wbz write_batch_size,--write_batch_size write_batch_size
更新/删除batch size
-s睡眠,--sleep睡眠
每个批次后睡眠
-a{update,delete},--action{update,delete}
action('update'或'delete')
-n,--no_确认在运行write
查询之前不要要求确认
```