C$@4 D<$B+ >$EA;$=F >$GB@4A+=+($A #$@@BA(+& >4?4;$%4'6 7B%%$'+ >$A=+4 H$B'!=GG$BA+ 74='G*!I$'JJJ !
9:1;(<&1)3-"(=>==?(!)415"-678(9@(A-*-%4-,B
D)&0C-/1%1#)/!→!!)415"-678(9@
74='G*!+*4!F$GB@4A+=+($A!I$'JJJ !
7B%%$'+4F!k4'6($A6f!+0""-/1!b9@c!V!9E
>4?4;$%@4A+!k4'6($A6f!,-$-*
!"#$#%&'()*'+),-./)
&0)1K 2( 345(6)0%!"#%*'7(8,9,3,:'7050; <.=) K>)?6
!"#$#%&'()*'+),-./)
LMJNJ-J!O6(A)!5(%4;(A4!P$F4
LMJNJ1J!QBAG+($A6!D66$G(=+4F!E(+*!5(%4;(A4!P$F4
LMJNJLJ!R*4A!+$!O64!5(%4;(A4!P$F4
;(<%S!%(%4;(A4!@$F4!=;;$E6!=%%;(G=+($A6!+$!64AF!=!SB4'&!E(+*$B+!*=?(A)!+$!'4=F!+*4!'46B;+!$I!+*4!%'4?($B6;&!64A+!SB4'&J!3=T(A)!=F?=A+=)4!$I!+*4!%(%4;(A4!@$F4U!=!G;(4A+!E(;;!E=(+!;466!I$'!+*4!64'?4'U!6(AG4!@B;+(%;4!SB4'(46V'46B;+6!G=A!<4!64A+V'4G4(?4F!(A!=!6(A);4
A4+E$'T!+'=A6=G+($AJ
R*(;4!%(%4;(A4!@$F4!%'$?(F46!=!6()A(WG=A+!%4'I$'@=AG4!<$$6+U!E'(+(A)!G;(4A+6!B6(A)!+*4!%(%4;(A4!@$F4!(6!@$'4!G$@%;4X!<4G=B64!(+!(A?$;?46!@=A=)(A)!=!SB4B4!$I!%4AF(A)!SB4'(46!=AF!WAF(A)!E*(G*!'46B;+!G$''46%$AF6!+$!E*(G*!SB4'&!(A!+*4!SB4B4J
5(%4;(A4!@$F4!=;6$!)4A4'=;;&!G$A6B@46!@$'4!@4@$'&!$A!<$+*!+*4!G;(4A+!=AF!64'?4'U!+*$B)*!G='4IB;!=AF!=))'466(?4!@=A=)4@4A+!$I!+*4!64AFV'4G4(?4!SB4B4!G=A!@(+()=+4!+*(6J!3*(6!=%%;(46!E*4+*4'!$'!A$+!+*4!G$AA4G+($A!(6!(A!<;$GT(A)!$'!A$A0<;$GT(A)!@$F4J
R*(;4!+*4!%(%4;(A4!D5Y!E=6!(A+'$FBG4F!(A!5$6+)'4789!-MU!(+!(6!=!G;(4A+06(F4!I4=+B'4!E*(G*!F$46AZ+!'4SB('4!6%4G(=;!64'?4'!6B%%$'+!=AF!E$'T6!$A!=A&!64'?4'!+*=+!6B%%$'+6!+*4!?L!4X+4AF4F!SB4'&!%'$+$G$;J
LMJNJ-JKO6(A)!5(%4;(A4!P$F4
3$!(66B4!%(%4;(A46U!+*4!=%%;(G=+($A!@B6+!6E(+G*!+*4!G$AA4G+($A!(A+$!%(%4;(A4!@$F4U!E*(G*!(6!F$A4!E(+*!PQenterPipelineModeJ!PQpipelineStatus!G=A!<4!B64F!+$!+46+!E*4+*4'!%(%4;(A4!@$F4!(6!=G+(?4J!YA!%(%4;(A4!@$F4U!$A;&!5@;+A40.+.B@,.()056'.+@!+*=+
B+(;([4!+*4!4X+4AF4F!SB4'&!%'$+$G$;!='4!%4'@(++4FU!G$@@=AF!6+'(A)6!G$A+=(A(A)!@B;+(%;4!789!G$@@=AF6!='4!F(6=;;$E4FU!=AF!6$!(6!COPYJ!O6(A)!6&AG*'$A$B6!G$@@=AF!4X4GB+($A!IBAG+($A6!6BG*!=6!PQfnU!PQexecU!PQexecParamsU!PQprepareU!PQexecPreparedU
PQdescribePreparedU!PQdescribePortalU!(6!=A!4''$'!G$AF(+($AJ!PQsendQuery!(6!=;6$!F(6=;;$E4FU!<4G=B64!(+!B646!+*4!6(@%;4!SB4'&!%'$+$G$;J!\AG4!=;;!F(6%=+G*4F!G$@@=AF6!*=?4!*=F!+*4('!'46B;+6!%'$G4664FU!=AF!+*4!4AF!%(%4;(A4!'46B;+!*=6!<44A!G$A6B@4FU
+*4!=%%;(G=+($A!@=&!'4+B'A!+$!A$A0%(%4;(A4F!@$F4!E(+*!PQexitPipelineModeJ
]$+4
Y+!(6!<46+!+$!B64!%(%4;(A4!@$F4!E(+*!;(<%S!(A!+.+C7*.AD'+E,=./)J!YI!B64F!(A!<;$GT(A)!@$F4!(+!(6
%$66(<;4!I$'!=!G;(4A+V64'?4'!F4=F;$GT!+$!$GGB'J!!"#$
!"#$#%#%#&'(()*+,-.)/0*/(
DI+4'!4A+4'(A)!%(%4;(A4!@$F4U!+*4!=%%;(G=+($A!F(6%=+G*46!'4SB46+6!B6(A)!PQsendQueryParams!$'!(+6!%'4%='4F0SB4'&!6(<;(A)!PQsendQueryPreparedJ!3*464!'4SB46+6!='4!SB4B4F!$A!+*4!G;(4A+06(F4!BA+(;!^B6*4F!+$!+*4!64'?4'_!+*(6!$GGB'6!E*4A!PQpipelineSync!(6
B64F!+$!46+=<;(6*!=!6&AG*'$A([=+($A!%$(A+!(A!+*4!%(%4;(A4U!$'!E*4A!PQflush!(6!G=;;4FJ!3*4!IBAG+($A6!PQsendPrepareU!PQsendDescribePreparedU!=AF!PQsendDescribePortal!=;6$!E$'T!(A!%(%4;(A4!@$F4J!`46B;+!%'$G466(A)!(6!F46G'(<4F!<4;$EJ
3*4!64'?4'!4X4GB+46!6+=+4@4A+6U!=AF!'4+B'A6!'46B;+6U!(A!+*4!$'F4'!+*4!G;(4A+!64AF6!+*4@J!3*4!64'?4'!E(;;!<4)(A!4X4GB+(A)!+*4!G$@@=AF6!(A!+*4!%(%4;(A4!(@@4F(=+4;&U!A$+!E=(+(A)!I$'!+*4!4AF!$I!+*4!%(%4;(A4J!]$+4!+*=+!'46B;+6!='4!<Ba4'4F!$A!+*4!64'?4'!6(F4_!+*4
64'?4'!^B6*46!+*=+!<Ba4'!E*4A!=!6&AG*'$A([=+($A!%$(A+!(6!46+=<;(6*4F!E(+*!PQpipelineSyncU!$'!E*4A!PQsendFlushRequest!(6!G=;;4FJ!YI!=A&!6+=+4@4A+!4AG$BA+4'6!=A!4''$'U!+*4!64'?4'!=<$'+6!+*4!GB''4A+!+'=A6=G+($A!=AF!F$46!A$+!4X4GB+4!=A&!6B<64SB4A+
G$@@=AF!(A!+*4!SB4B4!BA+(;!+*4!A4X+!6&AG*'$A([=+($A!%$(A+_!=!PGRES_PIPELINE_ABORTED!'46B;+!(6!%'$FBG4F!I$'!4=G*!6BG*!G$@@=AFJ!b3*(6!'4@=(A6!+'B4!4?4A!(I!+*4!G$@@=AF6!(A!+*4!%(%4;(A4!E$B;F!'$;;<=GT!+*4!+'=A6=G+($AJc!8B4'&!%'$G466(A)!'46B@46!=I+4'!+*4
6&AG*'$A([=+($A!%$(A+J
Y+Z6!WA4!I$'!$A4!$%4'=+($A!+$!F4%4AF!$A!+*4!'46B;+6!$I!=!%'($'!$A4_!I$'!4X=@%;4U!$A4!SB4'&!@=&!F4WA4!=!+=<;4!+*=+!+*4!A4X+!SB4'&!(A!+*4!6=@4!%(%4;(A4!B646J!7(@(;=';&U!=A!=%%;(G=+($A!@=&!G'4=+4!=!A=@4F!%'4%='4F!6+=+4@4A+!=AF!4X4GB+4!(+!E(+*!;=+4'!6+=+4@4A+6!(A
+*4!6=@4!%(%4;(A4J
!"#$#%#1#&2034/((*+,-5/()67(
3$!%'$G466!+*4!'46B;+!$I!$A4!SB4'&!(A!=!%(%4;(A4U!+*4!=%%;(G=+($A!G=;;6!PQgetResult!'4%4=+4F;&!=AF!*=AF;46!4=G*!'46B;+!BA+(;!PQgetResult!'4+B'A6!AB;;J!3*4!'46B;+!I'$@!+*4!A4X+!SB4'&!(A!+*4!%(%4;(A4!@=&!+*4A!<4!'4+'(4?4F!B6(A)!PQgetResult!=)=(A!=AF!+*4!G&G;4
'4%4=+4FJ!3*4!=%%;(G=+($A!*=AF;46!(AF(?(FB=;!6+=+4@4A+!'46B;+6!=6!A$'@=;J!R*4A!+*4!'46B;+6!$I!=;;!+*4!SB4'(46!(A!+*4!%(%4;(A4!*=?4!<44A!'4+B'A4FU!PQgetResult!'4+B'A6!=!'46B;+!G$A+=(A(A)!+*4!6+=+B6!?=;B4!PGRES_PIPELINE_SYNC
3*4!G;(4A+!@=&!G*$$64!+$!F4I4'!'46B;+!%'$G466(A)!BA+(;!+*4!G$@%;4+4!%(%4;(A4!*=6!<44A!64A+U!$'!(A+4';4=?4!+*=+!E(+*!64AF(A)!IB'+*4'!SB4'(46!(A!+*4!%(%4;(A4_!644!F)A6'.+%!"#$#G#"J
3$!4A+4'!6(A);40'$E!@$F4U!G=;;!PQsetSingleRowMode!<4I$'4!'4+'(4?(A)!'46B;+6!E(+*!PQgetResultJ!3*(6!@$F4!64;4G+($A!(6!4a4G+(?4!$A;&!I$'!+*4!SB4'&!GB''4A+;&!<4(A)!%'$G4664FJ!Q$'!@$'4!(AI$'@=+($A!$A!+*4!B64!$I!PQsetSingleRowModeU!'4I4'!+$!F)A6'.+%!"#HJ
PQgetResult!<4*=?46!+*4!6=@4!=6!I$'!A$'@=;!=6&AG*'$A$B6!%'$G466(A)!4XG4%+!+*=+!(+!@=&!G$A+=(A!+*4!A4E!PGresult!+&%46!PGRES_PIPELINE_SYNC!=AF!PGRES_PIPELINE_ABORTEDJ!PGRES_PIPELINE_SYNC!(6!'4%$'+4F!4X=G+;&!$AG4!I$'!4=G*
PQpipelineSync!=+!+*4!G$''46%$AF(A)!%$(A+!(A!+*4!%(%4;(A4J!PGRES_PIPELINE_ABORTED!(6!4@(++4F!(A!%;=G4!$I!=!A$'@=;!SB4'&!'46B;+!I$'!+*4!W'6+!4''$'!=AF!=;;!6B<64SB4A+!'46B;+6!BA+(;!+*4!A4X+!PGRES_PIPELINE_SYNC_!644!F)A6'.+%!"#$#G#!J
PQisBusyU!PQconsumeInputU!4+G!$%4'=+4!=6!A$'@=;!E*4A!%'$G466(A)!%(%4;(A4!'46B;+6J!YA!%='+(GB;='U!=!G=;;!+$!PQisBusy!(A!+*4!@(FF;4!$I!=!%(%4;(A4!'4+B'A6!2!(I!+*4!'46B;+6!I$'!=;;!+*4!SB4'(46!(66B4F!6$!I='!*=?4!<44A!G$A6B@4FJ
;(<%S!F$46!A$+!%'$?(F4!=A&!(AI$'@=+($A!+$!+*4!=%%;(G=+($A!=<$B+!+*4!SB4'&!GB''4A+;&!<4(A)!%'$G4664F!b4XG4%+!+*=+!PQgetResult!'4+B'A6!AB;;!+$!(AF(G=+4!+*=+!E4!6+='+!'4+B'A(A)!+*4!'46B;+6!$I!A4X+!SB4'&cJ!3*4!=%%;(G=+($A!@B6+!T44%!+'=GT!$I!+*4!$'F4'!(A!E*(G*!(+
64A+!SB4'(46U!+$!=66$G(=+4!+*4@!E(+*!+*4('!G$''46%$AF(A)!'46B;+6J!D%%;(G=+($A6!E(;;!+&%(G=;;&!B64!=!6+=+4!@=G*(A4!$'!=!QYQ\!SB4B4!I$'!+*(6J
!"#$#%#!#&80030-9:+;6*+,
Q'$@!+*4!G;(4A+Z6!%4'6%4G+(?4U!=I+4'!PQresultStatus!'4+B'A6!PGRES_FATAL_ERRORU!+*4!%(%4;(A4!(6!^=))4F!=6!=<$'+4FJ!PQresultStatus!E(;;!'4%$'+!=!PGRES_PIPELINE_ABORTED!'46B;+!I$'!4=G*!'4@=(A(A)!SB4B4F!$%4'=+($A!(A!=A!=<$'+4F!%(%4;(A4J!3*4!'46B;+!I$'
PQpipelineSync!(6!'4%$'+4F!=6!PGRES_PIPELINE_SYNC!+$!6()A=;!+*4!4AF!$I!+*4!=<$'+4F!%(%4;(A4!=AF!'46B@%+($A!$I!A$'@=;!'46B;+!%'$G466(A)J
3*4!G;(4A+!@B6+!%'$G466!'46B;+6!E(+*!PQgetResult!FB'(A)!4''$'!'4G$?4'&J
YI!+*4!%(%4;(A4!B64F!=A!(@%;(G(+!+'=A6=G+($AU!+*4A!$%4'=+($A6!+*=+!*=?4!=;'4=F&!4X4GB+4F!='4!'$;;4F!<=GT!=AF!$%4'=+($A6!+*=+!E4'4!SB4B4F!+$!I$;;$E!+*4!I=(;4F!$%4'=+($A!='4!6T(%%4F!4A+('4;&J!3*4!6=@4!<4*=?($'!*$;F6!(I!+*4!%(%4;(A4!6+='+6!=AF!G$@@(+6!=!6(A);4
4X%;(G(+!+'=A6=G+($A!b(J4J!+*4!W'6+!6+=+4@4A+!(6!BEGIN!=AF!+*4!;=6+!(6!COMMITc!4XG4%+!+*=+!+*4!6466($A!'4@=(A6!(A!=A!=<$'+4F!+'=A6=G+($A!6+=+4!=+!+*4!4AF!$I!+*4!%(%4;(A4J!YI!=!%(%4;(A4!G$A+=(A6!@B;+(%;4!4X%;(G(+!+'=A6=G+($A6U!=;;!+'=A6=G+($A6!+*=+!G$@@(++4F!%'($'!+$!+*4
4''$'!'4@=(A!G$@@(++4FU!+*4!GB''4A+;&!(A0%'$)'466!+'=A6=G+($A!(6!=<$'+4FU!=AF!=;;!6B<64SB4A+!$%4'=+($A6!='4!6T(%%4F!G$@%;4+4;&U!(AG;BF(A)!6B<64SB4A+!+'=A6=G+($A6J!YI!=!%(%4;(A4!6&AG*'$A([=+($A!%$(A+!$GGB'6!E(+*!=A!4X%;(G(+!+'=A6=G+($A!<;$GT!(A!=<$'+4F!6+=+4U!+*4
A4X+!%(%4;(A4!E(;;!<4G$@4!=<$'+4F!(@@4F(=+4;&!BA;466!+*4!A4X+!G$@@=AF!%B+6!+*4!+'=A6=G+($A!(A!A$'@=;!@$F4!E(+*!ROLLBACKJ
]$+4
3*4!G;(4A+!@B6+!A$+!=66B@4!+*=+!E$'T!(6!G$@@(++4F!E*4A!(+!64AF6!=!COMMIT!d!$A;&!E*4A
+*4!G$''46%$AF(A)!'46B;+!(6!'4G4(?4F!+$!G$AW'@!+*4!G$@@(+!(6!G$@%;4+4J!e4G=B64!4''$'6
=''(?4!=6&AG*'$A$B6;&U!+*4!=%%;(G=+($A!A44F6!+$!<4!=<;4!+$!'46+='+!I'$@!+*4!;=6+!'4G4(?4F
G$@@(++4F!G*=A)4!=AF!'464AF!E$'T!F$A4!=I+4'!+*=+!%$(A+!(I!6$@4+*(A)!)$46!E'$A)J
!"#$#%#"#&'+7/06/:<*+,-5/()67-2034/((*+,-=+;-.)/0>-?*(@:74A
3$!=?$(F!F4=F;$GT6!$A!;=')4!%(%4;(A46!+*4!G;(4A+!6*$B;F!<4!6+'BG+B'4F!='$BAF!=!A$A0<;$GT(A)!4?4A+!;$$%!B6(A)!$%4'=+(A)!6&6+4@!I=G(;(+(46!6BG*!=6!selectU!pollU!WaitForMultipleObjectExU!4+GJ
3*4!G;(4A+!=%%;(G=+($A!6*$B;F!)4A4'=;;&!@=(A+=(A!=!SB4B4!$I!E$'T!'4@=(A(A)!+$!<4!F(6%=+G*4F!=AF!=!SB4B4!$I!E$'T!+*=+!*=6!<44A!F(6%=+G*4F!<B+!A$+!&4+!*=F!(+6!'46B;+6!%'$G4664FJ!R*4A!+*4!6$GT4+!(6!E'(+=<;4!(+!6*$B;F!F(6%=+G*!@$'4!E$'TJ!R*4A!+*4!6$GT4+!(6
'4=F=<;4!(+!6*$B;F!'4=F!'46B;+6!=AF!%'$G466!+*4@U!@=+G*(A)!+*4@!B%!+$!+*4!A4X+!4A+'&!(A!(+6!G$''46%$AF(A)!'46B;+6!SB4B4J!e=64F!$A!=?=(;=<;4!@4@$'&U!'46B;+6!I'$@!+*4!6$GT4+!6*$B;F!<4!'4=F!I'4SB4A+;&f!+*4'4Z6!A$!A44F!+$!E=(+!BA+(;!+*4!%(%4;(A4!4AF!+$!'4=F!+*4
'46B;+6J!5(%4;(A46!6*$B;F!<4!6G$%4F!+$!;$)(G=;!BA(+6!$I!E$'TU!B6B=;;&!b<B+!A$+!A4G466='(;&c!$A4!+'=A6=G+($A!%4'!%(%4;(A4J!3*4'4Z6!A$!A44F!+$!4X(+!%(%4;(A4!@$F4!=AF!'404A+4'!(+!<4+E44A!%(%4;(A46U!$'!+$!E=(+!I$'!$A4!%(%4;(A4!+$!WA(6*!<4I$'4!64AF(A)!+*4!A4X+J
DA!4X=@%;4!B6(A)!select()!=AF!=!6(@%;4!6+=+4!@=G*(A4!+$!+'=GT!64A+!=AF!'4G4(?4F!E$'T!(6!(A!src/test/modules/libpq_pipeline/libpq_pipeline.c!(A!+*4!5$6+)'4789!6$B'G4!F(6+'(<B+($AJ
LMJNJ1JKQBAG+($A6!D66$G(=+4F!E(+*!5(%4;(A4!P$F4
PQpipelineStatus
`4+B'A6!+*4!GB''4A+!%(%4;(A4!@$F4!6+=+B6!$I!+*4!;(<%S!G$AA4G+($AJ
PGpipelineStatus PQpipelineStatus(const PGconn *conn);
PQpipelineStatus!G=A!'4+B'A!$A4!$I!+*4!I$;;$E(A)!?=;B46f
PQ_PIPELINE_ON
3*4!;(<%S!G$AA4G+($A!(6!(A!%(%4;(A4!@$F4J
PQ_PIPELINE_OFF
3*4!;(<%S!G$AA4G+($A!(6!A$+!(A!%(%4;(A4!@$F4J
PQ_PIPELINE_ABORTED
3*4!;(<%S!G$AA4G+($A!(6!(A!%(%4;(A4!@$F4!=AF!=A!4''$'!$GGB''4F!E*(;4!%'$G466(A)!+*4!GB''4A+!%(%4;(A4J!3*4!=<$'+4F!^=)!(6!G;4='4F!E*4A!PQgetResult!'4+B'A6!=!'46B;+!$I!+&%4!PGRES_PIPELINE_SYNCJ
PQenterPipelineMode
#=B646!=!G$AA4G+($A!+$!4A+4'!%(%4;(A4!@$F4!(I!(+!(6!GB''4A+;&!(F;4!$'!=;'4=F&!(A!%(%4;(A4!@$F4J
int PQenterPipelineMode(PGconn *conn);
`4+B'A6!-!I$'!6BGG466J!`4+B'A6!2!=AF!*=6!A$!4a4G+!(I!+*4!G$AA4G+($A!(6!A$+!GB''4A+;&!(F;4U!(J4JU!(+!*=6!=!'46B;+!'4=F&U!$'!(+!(6!E=(+(A)!I$'!@$'4!(A%B+!I'$@!+*4!64'?4'U!4+GJ!3*(6!IBAG+($A!F$46!A$+!=G+B=;;&!64AF!=A&+*(A)!+$!+*4!64'?4'U!(+!gB6+!G*=A)46!+*4!;(<%S
G$AA4G+($A!6+=+4J
PQexitPipelineMode
#=B646!=!G$AA4G+($A!+$!4X(+!%(%4;(A4!@$F4!(I!(+!(6!GB''4A+;&!(A!%(%4;(A4!@$F4!E(+*!=A!4@%+&!SB4B4!=AF!A$!%4AF(A)!'46B;+6J
int PQexitPipelineMode(PGconn *conn);
`4+B'A6!-!I$'!6BGG466J!`4+B'A6!-!=AF!+=T46!A$!=G+($A!(I!A$+!(A!%(%4;(A4!@$F4J!YI!+*4!GB''4A+!6+=+4@4A+!(6AZ+!WA(6*4F!%'$G466(A)U!$'!PQgetResult!*=6!A$+!<44A!G=;;4F!+$!G$;;4G+!'46B;+6!I'$@!=;;!%'4?($B6;&!64A+!SB4'&U!'4+B'A6!2!b(A!E*(G*!G=64U!B64
PQerrorMessage!+$!)4+!@$'4!(AI$'@=+($A!=<$B+!+*4!I=(;B'4cJ
PQpipelineSync
P='T6!=!6&AG*'$A([=+($A!%$(A+!(A!=!%(%4;(A4!<&!64AF(A)!=!@;+A,=)@@5E)!=AF!^B6*(A)!+*4!64AF!<Ba4'J!3*(6!64'?46!=6!+*4!F4;(@(+4'!$I!=A!(@%;(G(+!+'=A6=G+($A!=AF!=A!4''$'!'4G$?4'&!%$(A+_!644!F)A6'.+%!"#$#G#!J
int PQpipelineSync(PGconn *conn);
`4+B'A6!-!I$'!6BGG466J!`4+B'A6!2!(I!+*4!G$AA4G+($A!(6!A$+!(A!%(%4;(A4!@$F4!$'!64AF(A)!=!@;+A,=)@@5E)!I=(;4FJ
PQsendFlushRequest
74AF6!=!'4SB46+!I$'!+*4!64'?4'!+$!^B6*!(+6!$B+%B+!<Ba4'J
int PQsendFlushRequest(PGconn *conn);
`4+B'A6!-!I$'!6BGG466J!`4+B'A6!2!$A!=A&!I=(;B'4J
3*4!64'?4'!^B6*46!(+6!$B+%B+!<Ba4'!=B+$@=+(G=;;&!=6!=!'46B;+!$I!PQpipelineSync!<4(A)!G=;;4FU!$'!$A!=A&!'4SB46+!E*4A!A$+!(A!%(%4;(A4!@$F4_!+*(6!IBAG+($A!(6!B64IB;!+$!G=B64!+*4!64'?4'!+$!^B6*!(+6!$B+%B+!<Ba4'!(A!%(%4;(A4!@$F4!E(+*$B+!46+=<;(6*(A)!=
6&AG*'$A([=+($A!%$(A+J!]$+4!+*=+!+*4!'4SB46+!(6!A$+!(+64;I!^B6*4F!+$!+*4!64'?4'!=B+$@=+(G=;;&_!B64!PQflush!(I!A4G466='&J
LMJNJLJKR*4A!+$!O64!5(%4;(A4!P$F4
PBG*!;(T4!=6&AG*'$A$B6!SB4'&!@$F4U!+*4'4!(6!A$!@4=A(A)IB;!%4'I$'@=AG4!$?4'*4=F!E*4A!B6(A)!%(%4;(A4!@$F4J!Y+!(AG'4=646!G;(4A+!=%%;(G=+($A!G$@%;4X(+&U!=AF!4X+'=!G=B+($A!(6!'4SB('4F!+$!%'4?4A+!G;(4A+V64'?4'!F4=F;$GT6U!<B+!%(%4;(A4!@$F4!G=A!$a4'!G$A6(F4'=<;4
%4'I$'@=AG4!(@%'$?4@4A+6U!(A!4XG*=A)4!I$'!(AG'4=64F!@4@$'&!B6=)4!I'$@!;4=?(A)!6+=+4!='$BAF!;$A)4'J
5(%4;(A4!@$F4!(6!@$6+!B64IB;!E*4A!+*4!64'?4'!(6!F(6+=A+U!(J4JU!A4+E$'T!;=+4AG&!bh%(A)!+(@4ic!(6!*()*U!=AF!=;6$!E*4A!@=A&!6@=;;!$%4'=+($A6!='4!<4(A)!%4'I$'@4F!(A!'=%(F!6BGG466($AJ!3*4'4!(6!B6B=;;&!;466!<4A4W+!(A!B6(A)!%(%4;(A4F!G$@@=AF6!E*4A!4=G*!SB4'&!+=T46
@=A&!@B;+(%;46!$I!+*4!G;(4A+V64'?4'!'$BAF0+'(%!+(@4!+$!4X4GB+4J!D!-2206+=+4@4A+!$%4'=+($A!'BA!$A!=!64'?4'!L22!@6!'$BAF0+'(%0+(@4!=E=&!E$B;F!+=T4!L2!64G$AF6!(A!A4+E$'T!;=+4AG&!=;$A4!E(+*$B+!%(%4;(A(A)_!E(+*!%(%4;(A(A)!(+!@=&!6%4AF!=6!;(++;4!=6!2JL!6!E=(+(A)!I$'
'46B;+6!I'$@!+*4!64'?4'J
O64!%(%4;(A4F!G$@@=AF6!E*4A!&$B'!=%%;(G=+($A!F$46!;$+6!$I!6@=;;!INSERTU!UPDATE!=AF!DELETE!$%4'=+($A6!+*=+!G=AZ+!4=6(;&!<4!+'=A6I$'@4F!(A+$!$%4'=+($A6!$A!64+6U!$'!(A+$!=!COPY!$%4'=+($AJ
5(%4;(A4!@$F4!(6!A$+!B64IB;!E*4A!(AI$'@=+($A!I'$@!$A4!$%4'=+($A!(6!'4SB('4F!<&!+*4!G;(4A+!+$!%'$FBG4!+*4!A4X+!$%4'=+($AJ!YA!6BG*!G=646U!+*4!G;(4A+!E$B;F!*=?4!+$!(A+'$FBG4!=!6&AG*'$A([=+($A!%$(A+!=AF!E=(+!I$'!=!IB;;!G;(4A+V64'?4'!'$BAF0+'(%!+$!)4+!+*4!'46B;+6!(+
A44F6J!C$E4?4'U!(+Z6!$I+4A!%$66(<;4!+$!=FgB6+!+*4!G;(4A+!F46()A!+$!4XG*=A)4!+*4!'4SB('4F!(AI$'@=+($A!64'?4'06(F4J!`4=F0@$F(I&0E'(+4!G&G;46!='4!46%4G(=;;&!)$$F!G=AF(F=+46_!I$'!4X=@%;4f
BEGIN;
SELECT x FROM mytable WHERE id = 42 FOR UPDATE;
-- result: x=2
-- client adds 1 to x:
UPDATE mytable SET x = 3 WHERE id = 42;
COMMIT;
G$B;F!<4!@BG*!@$'4!4jG(4A+;&!F$A4!E(+*f
UPDATE mytable SET x = x + 1 WHERE id = 42;
5(%4;(A(A)!(6!;466!B64IB;U!=AF!@$'4!G$@%;4XU!E*4A!=!6(A);4!%(%4;(A4!G$A+=(A6!@B;+(%;4!+'=A6=G+($A6!b644!F)A6'.+%!"#$#G#!cJ
!"#$
!3*4!G;(4A+!E(;;!<;$GT!+'&(A)!+$!64AF!SB4'(46!+$!+*4!64'?4'U!<B+!+*4!64'?4'!E(;;!<;$GT!+'&(A)!+$!64AF!'46B;+6!+$!+*4!G;(4A+!I'$@!SB4'(46!(+!*=6!=;'4=F&!%'$G4664FJ!3*(6!$A;&!$GGB'6!E*4A!+*4!G;(4A+!64AF6!4A$B)*!SB4'(46!+$!W;;!<$+*!(+6!$B+%B+!<Ba4'!=AF!+*4!64'?4'Z6
'4G4(?4!<Ba4'!<4I$'4!(+!6E(+G*46!+$!%'$G466(A)!(A%B+!I'$@!+*4!64'?4'U!<B+!(+Z6!*='F!+$!%'4F(G+!4X=G+;&!E*4A!+*=+!E(;;!*=%%4AJ
&0)1K 2( K>)?6
LMJMJKD6&AG*'$A$B6!#$@@=AF!5'$G466(A)K <.=) KLMJ/JK`4+'(4?(A)!8B4'&!`46B;+6!`$E0<&0`$E
!"#$%&'()**+(&%),
-
YI!&$B!644!=A&+*(A)!(A!+*4!F$GB@4A+=+($A!+*=+!(6!A$+!G$''4G+U!F$46!A$+!@=+G*!&$B'!4X%4'(4AG4!E(+*!+*4!%='+(GB;='!I4=+B'4!$'!'4SB('46!IB'+*4'!G;='(WG=+($AU!%;4=64!B64!1;#4(.)"C!+$!'4%$'+!=!F$GB@4A+=+($A!(66B4J
!"#$%&'(!)*#&'!"!+),-().(+)/,0&1!"!23)01(!)415"-678!"!+)/1%&1
#$%&'()*+!,!-../01211!3*4!5$6+)'4789!:;$<=;!>4?4;$%@4A+!:'$B%