Vladimir Sitnikov á 2016 á¡á á±á¬ááá¯ááºážá¡á á®áááºáá¶á ᬠâPostgreSQL ááŸáá·áº JDBC ááẠáá»á±á¬áºáááºá¡á¬ážáá¯á¶ážááᯠááŸá áºáá¯ááºáá±áááºâ á á á¬áá¬ážááŸááºáááºážááᯠáááºááẠáá»áœááºá¯ááºá¡ááŒá¶ááŒá¯ááá¯áá«áááºá
áááºá¹ááá¬áá±á·áááºáááºážáá« áá»áœááºáá±á¬á·áºáá¬áááºá Vladimir Sitnikov áá«á áá»áœááºáá±á¬áº NetCracker ááŸá¬ á¡áá¯ááºáá¯ááºáá±áᬠ10 ááŸá áºááŸááá«ááŒá®á ááŒá®ážáá±á¬á· áá«á áá¯ááºáá¯ááºá áœááºážá¡á¬ážááᯠáŠážá á¬ážáá±ážáááºá Java ááŸáá·áº áááºáááºáá±á¬ á¡áá¬á¡á¬ážáá¯á¶ážá SQL ááŸáá·áº áááºáááºáá±á¬ á¡áá¬á¡á¬ážáá¯á¶ážááẠáá»áœááºá¯ááºááŸá áºáááºáá±á¬ á¡áá¬ááŒá áºáááºá
áá®áá±á·áá±á¬á· PostgreSQL ááᯠdatabase server á¡ááŒá Ạá áááºá¡áá¯á¶ážááŒá¯áá¯ááºážá áá¯áá¹ááá®ááŸá¬ ááŒá¯á¶ááœá±á·áá²á·ááá¬ááœá±ááᯠááŒá±á¬ááŒáá«áááºá ááŒá®ážáá±á¬á· áá»áœááºáá±á¬áºááá¯á·á Java áá²á· á¡áá¯ááºáá¯ááºáá«áááºá áá«áá±ááá·áº áá®áá±á·ááŒá±á¬ááŒááá·áºá¡áá¬á Java áá²á·áááºááá¯ááºáá«áá°ážá á¡áá±á·á¡áá»áá·áºááŒááá¬ážááá·áºá¡ááá¯ááºážá áááºážááẠá¡ááŒá¬ážáá¬áá¬á áá¬ážáá»á¬ážááœááºáááºáž ááŒá áºáá±á«áºáá«áááºá
áá«ááá¯á·á áá¬ážááŒá±á¬ááŒáááº-
- áá±áá¬ááá°áá¬á¡ááŒá±á¬ááºážá
- áá±áá¬ááááºážáááºážááŒááºážá¡ááŒá±á¬ááºážá
- áá±á¬ááºááŒá®ážáá±á¬á· Performance áá²á· áááºáááºáááºá
- ááŒá®ážáá±á¬á· á¡á²áá®ááŸá¬ ááŒáŸá¯ááºáá¬ážáá²á· áá±á¡á±á¬áẠááœááºáá¯á¶ážááœá±á¡ááŒá±á¬ááºážá
ááá¯ážááŸááºážáá±á¬áá±ážááœááºážáá áºáá¯ááŒáá·áºá ááŒáá«á áá¯á·á áá»áœááºá¯ááºááá¯á·ááẠá¡ááááá±á¬á·ááᯠá¡ááŒá±áá¶á ááá¬ážá០á¡áááºážáá áºáááºážááᯠááœá±ážáááºá
áá±áá¬áá±á·á áºááẠáá°áá®áá±á¬ host áá±á«áºááœáẠáááºááŸááááºá á€á áá¯ááºáá»áá¯ážááŸá¯á¡á¬ážáá¯á¶ážááẠ20 áá®áá®á áá¹ááá·áºááŒá¬áááºá
áá® 20 áá®áá®á áá¹ááá·áºááœá±á á¡áá»á¬ážááŒá®ážáá«á á¡áááºá ááá·áºááœáẠááá¯ááá¯á·áá±á¬ áá±á¬ááºážááá¯áá»áẠ100 ááŸááá«áá áááºááẠá€áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáá áºá áá¹ááá·áºáá»áŸáẠá¡áá»áááºááŒá¯ááºážáá±áááºá ááá¯ááá¯áááºááŸá¬ áá»áœááºá¯ááºááá¯á·ááẠá¡áá»áááºááŒá¯ááºážáá±áá«áááºá
áá«ááᯠáááŒáá¯ááºáá°áž á áá®á¡ááœáẠá¡ááŒá±áá¶á áá»áœááºáá±á¬áºááá¯á·ááᯠáá±ážáá¬ážáá¬ááᯠááŒáá·áºáá«á áá±áá¬áá±á·á áºááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž áá±ážááœááºážáá»á¬ážááᯠáá¯ááºáá±á¬ááºáááºá¡ááœáẠááœá±ážáá»ááºá áá¬ááŸá áºáá¯ááᯠáá±ážáá±á¬ááºáááºá
áááááœá±ážáá»ááºááŸá¯ááŸá¬ ááá¯ážááŸááºážáá±á¬ áá±á¬ááºážááá¯áá»ááºááŒá áºáááºá á¡á²áá«á áá¬áá±á¬ááºážáá²á ááááºáá±á¬á· áá«ááá¯á·á áá°ááŒá®ážáá±á¬á· ááá¯á·ááá¯ááºáá¬áá²á· áá¬á០áááá¯áá°ážá
áá±áá¬áá±á·á áºááœáẠááá¯ááá¯ááŸá¯ááºááœá±ážáá±á¬áºáááºáž ááá¯ááá¯áá¯ááºáá±á¬ááºááá¯ááºáá±á¬ á¡ááá·áºááŒáá·áºáá±ážááœááºážáá áºáá¯áááºáž áá«ááŸááááºá ááœá²ááŒááºážá áááºááŒá¬ááŸá¯á áá¯ááºáá±á¬ááºááŸá¯á ááŒá±á¬ááºážáá²ááá¯ááºáá±á¬ááœá²áááºááŸá¯á áááºááŒáá·áº áá®ážááŒá¬ážáá±á¬ááºážááá¯áá»ááºáá áºáá¯ááᯠááẠáá®ážááŒá¬ážáá±ážááá¯á·ááá¯ááºáááºá
á á°áá«ááá¯ážáá»á²á·áá±ážááŒááºážááŸá¯ááẠáááºááŸáá¡á á®áááºáá¶á á¬ááœáẠáá»áœááºá¯ááºááá¯á·áá«áááºáááºááá¯ááºáá«á áá»áœááºá¯ááºááá¯á·ááẠáá±áá¬áá±á·á áºá០áá áºáá¯áá¯ááᯠááá¯áá»ááºááŒá®áž á¡áá»áá¯á·áá±á¬áá¯á¶á á¶ááŒáá·áº ááœá²á·á ááºážáá¬ážááá·áº ááá¹áá á¬áááºážáá áºáᯠááŸááááºá ááá¯ááá¯áááºááŸá¬ á€áááºááŸá¬ áá»áœááºá¯ááºááá¯á·ááá¯áá»ááºááá·áºá¡áá¬ááŒá áºáááºá ááá¯á·áá±á¬áº ááá¯ááŸáá·áº áá±á¬ááºááŸá áºáá»á¬ážááœáẠáááŒá áºááá¯ááºáá«á áá®áá±á¬á· áá»áœááºáá±á¬áºááá¯á·á á¡á²áá«ááᯠááŸááºáááºážáááºááŒá®áž á¡ááááá°ááœá±ááᯠááŸá¯ááºáááºážááá¯ááºáááºá
áá»áœááºá¯ááºááá¯á·áá¯ááºáá±á¬ááºááá¯ááºááá·áºá¡áá¬ááŸá¬ ááá¯ážááŸááºážáá±á¬áá±ážááŒááºážááŸá¯ááŸáá·áº ááá¯ážáá»á²á·áá±ážááŒááºážááŸá¯ááŒá áºáááºá
áá»ááºážáááºááŸá¯áá áºáá¯á á®ááá°ážááŒá¬ážáá»ááºááá¬áá²á
ááá¯ážááŸááºážáá±á¬áá±ážááŒááºážáá»ááºááẠáá áºááŒáááºáááºážáá¯ááºáá±á¬ááºáááºá¡ááœáẠáá±á¬ááºážááœááºáááºá ááŒá®ážáá¬áá²á· áá±á·ááœá¬ážáááºá ááŒá¿áá¬ááŸá¬ áááºážááẠbinary data format ááᯠááá¶á·ááá¯ážáá±á¬ááŒá±á¬áá·áºá ááá¯ááá¯áááºááŸá¬ á¡áá»áá¯á·áá±á¬á áœááºážáá±á¬ááºáááºááŒáá·áºá áá áºáá»á¬ážá¡ááœáẠáááá·áºáá»á±á¬áºáá«á
ááá¯ážáá»á²á·áá±ážááŒááºážááŸá¯ â ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááœáẠá¡áá»áááºáá¯ááºáááºáá¬á á±áááºá áá«ááᯠáá»áœááºáá±á¬áºááá¯á· áá¯ááºáá²á·ááŒá®áž á áááºá¡áá¯á¶ážááŒá¯áá²á·áá«áááºá áá«á ááááºááᯠáá»áœááºáá±á¬áºááá¯á·ááᯠáá°áá®áá²á·áááºá ááœá²ááŒááºážá áááºááŒá¬ááŒááºážá¡ááœáẠáááºáá¬áá¯á¶áá¬áááá«á áá±áá¬ááœáŸá²ááŒá±á¬ááºážááŒááºážá¡ááœáẠá á¯áá±á¬ááºážááœá±áá»á¬áž ááŸááá«áááºá áá±áá¬ááᯠbinary áá±á¬áºáááºááŒáá·áº ááœáŸá²ááŒá±á¬ááºážááŒááºážááẠááá¯ááá¯áááá±á¬ááºáááºá
áááºáá±á·áá»áá·áºááŒáá¡á±á¬ááºá á€áááºááŸá¬ áá¯á¶ááŸááºá¡ááá®áá±ážááŸááºážáá áºáá¯ááŸáá·áºáá°áááºá Java á áááºááá¯á· ááŒá áºááá¯ááºáááºá
áá»áœááºáá±á¬áºááá¯á·á ááŒá±áá¬áá»ááºááᯠáááºáá®ážáááºá á¡áááá·áºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá²á·áááºá á¡áá®ážáááºáááºáá®ážáá¬ážáááºá áá®ááŸá¬ á¡ááŸá¬ážá áááºááŸá¬áá² ááŒááá¬ááá¬áá²? ááŒá¿áá¬áááŸááá«áá°ážá á€áááºááŸá¬ á á¬á¡á¯ááºá¡á¬ážáá¯á¶ážááœáẠáá±á¬áºááŒáá¬ážááŒááºážááŒá áºáááºá áá®ááá¯áá±ážáááŸá¬áá±á«á·á á¡áá±á¬ááºážáá¯á¶ážá áœááºážáá±á¬ááºáááºááᯠááá¯áá»ááºááẠáá®ááá¯áá±ážáá«á
áá«áá±ááá·áº áááºááœá±á·ááŸá¬áá±á¬á· áá«á á¡áá¯ááºáááŒá áºáá°ážááá¯áᬠááŒááá±áá«áááºá á¡áááºááŒá±á¬ááºá·? áá¬ááŒá áºááá¯á·áá²ááá¯áá±á¬á· áá»áœááºáá±á¬áºááá¯á·ááŸá¬ âá¡áá®ážáááºâ áááºážáááºážááŸááááºá áá«ááá¯áá¯ááºáá²á·á¡áá«á áá±áá¬áá±á·á áºá¡ááŒááºááá± áá±áá¬áá±á·á áºáá áºáá¯áá²á· á¡áá¯ááºáá¯ááºáá²á· áá±ážááááºáá±á¬ááºáá°áá²á·áá°áááºááá¯á· áá±á«áºáá¬áá«áááºá áá»áœááºá¯ááºááá¯á·á "PARSE EXECUTE DEALLOCATE" áá¯ááŒá±á¬áá²á·áááºá
á¡áááºááŒá±á¬áá·áº á€á¡ááá¯áááºáá®ážááŸá¯ááŸáá·áº áá¯ááºááŒááºáá»ááºá¡á¬ážáá¯á¶ážááᯠááŒá¯ááºáá»ááááºážá áá°ááá¯á·ááᯠáááºáá°á០áááá¯á¡ááºáá«áá°ážá ááá¯á·áá±á¬áºPreparedStatements ááœááºááŒá áºáá±á·ááŸááááºááŸá¬áá»áœááºá¯ááºááá¯á·áááºáááºážááá¯á·ááá¯ááááºáá±á¬á¡áá«á áááºážááá¯á·áááºáá±áá¬áá±á·á áºááŸáá¡áá¬á¡á¬ážáá¯á¶ážááá¯ááááºááá¯ááºááŒááºážááŒá áºáááºá áá«á áá«ááá¯á·ááá¯áá»ááºáá¬ááá¯ááºáá°ážá
áá»áœááºá¯ááºááá¯á·ááẠáá»ááºážáá¬áá±á¬áá°áá»á¬ážáá²á·ááá¯á· á¡ááŒá±áá¶ááŸáá·áºá¡áá° á¡áá¯ááºáá¯ááºááá¯áá«áááºá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·ááá¯ááºááŒááºáá»ááºááᯠáá áºááŒáááºáá°áᬠááŒááºáááºááŒá®ážáá±á¬áẠá¡ááŒáááºáá»á¬ážá áœá¬ áá¯ááºáá±á¬ááºáá«áááºá ááááºáá±á¬á·á á¡ááŒáááºáá»á¬ážá áœá¬ - á€áááºáá»áŸá±á¬ááºááœáŸá¬áá»á¬ážááááá áºáá¯áá¯á¶ážááœááºáá áºááŒáááºááŒá áºááẠ- áááºážááá¯á·ááá¯ááœá²ááŒááºážá áááºááŒá¬áá¬ážáááºá áá»áœááºá¯ááºááá¯á·ááẠááá°áá®áá±á¬ REST áá»á¬ážááœááºáá°áá®áá±á¬áá¯ááºááŒááºáá»áẠid ááá¯á¡áá¯á¶ážááŒá¯áááºá áá«á áá»áœááºáá±á¬áºááá¯á·áá²á· áááºááŸááºážáá»ááºáá«á
áá«ááᯠáááºááá¯á¡á±á¬ááºááŒááºááá¯ááºááá²á
á¡ááœááºááá¯ážááŸááºážáá«ááẠ- ááŒá±áá¬áá»ááºáá»á¬ážááá¯ááááºáááºáááá¯á¡ááºáá«á áá»áœááºá¯ááºááá¯á·á€áá²á·ááá¯á·áá±ážáááº- "ááŒááºáááºáá«" "áá¯ááºáá±á¬ááºáááº" á
áá®ááá¯áá»áá¯áž áá áºáá¯áá¯ááᯠááœáŸáá·áºáááºááá¯ááºááẠáá áºáá±áá¬áá¬ááŸá¬ áá áºáá¯áᯠááŒáá·áºáá»áŸá¶ááœá¬ážáááºááá¯áᬠááŸááºážáá«áááºá áááŸááºážáááºážááẠá ááºážááŒáá·áºááá¯ááºáá«áááºá áá®ááá¯ážááŸááºážáá²á·áááºážáááºážááᯠá¡áá¯á¶ážááŒá¯áá²á· á á¶ááœáŸááºážáá áºáá¯áá±ážááŒáá·áºáá¡á±á¬ááºá ááŒá±áá¬áá»ááºáá áºáá¯áááºáá®ážáá«á áá»áœááºá¯ááºááá¯á·ááẠáááºážááᯠáááá¯ááºáá¬á á¡áá»áá¯á·áá±á¬áá¬ážááŸááºážááœááºááœáá·áºááŒá®áž áááºážááœááºáá«ááŸááá±á¬ ááŸááºáá¬ááºá¡á¬ážáá¯á¶áž áá¯á¶ážááŸá¯á¶ážááœá¬ážáááŒáá·áº á¡ááœááºáá»ááºááŒááºá áœá¬ áá»ááºá á®ážááœá¬ážáááºááᯠááœá±á·ááŸáááááºá
ááá¯ááá¯á·áá±á¬ á¡ááŸá¬ážáá»á¬ážááᯠá¡ááœááºááá° ááŒááºááá¯ááºáááºááŸá¬ ááŸááºážáá«áááºá áá«áá°ááá¯á·á¡ááŒá±á¬ááºážááŒá±á¬ááŸá¬ááá¯ááºáá°ážá áá«áá±ááá·áº áá¬ážááŸááºážá¡áá áºá ááá¯ááŒááºáááºááá¯á· ááŒá±á¬áá»ááºáá«áááºá áááºážáááºážá ááá¯ááºáá²áá±ááá·áº ááŒáááºáá±áááºá
ááŸááºáááºá áœá¬á¡áá¯ááºáá¯ááºáá¯á¶á áá®á¡ááœáẠáá«ááá¯á·áá¬áá¯ááºáááŸá¬áá²?
áááºááœá±á·ááœááºá á¡ááá®áá±ážááŸááºážáá»á¬ážááẠáá¯ááºááŒááºáá»ááºáá»á¬ážááᯠá¡ááŒá²ááááºáá«áááºá á á¬á¡á¯ááºááá¯ááºážááœáẠááááºáááºááŒá±á¬ááŒáááºá ááá¯ááºááẠmemory áá±á«ááºááœá¬ážáááá·áºáááºá
ááŸáá·áº PostgreSQL ááẠqueries áá»á¬ážááᯠáááºááá¯á· cache áá¯ááºááááºááᯠááááá«á á ááºááŸááºáá áºáá¯á á®ááẠဠcache ááᯠáá°á·áá¬áá¬áá° áááºáá®ážááẠááá¯á¡ááºáááºá
ááŒá®ážáá±á¬á· ááœá²ááŒááºážá áááºááŒá¬ááá¯á·áááºáž á¡áá»áááºáááŒá¯ááºážáá»ááºáá«áá°ážá
áá¯á¶ážá á¶á¡ááá¯ááºáž áá»áœááºáá±á¬áºááá¯á·ááŸá¬ ááœá±ážáá»ááºá áᬠááŸá áºáá¯ááŸááááºá
áááááœá±ážáá»ááºááŸá¯ááŸá¬ áá»áœááºá¯ááºááá¯á·á áááºážááá¯áá°á PgSQL ááœáẠá¡áá¬á¡á¬ážáá¯á¶ážááᯠááŒá¯á¶ááŒáá·áºááŒáá«á áá¯á·á á¡á²áá®ááŸá¬ áááºááŸáºáá áºáá¯ááŸááááºá á¡áá¬á¡á¬ážáá¯á¶ážááᯠááááºážáááºážáá¬ážáááºá ááŒá®ážááŒááºáá±á¬ááœááºááŸáá·áºáá«áááá·áºáááºá áá«ááᯠááŒááºáááºá áá»áœááºá¯ááºááá¯á·ááœáẠáá±á¬ááºážááá¯áá»áẠ100500 ááŸááááºá á¡áá¯ááºááá¯ááºáá«áá°ážá áá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠáá¯ááºáá¯á¶ážáá¯ááºáááºážáá»á¬ážá¡ááŒá Ạááá¯ááºááá¯ááºááŒá±á¬ááºážáá²ááẠáá»áœááºá¯ááºááá¯á·ááá±á¬ááá°áá«á ááá¯ááºáá°ážá ááá¯ááºáá°ážá
áá»áœááºá¯ááºááá¯á·ááœáẠáá¯áááááœá±ážáá»ááºá áá¬áá áºáá¯ááŸáááẠ- áááºážááá¯áá°á ááá¯ááºááá¯ááºááŒááºáá«á áá»áœááºá¯ááºááá¯á·ááẠá¡áááºážá¡ááŒá áºáá»á¬ážááá¯ááœáá·áºááŒá®áž ááŒááºáá±á¬ááºááá¯ááºáá«áááºá ááŒááºáááºáž ááŒááºáááºá áá¯ááºááá¯á·á áá®áá±á¬ááºááááºáá²áá°ážááá¯áᬠáááá¬ááááºá
áááºážááẠ2015 ááŒáá¯ááºáááœááºáá±á«áºáá¬áááºá ááá¯ááœáẠááá¯ááá¯áá±ááºáá®áá±á¬ áá¬ážááŸááºážáá áºáᯠááŸááá¬áááºá ááŒá®ážáá±á¬á· á¡áá¬á¡á¬ážáá¯á¶ážá á¡áááºážáá±á¬ááºážáááºá áááºážááẠáá±á¬ááºážááœááºá áœá¬á¡áá¯ááºáá¯ááºáá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠá¡ááá®áá±ážááŸááºážááœáẠáááºááá·áºá¡áá¬ááá¯áá»áŸ ááŒá±á¬ááºážáá²ááŒááºážáááŸááá«á PgSQL ááŠážáááºáá»ááºááá¯ááẠáá»áœááºá¯ááºááá¯á·áááœá±ážáá±á¬á·áá²á ááá¯ááá¯áááºááŸá¬ á€á¡áá¬ááẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠáá¯ááºáá»á ááááºá¡á¬ážáá¯á¶ážááᯠáá¯ááá®ážáá«ážá¡áá áá»áŸá±á¬á·áá»ááẠáá¯á¶áá±á¬ááºáá«áááºá
ááá¯á·ááŒá±á¬áá·áºá áá áºááŒáááºáá±á¬ááºážááá¯ááŸá¯ááá¯ááºážá¡ááœáẠáá±áá¬áá±á·á áºá¡ááœááºáž ááŸááºáá¬ááºááᯠááŒá¯ááºážáá®ážááŒááºážá០ááŸá±á¬ááºááŸá¬ážááá¯ááºááẠ5th áááºáááºááŸá¯ááœáẠáá¬áá¬-ááŒááºáááºáá¬ážáá±á¬ áá¯ááºááŒááºáá»ááºáá»á¬ážá¡á¬áž á¡áááºáááºá á±áá«áááºá
áá±áž - áá¶áá«ááºááœá±á áááºááŸá¬áá²á áááºážáá¬ááœá±ááá±áá¬áá² áá±á¬ááºážááá¯ááŸá¯áá áºáá¯á á®ááœááºáááºážáááá¯ááºááá¯ááºááŒá áºáá±á¬ááŒá±á¬áá·áºá€ááœááºáá»áœááºáá±á¬áºáá¶áá«ááºáá»á¬ážááá±ážáá«á
áá»áœááºá¯ááºááá¯á·ááá±ážááŒááºážáá»ááºáá»á¬ážááẠOLTP á á¯á¶á ááºážáá±ážááŒááºážáá»ááºáá»á¬ážááᯠááá¯ááºážááŒá¬ážá áááºááŒá¬ááẠ20 áá®áá®á áá¹ááá·áºááá·áºááŒá¬á¡á±á¬ááºááŒá¯áá¯ááºáá¬ážááŒááºážááŒá áºáááºá á á®á á áºáááºá¡ááœáẠ0,5 áá®áá®á áá¹ááá·áºá ááœá²ááŒááºážá áááºááŒá¬ááẠ20 áá®áá®á áá¹ááá·áºááŸááááºá áá±á¬ááºážááá¯ááŸá¯ - á á¬áá¬áž 10 KiBá á¡á á®á¡á ááºááá¯ááºáž 170á á€áááºááŸá¬ OLTP áá±á¬ááºážááá¯áá»ááºáá áºáá¯ááŒá áºáááºá áááºážááẠ1á 5á 10 ááá¯ááºážáá»á¬ážáá±á¬ááºážááá¯áááºá áá áºáá«áá áºáá¶ááœááºááá¯áááºá
áá«áá±ááá·áº 20 áá®áá®á áá¹ááá·áºááᯠáá¯á¶ážááááŒá¯ááºážáá»ááºáá«áá°ážá á¡á²áá«ááᯠ0 ááá¯ááŒá®áž áá»áŸá±á¬á·ááá¯ááºáááºá á¡áá¬á¡á¬ážáá¯á¶ážá á¡áááºážáá±á¬ááºážáááºá
áá®ááá± áá¬áá°ááá¯á·áááá²á ááá·áºááœáẠJava ááŸááá«áá áááºááẠáá±ááºáá®áááá¯ááºáá¬áá¬ážááŸááºážááᯠáá°á áááºážááŒá±á¬ááºáá«á
áááºá áááŒá¬ážáá¬áá¬á áá¬ážááᯠááŒá±á¬áááºáááºááá¯ááẠá ááºážá á¬ážááŒáá·áºáá«- áá«áááºáž áááºááá¯á¡ááºááŸá¬áá¬ážá á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº áá±á¬ááºáá¯á¶ážáá¬áá¬á áá¬ážáááŸá¯áá±á¬áá·áºááŸááŒáá·áºáá»áŸáẠá¥ááá¬á¡á¬ážááŒáá·áº PL 8 ááá¯á·ááá¯áẠááá·áºááœáẠLibPQ ááŸááá»áŸáẠáááºááẠááœááºáá»ááºááŒááºážá ááœá²ááŒááºážá áááºááŒá¬ááŒááºážááœáẠá¡áá»áááºááŒá¯ááºážáá±ááŒááºážááá¯ááºááŒá±á¬ááºáž ááá·áºá¡ááœáẠááŸááºážááŸááºážáááºážáááºážáááááá±á¬ááŒá±á¬áá·áº áááºážááẠá á áºáá±ážááá»áá¯ážáááºáá«áááºá áááºááá¯áá²? á¡áá¬á¡á¬ážáá¯á¶ážá¡ááá²á·ááŒá áºáááºá
á¡ááŸá¬ážá¡ááœááºážáá»á¬ážááŸáá·áº áá°ážááŒá¬ážáá»ááºá¡áá»áá¯á·ááŸááá±áááºááŸááœá²á ááŒá®ážáá±á¬á· áá°ááá¯á·á¡ááŒá±á¬ááºážááᯠá¡áá¯áá²ááŒá±á¬áááºá á¡áá»á¬ážá á¯ááẠá ááºááŸá¯ááŸá±ážáá±á¬ááºážáá¯áá±ááááá¬á áá»áœááºá¯ááºááá¯á·ááœá±á·ááŸááá²á·ááá·áºá¡áá¬áá»á¬ážá¡ááŒá±á¬ááºážá áá»áœááºá¯ááºááá¯á·ááŒá¯á¶ááœá±á·áá²á·áááá·áºá¡áá¬áá»á¬ážá¡ááŒá±á¬ááºážááŒá áºáááºá
áá±á¬ááºážááá¯ááŸá¯ááᯠá¡ááºááá¯ááºá¡á¬ážááá¯ááºáá¯ááºáá±ážáááºá ááŒá áºáá»ááºá áá áºá á¯á¶áá áºáá±á¬ááºááẠSQL query ááᯠááŒá áºáá±á«áºá á±áááº
áá°áá¬ááá¯á·ááá¯ážáá±áá¬áá²á ááá°áá®áá²á· ááŒáá¯ážáá áºáá»á±á¬ááºážáá²á· á¡áá¯á¶ážáááºááá¯ááºááá¯ááºáž á¡áááºáááŒá±áá°ážá
á€ááœá²ááŒá¬ážáá±á¬á á¬ááŒá±á¬ááºážá hashCode ááᯠáááºáá¶áááºááŸá¯ááẠááá¯á¡ááºáááºá áá«á ááááºááᯠCPU á¡áá¯ááºáá áºáá¯áá« - ááŸáááŒá®ážáá¬áž hash áá áºáá¯áá²ááŸá¬áá±á¬áẠááŸááºáá»á¬ážáá²á· áá±á¬ááºážááá¯áá»ááºá á¬áá¬ážáá áºáá¯ááᯠááŸá¬ááᬠá¡áááºážáááœááºáá«áá°ážá ááá¯á·ááŒá±á¬áá·áºá áááá¯á¶ážáá»á¯ááºááẠááá¯ážááŸááºážááẠ- áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáááŒá¯áá¯ááºáá«ááŸáá·áºá áááºážááá¯á·ááᯠvariable áá áºáá¯ááœáẠááááºážáááºážáá«á áááºážááŒá±á¬ááºááŒáá±á¬á·á
áá±á¬ááºááŒá¿áá¬á áá±áá¬á¡áá»áá¯ážá¡á á¬ážáá»á¬ážááẠá¡áá±ážááŒá®ážáá«áááºá áááºááᯠNULL á¡áá»áá¯ážá¡á á¬ážááŸááááºááá¯áᬠá¡áá±ážáááŒá®ážáá«áá°ážá áá áºáá»áá¯ážáá»áá¯ážááŸááá«á á± ORM ááœá±ááŸááááºá Int ááá¯ááẠsetInt ááá¯á· ááŒá±á¬ááá¯á·ááá«áááºá NULL ááŒá áºáá«á áááºážááᯠá¡ááŒá²áááºáž VARCHAR ááŒá áºáá«á á±á á¡áá¯á¶ážááœáẠNULL áá°ááẠá¡áááºá¡áá¬ááœá¬ááŒá¬ážááááºážá áá±áá¬áá±á·á áºááá¯ááºááá¯ááºá á¡áá¬á¡á¬ážáá¯á¶ážááᯠáá¬ážáááºáá«áááá·áºáááºá ááŒá®ážáá±á¬á· áá®áá¯á¶á á¡áá¯ááºááá¯ááºáá°ážá
áááºááœá±á·ááŸá¬áá±á¬á· database á áá¯á¶ážáááá¯áá áá¯ááºáá«áá°ážá á€áááºááŸá¬ áá¶áá«ááºááŒá áºááŒá±á¬ááºáž áááá¡ááŒáááºááŒá±á¬ááŒá®áž áá¯ááá á¡ááŒáááºááœáẠáááºážááẠVARCHAR áá¯ááŒá±á¬áá«áá áá¬áá¬ááŒááºáááºáá¬ážáá±á¬ áá¯ááºááŒááºáá»ááºáá»á¬ážááᯠááŒááºáááºá¡áá¯á¶ážááŒá¯ááẠáááŒá áºááá¯ááºáá«á á€ááá á¹á ááœááºá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·ááá¯ááºááŒááºáá»ááºááᯠááŒááºáááºáááºáá®ážááááºááŒá áºáá«áááºá
á¡áááºá áááºááẠáá°áá®áá±á¬áá±ážááœááºážááᯠáá¯ááºáá±á¬ááºáá±áá«áá ááá·áºáá±á¬áºáá¶ááŸá áá±áá¬á¡áá»áá¯ážá¡á á¬ážáá»á¬ážááᯠááá±á¬ááœá±ážá á±ááẠáá±áá»á¬áá«á á±á NULL ááᯠááááá¬ážááá¯á· ááá¯áá«áááºá ááŒááºáááºáá»ááºáá¯ááºááŒááºáá»ááºáá»á¬ážááᯠá áááºá¡áá¯á¶ážááŒá¯ááŒá®ážáá±á¬áẠá€á¡áá¬ááẠáá»áœááºá¯ááºááá¯á·ááœáẠááŒá áºáá±á·ááŸááá±á¬ á¡ááŸá¬ážáá áºáá¯ááŒá áºáááºá
áá±á¬ááºážááŒá®á ááœáá·áºáá¬ážáááºá áááá¯ááºáá¬ááᯠáá±á«áºááœá¬ážáᬠááŒá áºááá¯ááºáááºá ááŒá®ážáá±á¬á· áá¯ááºáá¯ááºá áœááºážá¡á¬áž áá»áááºážááœá¬ážáááºá á¡áá¬ááœá± ááá¯ážáá¬áááºá
áá«á áááºááá¯ááŒá áºáá¬áá²á á€á¡áá¬ááẠáá»áœááºááœááºážáá»áẠááá¯á·ááá¯áẠá¡ááºá¹áá«áááºáá áºáá¯áá¬ážá áá¶ááá±á¬ááºážá áœá¬ááŒáá·áºá á€á¡áá¬ááẠbug ááá¯á·ááá¯áẠá¡ááºá¹áá«áááºáá¯ááºááá¯áẠáá¬ážááááºááá¯ááºáá²á·áá«á áá«áá±ááá·áº áá®ááŒá¿áá¬ááᯠááŒááºáá¯ááºááá¯á·á¡ááœáẠá¡ááœááºááá¯ážááŸááºážáá²á· ááŒááºááœááºážáá áºáá¯ááŸááá«áááºá áá°áááẠááá»áŸá±á¬áºááá·áºáá² áá»áœááºáá±á¬áºááá¯á·ááᯠááŒá¯á¶ááá¯ááá¯ááºááá¯ááºáá²á·áááºá áááºážááœáẠááá¬ážáá áºáá¯á០á á¬áá¬ážá¡ááá¯ááºáž ááá°áá¬áá°ááŒááºáž áá«áááºáááºá áá»áœááºá¯ááºááá¯á·ááœáẠááá¯ááá¯á·áá±á¬ áá±á¬ááºážááá¯ááŸá¯áá»á¬áž ááá¯áá»á¬ážáá¬áááºá á ááºážáááºážá¡áá áááºážááá¯á·ááœáẠá á¬ážááœá² ááŸá áºáᯠááá¯á·ááá¯áẠáá¯á¶ážáᯠáá«áááºáá±á¬áºáááºáž ááá¯ááá¯á·áá±á¬ ááŒááºááœáá·áºááá·áº á¡ááŒá±á¡áá±áá»áá¯áž ááŸááá«áááºá áááºááá±áá¬áá±á·á áºááŸáááºááá·áºáá¬ážááŸááºážááá¯áááá¯áá°á áááºážááá¯áá á¬ážáá«á
á¡áááá¡áá»ááºááŸá¬ áá»áœááºá¯ááºááá¯á·ááœáẠáá±á¬áºáá¶ááŸá áºáá¯ááŸááááºá áá áºáá¯á á®ááᯠá¡ááœáŸááºážááŒá¯áá¬ážáááºá NULL áá±á¬áºáá¶áá áºáá¯ááœáẠá¡áááºážáá áºáááºážááŸááááºá áá¯ááááá±á¬áºáá¶ááœáẠá á¬ááŒá±á¬ááºáž 20 áá¬áá«ááŸááááºá áá»áœááºá¯ááºááá¯á·ááẠááá·áºáááºááááºážááŸááºáá»á¬ážááá«áá² áá¯ááºáá±á¬ááºáá±á¬á¡áá«á á¡áá¬á¡á¬ážáá¯á¶áž áá±á¬ááºážááœááºá áœá¬ á¡áá¯ááºáá¯ááºáá«áááºá
á¡áááºá áá»áœááºá¯ááºááá¯á·ááẠááá·áºáááºááááºážááŸááºáá»á¬ážááŒáá·áº á áááºáá¯ááºáá±á¬ááºáá«áá ááá¯ááá¯áááºááŸá¬ áá»áœááºá¯ááºááá¯á·ááẠ"?" ááá¯á·ááá¯áẠáá»áœááºá¯ááºááá¯á·ááá±á¬ááºážááá¯áá»ááºá¡ááœáẠâá áá±á«áºáá¬âá áá»áœááºá¯ááºááá¯á· áá¬ááá¯ááá°ááááºáááºážá
ááááá¯á¶áž ááœááºáá»ááºááŸá¯áᬠáá»áŸá±á¬áºááá·áºáá¬ážáááá¯áá«áá²á áá¯ááááá áºáá¯á áááºážáááºážááŒááºáááºá áá áºá á¯á¶áá áºáᯠááááºážáááºážáá¬ážáááºá ááááá á áá¯áá¹áá ááá¹á áá ááá¯á·áá±á¬áẠáá±á«ááºááœá² - ááŸáá·áºááá¯áá²á·ááá¯á·áá±á¬áá áºáá¯áá¯á ááŒá®ážáá±á¬á· á¡ááá¯ážáá¯á¶ážááá±á¬á· ááá¹ááááŒá±á¬áẠááœááºáá»ááºááŸá¯ááŸá¬ áá®ááá¯ááŒá áºááœá¬ážáá¬áá«á á¡ááŸááºáááẠááœááºáá»ááºáá±ážá¡á á®á¡á á¥áºááᯠáá¬ážáááºááẠááœááºáá»ááºááŸá¯ ááŒá±á¬ááºááŒáááºáááá ááŒá¯áá¯ááºááẠááá¯á¡ááºááŒá±á¬ááºáž áááºáá°ááááááºážá
áááºáá°á á¡ááŒá áºááŸááá²á áá¬ááŒá áºáá¬áá²? áá±áá¬áá±á·á áºááœáẠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºáž áá«ááŸááááºá áááºážááẠáá±áá¯áá»ááá á¹á á¡ááœáẠá¡áá±á¬ááºážáá¯á¶ážááŒá áºáá¯á¶ááááºá ááá¯á·ááŒá±á¬áá·áºá áá áºáá»áááºáá»áááºááŸá ááŒá®áž áá°áááẠáá±áá¯áá»á¡á á®á¡á ááºáá áºáá¯ááá¯á· ááŒá±á¬ááºážááœá¬ážáááºá áá¶ááá±á¬ááºážá áœá¬ááŒáá·áº ááœá²ááŒá¬ážááœá¬ážááá¯ááºáááºá á¡áá°áá°áááºááŒá áºááá¯ááºáááºá ááá¯á·ááá¯áẠááœá²ááŒá¬ážááá¯ááºáááºá ááŒá®ážáá±á¬á· áá®á¡ááŒá¯á¡áá°ááᯠááŒá áºáá±á«áºá á±áá²á· á¡ááá¯ááºážá¡áá¬áááºááá¯ážá¡áá»áá¯á·áááºáž ááŸááá«áááºá
áááºážááŸáá·áºáááºáááºá áááºáá¬áá¯ááºááá¯ááºááááºážá á€ááœááºá áá¯ááºáá«áááºá áá¬ááá¯áááá¯áá°ááááºááá¯ááá¯áááºáá²áááºá áá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯áá±á¬ ááá¯ážááŸááºážáá±á¬ááŒá±ááŸááºážáá»ááºáá áºáá¯ááŸááá«áááºá á€áááºááŸá¬ +0á OFFSET 0 ááŒá áºáááºá ááá¯ááá¯á·áá±á¬ ááŒá±ááŸááºážáááºážáá»á¬ážááᯠááẠáá±áá»á¬áá±á«áẠáááá«áááºá áá»áœááºá¯ááºááá¯á·ááẠáááºážááá¯áá°á áá±á¬ááºážááá¯ááŸá¯ááœáẠâ+0â ááá¯ááá·áºáá¯á¶ááŒáá·áº á¡á¬ážáá¯á¶ážá¡áááºááŒá±áá«áááºá áá±á¬ááºááŸááŒáááºá
á¡ááŒá¬ážááœá±ážáá»ááºá áá¬áá áºáá¯ááŸáááẠ- á¡á á®á¡á ááºáá»á¬ážááá¯ááá¯ááá¯ááá¯áá áá¯ááºááŒáá·áºááŸá¯áá«á áá±á¬á·ááºáá²áá±ážáá¬ážáá°ááẠáá±á¬ááºážááá¯ááŸá¯ááᯠáá±ážáá¯á¶áá¬áá âááœá²ááŒááºážá áááºááŒá¬ááŸááºážááŒáá«â áá¯áááºáž 6 ááŒáááºááŒá±á¬ááá«áááºá 5 ááá¯áááºáá±á¬á· á¡áá¯ááºáááŒá áºáá«áá°ážá
ááááááœá±ážáá»ááºá áá¬áá áºáá¯ááŸáááẠ- pgsql-hackers áá¶á á¬áá áºá á±á¬ááºáá±ážáá«á áá«áá±ááá·áº áá»áœááºáá±á¬áºáá±ážáá²á·áááºá áá«á bug áá«ááŸááá¯áẠfeature áá áºáá¯áá¬ážááá¯áᬠáááŸááºážáá±ážáá«áá°ážá
á€á¡áá¬ááẠbug ááá¯á·ááá¯áẠá¡ááºá¹áá«áááºáá áºáá¯áá¬ážáᯠáá»áœááºá¯ááºááá¯á·ááœá±ážáá±áá»áááºááœááºá áááºážááᯠááŒááºááŒáá«á áá¯á·á áá»áœááºá¯ááºááá¯á·ááá±á¬ááºážááá¯ááŸá¯ááá¯áá¶áá°ááŒá®áž "+0" ááá¯ááá·áºááŒáá«á áá¯á·á á¡á¬ážáá¯á¶ážá¡áááºááŒá±áááºá áááºá¹áá±áááŸá áºáá¯áá²á· á¡á²áá«á áááºááá¯áá²á áá¬áá²ááá¯áᬠá ááºážá á¬ážááá¯á·áá±á¬áẠáááá¯áá«áá°ážá á¡ááœááºááá¯ážááŸááºážáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠá€áá±á¬áºáá¶ááŸá á¡ááœáŸááºážáá áºáá¯á¡á¬áž á¡áá¯á¶ážááŒá¯ááŒááºážá០áá±áá¬áá±á·á áºááᯠááá¯ážááŸááºážá áœá¬ áá¬ážááŒá áºáá¬ážáááºá áá»áœááºá¯ááºááá¯á·ááœáẠ"+0" áá±á¬áºáá¶ááœáẠá¡ááœáŸááºážáá áºáá¯áááŸááá«á áá±áá¬áá±á·á áºááẠá¡ááœáŸááºážááá¯á¡áá¯á¶ážáááŒá¯áá«á á¡á¬ážáá¯á¶ážá¡áááºááŒá±áá«áááºá
áá«á á ááºážáááºáž á áá»ááºááᯠááŸááºážááŒáá¬áá«á ááᯠáááºááŸááá¬ážááŸááºážáá»á¬ážááœáẠáá±á¬ááºááœááºážáá¶áá¬ážáá±á¬ ááááºážááŸááºáá»á¬ážááŸááá«á áááºážááᯠ6 ááŒáááºááŒá¯áá¯ááºááá«áááºá ááá·áºááœáẠáá±á¬ááºáááºáá¬ážáá±á¬ ááááºážááŸááºáá»á¬ážáááŸááá«áá á€á¡áá¬ááẠáá»áœááºá¯ááºááá¯á·áá¯ááºáá±á¬ááºáááºá á¡áá¯á¶ážááœáẠá€áá±á¬ááºážááá¯ááŸá¯ááŸá¬ áá»ááŸá¯á¶ážááœá¬ážááŒááºážááŒá áºááẠá áá«áᬠáááºážáá»ááºáá²á·á¡áá¬ááá¯ááºáá«áá°ážá
áááºáá±á¬ááºááŒá áºááá¯ááºáá²á áá®ááŸá¬ ááá¯ážáá±á¬ááºá ááá¯ááŸá¬ ááá¯ážáá±á¬ááºá ááááºáá±á¬á· ááá¯ážá áá±áá¬ááá¯ááºážááŸá¬ááŸááááºá
á¡áá®ážáááºááŒáá·áºááŒáá«á áá¯á·á á¥ááá¬á¡á¬ážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááœáẠá¡á á®á¡á ááºááŸá áºáá¯ááŸááááºá ááá¬áž S ááŸáá·áº ááá¬áž B áá«áá±á¬ á¡á á®á¡á áẠA Query - ááá¬ážáá áºáá¯ááŸáá±áá¬ááá¯ááœá±ážáá»ááºáá«á á€ááá á¹á ááœááºáá»áœááºá¯ááºááá¯á·áá¬ááŸááááºáááºážá áá»áœááºá¯ááºááá¯á· á¡ááŸá¬ážáá áºáᯠááŸááá«áááºá á¡áááºáá±á¬áºááŒáá«áá»á¬áž á¡á¬ážáá¯á¶ážááŸááá«áááºá á ááºážáááºážáá»ááºááŸá¬ - bug ááẠáá±áá¬ááá¯ááºážááœááºááŸááááºá áá»áœááºá¯ááºááá¯á·ááœáẠá¡áááºáá±á¬áºááŒáá«áá»á¬áž á¡á¬ážáá¯á¶ážááŸááá«áááºá
á¡áá¯áá±ážááœááºážá "áá¬ááŒá±á¬áá·áºáá²" á¡áááºá áá»áœááºá¯ááºááá¯á·ááœáẠschema áá áºáá¯ááŸááá»áŸáẠááá¬ážááá¯ááŸá¬áááá·áºáá±áá¬ááá¯ááŒá±á¬ááŒáá±á¬ "search_path" variable áá áºáá¯ááŸááá±áááºáá¯áááºááááºá ááááºážááŸááºáá áºáá¯ááŸááá¯á¶ááááºá
ááŒááá¬ááá¬áá²? ááŒá¿áá¬ááŸá¬ áá¬áá¬ááŒááºáááºáá¬ážáá±á¬ áá¯ááºááŒááºáá»ááºáá»á¬ážááẠáá áºá á¯á¶áá áºáŠážá០search_path ááᯠááŒá±á¬ááºážáá²ááá¯ááºáááºáᯠáá¶áááááŸááá«á á€áááºááá¯ážááẠáá±áá¬áá±á·á áºá¡ááœáẠá¡áááºáááŒááºááŸááá±ááá²á·ááá¯á·á á¡áá»áá¯á·áá±á¬ á¡á áááºá¡ááá¯ááºážáá»á¬ážááẠá¡áááá¹áá«ááºá¡áá áºáá»á¬ážááᯠáá±á¬ááºáá°ááá¯ááºáááºááá¯ááºáá±á
áá¯ááºáá«áááºá áá«á áááºá ááºážáááºáá±áá²á· áá¬ážááŸááºážáá±á«áºááŸá¬ áá°áááºáá«áááºá ááá·áºá á¬ážááœá²áá»á¬áž áááºáá»áŸááœá¬ááŒá¬ážáááºá¡áá±á«áº áá°áááºáááºá áá¬ážááŸááºáž 9.1 ááẠáá±á¬ááºážááá¯áá»ááºáá±á¬ááºážáá»á¬ážááᯠááá¯ážááŸááºážá áœá¬ áá¯ááºáá±á¬ááºáá«áááºá áá¬ážááŸááºážá¡áá áºáá»á¬ážááẠbug ááá¯áááºážááá¯ááºááŒá®áž ááá·áºááœáẠbug ááŸááá±ááŒá±á¬ááºážááŒá±á¬ááŒááá¯ááºáááºá
áááºááá¯áá¯ááááá²á ááá¯ážááŸááºážáá²á· áá»ááºáááºážáá áºáá¯ááŸáááẠ- á¡á²áá«ááᯠááá¯ááºáá«áá²á·á á¡ááá®áá±ážááŸááºážááœáá·áºáá±áá»áááºááœáẠsearch_path ááá¯ááŒá±á¬ááºážáááºáááá¯á¡ááºáá«á áááºááŒá±á¬ááºážáá²áá«áá áá»áááºáááºááŸá¯á¡áá áºáá áºáá¯áááºáá®ážááŒááºážááẠááá¯áá±á¬ááºážáá«áááºá
ááœá±ážááœá±ážááá¯ááºáááºá ááá¯ááá¯áááºááŸá¬ á¡ááœáá·áºá ááœá±ážááœá±ážáááºá ááá·áºááá¯ááºáááºá áá áºá á¯á¶áá áºáŠážá០áááºááá¯ážáá áºáá¯ááŒá±á¬ááºážáá±á¬á¡áá« áá±áá¬áá±á·á áºá០áá¯á¶ážá áœá²áá°á¡á¬áž á€á¡ááŒá±á¬ááºážááᯠááŒá±á¬ááŒááá·áºáááº- âááŒáá·áºá áááºážáá²á·áááºááá¯ážááᯠáá®ááŸá¬ á¡ááºááááºáá¯ááºááŒá®ážááŒá®ááá¯áᬠáá±áá¬áá±á·á Ạdeveloper ááœá±ááᯠáá¯á¶ááŒááºá áááºáá»ááá¯ááºáááºá ááŒá±áá¬áá»ááºáá»á¬ážááᯠááŒááºáááºáááºááŸááºááŒá®áž áááºážááá¯á·ááᯠááŒááºáááºáááºáá®ážááẠááá¯á¡ááºáá±á¬ááºáž ááŒá áºááá¯ááºáá«ááá¬ážá ááá¯á¡áá« áá±áá¬áá±á·á áºááẠáá»áŸáá¯á·ááŸááºá áœá¬ ááŒá¯áá°áá±ááŒá®áž á¡ááœááºážá áá±á¬áºááŒáá»ááºáá»á¬ážááẠáá áºáá±áá¬áá¬ááá¯á· ááŒá±á¬ááºážáá²ááœá¬ážááŒá±á¬ááºáž áááºááá¯á·áá»áŸ á¡á á®áááºáá¶ááŒááºážáááŸááá±á
ááŒá®ážáá±á¬á· áá»áœááºáá±á¬áº áááºááŒá®áž á¡áá±ážáá±ážááŒá±á¬áá«ááẠ- áá«á Java á¡ááœáẠáá¯á¶ááŸááºááá¯ááºáá²á· á¡áá¬áá«á PL/pgSQL ááœáẠáá°áá®áá±á¬á¡áá¬áá áºáá¯ááᯠáá»áœááºá¯ááºááá¯á·ááœá±á·ááá«áááºá áá«áá±ááá·áº á¡á²áá®áá±áá¬ááŸá¬ ááŒááºáá¯ááºáá±ážáááá·áºáááºá
áá±á¬ááºááẠáá±áá¬ááœá±ážáá»ááºááŸá¯ááᯠá ááºážááŒáá·áºáá¡á±á¬ááºá áá«ááá¯á·ááœá±ážááŒá®ážááœá±ážáááºá áá»áœááºáá±á¬áºááá¯á·ááŸá¬ á¡áááºážáá áºáááºážáá²á· á á¬ážááœá²áá áºáá¯á¶ážááŸááááºá á á¬ááŒá±á¬ááºážáá áºáá¯á á®ááẠáá®ááá¯ááá¯ááºáá áºáá¯ááŒá áºáááºá ááá·áºááŸááºážááŒá±á¡á¬ážááŒáá·áº áá±áá¬áá áºáá áºáá«ááá¯ááºá áá»áœááºá¯ááºááá¯á·ááœáẠ128 megabytes ááŸááá±á¬ Java á ááºááœáẠá¡áá¯ááºáá¯ááºáá±á¬ memory ááŸááááºá
á á¬á¡á¯ááºá¡á¬ážáá¯á¶ážááœáẠá¡ááŒá¶ááŒá¯áá¬ážááá·áºá¡ááá¯ááºáž áá»áœááºá¯ááºááá¯á·ááẠááá¯ááºááá¯ááºáá¯ááºááœáŸáá·áºááŒááºážááᯠá¡áá¯á¶ážááŒá¯áá«áááºá ááá¯ááá¯áááºááŸá¬ áá»áœááºá¯ááºááá¯á·ááẠResultSet ááá¯ááœáá·áºááŒá®áž ááá¯áá±áá¬á០áá±áá¬áá»á¬ážááᯠááŒááºážááŒááºážáá»ááºážáááºáááºá á¡áá¯ááºááŒá áºááŸá¬áá¬ážá ááŸááºáá¬ááºáá²á ááŒá¯ááºáá»ááŸá¬áá¬ážá áááºážáááºážáá±á¬ááºáááºáá±ážáá«áá¬áž áá±áá¬áá±á·á áºááá¯áá¯á¶ááŒááºááŒáá«á áá¯á·á Postgres ááá¯áá¯á¶ááŒááºááŒáá«á áá¯á·á áá«ááá¯á·áááá¯á¶áá°ážá áá«ááá¯á· OutOFMemory áá»ááœá¬ážááŸá¬áá¬ážá OutOfMemory ááᯠáááºáá°ááœá± ááŒá¯á¶ááœá±á·áá²á·ááá²á á¡á²áá«ááŒá®ážááẠáááºáá°á ááŒááºááá¯ááºááá²á áá áºá á¯á¶áá áºáá±á¬ááºá ááŒá¯ááŒááºááá¯ááºáá²á·áááºá
ááá·áºááœáẠá¡áááºážáá áºáááºážááŸááá»áŸáẠáááºááœá±ážáá»ááºáá¯á¶ááŸáá·áº ááœá±ážáá»ááºááááá«á OFFSET/LIMIT ááá¯á¡ááºáá«áááºá á€ááœá±ážáá»ááºááŸá¯á¡ááœáẠáááºáá°áááºážá ááŒá®ážáá±á¬á· áááºáá°á autoCommit áá²á· áá á¬ážááá¬ááᯠááŸá áºáááºáá²á
á€ááœááºá áá¯á¶ážá á¶á¡ááá¯ááºážá áá»áŸá±á¬áºááá·áºááá¬ážáá±á¬ ááœá±ážáá»ááºááŸá¯á¡áá»á¬ážá á¯ááẠááŸááºáááºááŒá±á¬ááºáž ááœá±á·ááá«áááºá á¡áááºá áááºááẠautoCommit ááᯠáá¯ááºáááẠááááºáá«áá áááºážááẠá¡áá±á¬ááºá¡áá°ááŒá áºáááá·áºáááºá á¡á²áá®ááá¯á·áá¬ááŒá áºááá¯á·? áá«ááᯠáááá¹áá¶ááá¬á ááááá«áá°ážá
ááá¯á·áá±á¬áº áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá Postgres áá±áá¬áá±á·á áºááá¯á· áá»áááºáááºáá¬ážáá±á¬ áá±á¬ááºáááºáá»á¬ážá¡á¬ážáá¯á¶ážááẠáá±áá¬áá áºáá¯áá¯á¶ážááᯠááá°áááºá PgJDBC ááẠá€ááá á¹á ááœáẠááŒáœááºážáá»ááºáááŸááá«á áááºážááẠá¡áááºážá¡á¬ážáá¯á¶ážááᯠááœá±ážáááºá
FetchSize á¡áááºážá¡áá»ááºážááœáẠááœá²ááœá²ááŸá¯áá áºáá¯ááŸááá«áááºá ááá¯ááá¯áááºááŸá¬ á€áá±áá¬ááœáẠáá®ážááŒá¬ážáá¯ááºááŒááºáá»ááºáá áºáá¯áá¡ááá·áºááœááºá áá»á±ážáá°ážááŒá¯á áá±áá¬ááᯠ10á 50 ááŒáá·áº ááœá±ážáá»ááºáá«á ááá¯á·áá±á¬áº áááºááẠautoCommit ááá¯ááááºáááºá¡áá áááºážááẠá¡áá¯ááºáááŒá áºáá«á autoCommit ááá¯ááááºáá¬ážááẠ- áááºážáááºá áááºá¡áá¯ááºáá¯ááºáááºá
ááá¯á·áá±á¬áº áá±áá¬ááá¯ááºážááœáẠáá¯ááºááŸáá·áº setFetchSize áááºáááºááẠá¡áááºáááŒá±áá«á ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠáá»áááºáááºááŸá¯áá áºáá¯áá¯á¶ážá¡ááœáẠáá°áááºážáááºááá¯ážááᯠááŒá±á¬ááá·áº áááºáááºáá áºáá¯ááᯠááŒá¯áá¯ááºáá¬ážáááºá
á¡á²áá«ááᯠáá»áœááºáá±á¬áºááŒá±á¬áá²á·áááºá ááá·áºáááºáá»ááºááᯠá á®á ááºáááºááŸááºááŒá®ážáá«ááŒá®á áá«ááá¯á· áá¬ááá²á·áá²á á¡áááºá áá»áœááºá¯ááºááá¯á·ááẠááá¬áá¡áááºážáááºááᯠááœá±ážáá»ááºáá«áá á¥ááá¬á¡á¬ážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠáá áºááŒáááºáá»áŸáẠ10 áááºážááᯠááœá±ážáá»ááºáá«áá áá»áœááºá¯ááºááá¯á·ááœáẠáá¯ááºáá»á áááẠá¡ááœááºááŒá®ážáá¬ážáá«áááºá ááá¯á·ááŒá±á¬áá·áº á€áááºááá¯ážááᯠáá áºáá¬ááá·áº áááºááŸááºááá·áºáááºá
á¡áá±á¬ááºážáá¯á¶ážááá±á¬á·á áááºá áááºážááᯠbytes áá²á· áááºááá¯ááá·áºáááºáááá²ááá¯áᬠáááºáá°ááá«áá±ážáááºá áá«áá±ááá·áº áá»ááºáááºážááá±á¬á· áá®ááá¯áá«- defaultRowFetchSize ááᯠáá áºáá¬ááẠááá¯áááºááŸááºááŒá®áž áá»á±á¬áºááœáŸááºááá¯ááºáá«á
áá±áá¬ááá·áºááœááºážááŒááºážááá¯á· áááºááœá¬ážááŒáá«á áá¯á·á ááá·áºááœááºážááŒááºážááẠááá¯ááá¯ááœááºáá°áááºá ááœá²ááŒá¬ážáá±á¬ááœá±ážáá»ááºá áá¬áá»á¬ážááŸááá«áááºá á¥ááá¬á INSERTá VALUESá áá«á áá±á¬ááºážááœááºáá²á· ááœá±ážáá»ááºááŸá¯áá áºáá¯áá«á "INSERT SELECT" áᯠááŒá±á¬ááá¯ááºáá«áááºá áááºááœá±á·ááŸá¬áá±á¬á· á¡áá°áá°áá«áá²á á áœááºážáá±á¬ááºáááºááá¯ááºážááŸá¬ ááœá¬ááŒá¬ážááŸá¯áááŸááá«áá°ážá
Batch statement ááᯠáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáááºáᯠá á¬á¡á¯ááºáá»á¬ážá ááá¯áááºá á á¬á¡á¯ááºáá»á¬ážá áááºááẠááœááºážá á¥áºáá»á¬ážá áœá¬ááŒáá·áº ááá¯ááá¯ááŸá¯ááºááœá±ážáá±á¬ command áá»á¬ážááᯠáá¯ááºáá±á¬ááºááá¯ááºáááºáᯠá á¬á¡á¯ááºáá»á¬ážá ááá¯áá«áááºá ááŸáá·áº Postgres ááœáẠá¡á¶á·ááŒááœááºáá±á¬ááºážáá±á¬ á¡ááºá¹áá«áááºáá áºáᯠáá«ááŸáááẠ- áááºááẠCOPY áá¯ááºááá¯ááºáááºá ááá¯ááá¯áááºááŸá¬ áááºážááᯠááá¯ááá¯ááŒááºáááºá áœá¬ ááŒá¯áá¯ááºááá¯ááºáááºá
á¡á²áá«ááᯠááá¯ááºážáá¬ááẠá áááºáááºá á¬ážá áá¬áá±á¬ááºážáá²á· ááŸá¬ááœá±ááœá±á·ááŸáááŸá¯ááœá± áááºáá¯ááºááá¯ááºáá«áááºá áá«ááᯠáá»áœááºáá±á¬áºááá¯á· áááºááᯠáá¯ááºá á±áá»ááºáá¬áá²á áá»áœááºá¯ááºááá¯á·ááẠááœá²ááŒááºážá áááºááŒá¬ááŒááºáž ááŸáá·áº áááá¯á¡ááºáá±á¬ á¡áááá·áºáá»á¬ážááᯠááá¯ááºáá±á¬ááºááá¯áá«á
áááºááœá±á·ááœááºá TCP ááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž á€ááá¯á·áá¯ááºáá±á¬ááºááẠááœáá·áºáááŒá¯áá«á áá±á¬ááºáááºááẠáá±á¬ááºážááá¯áá»ááºáá áºáᯠáá±ážááá¯á·áá¬ááœáẠá¡áá¯ááºááŸá¯ááºáá±áá«áá áá±áá¬áá±á·á áºááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž áá¯á¶á·ááŒááºááŸá¯áá»á¬ážááᯠáá±ážááá¯á·ááẠááŒáá¯ážáááºážáá¬ááœáẠáá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠááááºáá«á áá±á¬ááºáá¯á¶ážááááºááŸá¬ áá¯á¶ážá áœá²áá°ááẠáá±áá¬áá±á·á áºáá±á¬ááºážááá¯ááŸá¯ááᯠáááºááẠá á±á¬áá·áºááá¯ááºážáá±ááŒá®áž áá±áá¬áá±á·á áºááẠáá¯á¶ážá áœá²áá°á០áá¯á¶á·ááŒááºááŸá¯ááᯠáááºááẠá á±á¬áá·áºááá¯ááºážáá±ááŒááºážááŒá áºáááºá
ááá¯á·ááŒá±á¬áá·áº client ááẠáááºáá°ááŒá¯ááŒááºáž packet ááᯠá¡áá«á¡á¬ážáá»á±á¬áºá áœá¬ áá±ážááá¯á·ááẠááá¯ááºážá á±áá«áááºá á¡ááá¯ááœááºáááºá¡ááŒááºá¡ááŸááºáááºááœááºááŸá¯áá»á¬ážá á¡ááá¯á¡áá»áááºááŒá¯ááºážááŒááºážá
á¡á²áá«ááœá±ááᯠáá»á¬ážáá»á¬ážááá·áºáá± ááá¯ááá¯ážáá±áá«áá²á áá¬ááºáá±á¬ááºážááẠá¡ááœááºá¡ááá¯ážááŒááºáááºááŒá®áž ááá¯ááºážáá»á¬ážá á¡ááœááºá¡á á¬ážáá±á«áº áá°áááºá ááá¯ááºáž ááá áá»áŸáẠáá áºááŒáááºááá·áº áááºážááá¯á·ááᯠáááŒá¬áá ááá·áºáá«áááºá
á á¬ááŒá±á¬ááºážáá áºááŒá±á¬ááºážáááºážáá²á· ááŒááºááá¯ááºáá¬áá²á· á¡áá¬á¡á¬ážáá¯á¶áž 10 á ááŒááºáá¬áá«áááá·áºáááºá ááŒá áºáá»ááºá á¡áááºááŒá±á¬ááºá·? áá¯á¶ážá á¶á¡ááá¯ááºážá á€áá²á·ááá¯á·áá±á¬ á¡áááºáááŒááºááᯠáá áºáá±áá¬áá¬ááœáẠá¡áá¯á¶ážááŒá¯ááŒá®ážááŒá áºáááºá â128â áááºááá¯ážááẠáá¯ááºááááºážááŒááºážááᯠááá¯á¶ážááᯠááá¯ááá¯áááºá
áááºážáááºááá¬ážáááºáá¬ážááŸááºážááœááºááá«áááºáá±á¬ááŒá±á¬áá·áºáá±á¬ááºážáá«áááºá áá¯ááºáá±ááŸá¯áá áááºáá® ááŸá¬ááœá±ááœá±á·ááŸááá²á·áááºá áá»áœááºá¯ááºáá±ážáá±á¬ á¡áááá¹áá«ááºáá»á¬ážá¡á¬ážáá¯á¶ážááẠáá±ááºáá®áá¬ážááŸááºážáá»á¬ážááᯠá¡ááŒá±áá¶áá¬ážáá«áááºá
á ááºážááŒáá·áºáá¡á±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠInsertBatch ááá¯ážááŸááºážá áœá¬ááá¯ááºážáá¬áááºá áá»áœááºá¯ááºááá¯á·ááẠInsertBatch ááᯠá¡ááŒáááºáá»á¬ážá áœá¬ ááá¯ááºážáá¬áááºá ááá¯ááá¯áááºááŸá¬ áá°áá®áá±á¬á¡áá¬á ááá¯á·áá±á¬áº áááºááá¯ážáá»á¬ážá áœá¬ááŸááá«áááºá ááŸááºááœáŸá±á·á áá«ááᯠáá°ááá¯ááºážááá¯ááºááá¯ááºáá°ážá áá«áá±ááá·áº Copy áá¯ááºáá¬ááẠá¡áá»á¬ážááŒá®áž ááá¯ááœááºáá«áááºá
COPY áá¯ááºááá¯ááºáá«áááºá
ááŒá®ážáá±á¬á· áááºá áá«ááᯠá¡áá±á¬ááºá¡áŠááœá±ááŸá¬ áá¯ááºááá¯ááºáááºá á¡áá¯á¶ážááŒá¯áá°á áá¯á¶áá±á¡áá»áá¯ážá¡á á¬ážááᯠááŒá±áá¬áá«á áááºážáá»ááºážááŸá¯ááᯠááŒááºááŒá®áž ááá¬ážááá¯á· ááá¯ááºááá¯ááºááá·áºááœááºážáá«á
á¡áááºá áááºááẠááá·áºááºááá¯ááœáá·áºáá«á- pgjdbc/ubenchmsrk/InsertBatch.javaá ááá¯á·áá±á¬áẠá€áá¯ááºááẠGitHub ááœááºááŒá áºáááºá á€áá±áá¬ááœáẠáááºááá·áºáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáá¯ááºáá±ážáááºááᯠáááºá¡ááá¡áá»ááŒááºááá¯ááºáááºá á¡áá±ážáááŒá®ážáá°ážá
á áááºáá±á¬ááºááœááºáá²á·áá«áááºá ááááá±á¬á· áá»áœááºáá±á¬áºááá¯á· ááá±á¬áá±á«ááºáá¬á batch ááá¯á¶ážáá¬á ááá¯ážááŸááºážá áœá¬áááŒá áºááá¯ááºáá«áá°ážá batch ááœá±ážáá»ááºááŸá¯á¡á¬ážáá¯á¶ážááẠáá¯áááŒá áºáááºá ááá¯ááá¯áááºááŸá¬ áá áºááŒáááºáááºážáá¯ááºáá±á¬ááºááŒááºážááẠáááºááœá±á·á¡á¬ážááŒáá·áº áá¯áááŒá áºáááºá
áá»áœááºá¯ááºááá¯á·ááẠáá±áá¬ááᯠááá·áºááœááºážáááºá á¡ááœááºááá¯ážááŸááºážáá±á¬ á á¬ážááœá²áá áºáá¯ááŒá áºáááºá áá±á¬áºáá¶áá¯á¶ážáá¯á ááŒá®ážáá±á¬á· áá®ááŸá¬ áá¬ááŒááºáá²á á€ááœá±ážáá»ááºááŸá¯áá¯á¶ážáá»áá¯ážá áá¯á¶ážááẠá¡ááŒááºážáá»ááºážá¡á¬ážááŒáá·áº ááŸááºááá¯ááºáááºááᯠáá»áœááºá¯ááºááá¯á·ááŒááºáááºá ááŒá®ážáá±á¬á· COPY á ááá¯áá±á¬ááºážáá«áááºá
á€áááºááŸá¬ áá»áœááºá¯ááºááá¯á·á¡ááá¯ááºážáá»á¬ážááᯠááá·áºááœááºážááá·áºá¡áá«ááŒá áºáááºá VALUES áááºááá¯ážáá áºáá¯á VALUES áááºááá¯ážááŸá áºáá¯á VALUES áááºááá¯ážáá¯á¶ážáá¯á ááá¯á·ááá¯áẠáááºážááá¯á·áá²á០10 ááᯠáá±á¬áºáá¬ááŒáá·áº ááá¯ááºážááŒá¬ážáá¬ážáááºáᯠáá»áœááºá¯ááºááá¯á·ááŒá±á¬áá±á¬á¡áá«á áá«á á¡áᯠá¡áá»á¬ážááá¯ááºáá²á 1, 2, 4, 128á á¡ááŒá¬áá±á¬ááºááŒáá·áº áá±ážááœá²áá¬ážááá·áº Batch Insert ááẠáá°á·á¡á¬áž áá»á¬ážá áœá¬ ááá¯ááá¯áá±á¬ááºážááœááºá á±áááºáᯠááŒááºááá¯ááºáááºá ááá¯ááá¯áááºááŸá¬á áá áºááŒáááºáá»áŸáẠáá áºáá¯ááá·áºááœááºážááá·áºá¡áá« ááá¯á·ááá¯áẠáá áºááŒáááºáá»áŸáẠáá±ážáá¯ááá·áºááá·áºá¡áá«ááœááºáááºá áá»áœááºá¯ááºááá¯á·ááẠVALUES áá²ááá¯á· á¡áááºážáááºááá¯ááá·áºáá¬ážáá±á¬ááŒá±á¬áá·áº áááºážááẠááŸá áºáááá¯áá±á¬ááºážáá¬áááºá áá¯ááºáá±á¬ááºááŸá¯ áááºážáá«ážáááºá
á¡ááœá²áááºáá»á¬ážááœáẠáá±á¬áºáá®ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááẠá¡ááœááºá¡áá¬ážá¡áá¬áááŸááá±á áááááŸá áºáá»ááºáá±á¬áẠáááœá²áá°ážáá°ážá COPY á¡ááœáẠáá°ááá¯á· áá±á¬ááºážáááºáá¯á¶ááᯠááœá¬ážááŒáááºá
ááá·áºááœáẠá¡áááºážáá¯á¶ážáá±áᬠá¡áááºážáá áºáá¬ááŸááá±á¬á¡áá« áá±á¬áºáá®ááᯠá¡áá¯á¶ážááŒá¯ááá·áºáááºá á€áá»áááºáááºááŸá¯ááœáá·áºááŒááºážá á¡áá»á¯á¶ážáááºááŸá¯ááẠááŒá®ážáá¬ážáááºá ááá¯ážááá¯ážáá¬ážáá¬ážááŒá±á¬ááááºá áá«áá®áááºážááŒá±á¬ááºážááá¯ááá°ážáá²á·áá°ážá áá»áœááºá¯ááºááẠBatch ááᯠoptimized áá¯ááºáá¬ážáá±á¬áºáááºáž COPY ááá¯ááºáá«á
áá«ááá¯á·áá¬áááºáá¯ááºááŒááá²á áá»áœááºáá±á¬áºááá¯á· á ááºážááŒáá·áºáááºá áá»áœááºá¯ááºááá¯á·ááẠá¡áááá¹áá«ááºáá»á¬ážá áœá¬ááᯠáá±á«ááºážá ááºáá¬ážááá·áº ááœá²á·á ááºážáá¯á¶áá»á¬áž ááá¯á·ááá¯áẠáááá¹áá¬áá«ážáááºáá±á¬ áááºáá®ážáá®ážáá¬ážááᯠá¡áá¯á¶ážááŒá¯ááẠááá¯á¡ááºááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á· áá¬ážáááºáá«áááºá
áá®áá±á· á¡á á®áááºáá¶á á¬ááá± áá¬áá°ááá·áºáá²á
- ááŒááºáááºáá¯ááºááŒááºáá»ááºááẠáá»áœááºá¯ááºááá¯á·áá¡áá¬á¡á¬ážáá¯á¶ážááŒá áºáááºá áá«á áá¯ááºáá¯ááºá áœááºážá¡á¬ážá¡ááœáẠá¡áá»á¬ážááŒá®ážáá±ážáááºá áááºážááẠá¡á¯ááºážáá®ááœáẠááŒá®ážáá¬ážáá±á¬ á¡áá¯á¡áááá·áºááœááºá á±áááºá
- ááœá²ááŒááºážá áááºááŒá¬ááŸááºážááŒááŒááºáž á ááŒáááºááŒá¯áá¯ááºááẠááá¯á¡ááºáááºá
- áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·áááŒá¿áá¬ááŸááá±ážááœááºážáá»á¬ážááá»ááºáá¬ááá¯ááºááŸá¯ááºážááá¯ááŒááºáááºá¡ááœáẠOFFSET 0 ááŸáá·áº +0 áá²á·ááá¯á·áá±á¬ááŸáá·áºááœááºáá»á¬ážááá¯á¡ááºáá«áááºá
source: www.habr.com