PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบ—เปˆเบฒเบ™เบญเปˆเบฒเบ™เบšเบปเบ”เบšเบฑเบ™เบ—เบถเบเบ‚เบญเบ‡เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบ•เบปเป‰เบ™เบ›เบต 2016 เบ‚เบญเบ‡ Vladimir Sitnikov "PostgreSQL เปเบฅเบฐ JDBC เบเปเบฒเบฅเบฑเบ‡เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”"

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบชเบฐโ€‹เบšเบฒเบโ€‹เบ”เบตโ€‹เบ•เบญเบ™โ€‹เบชเบงเบฒเบ เบ‚เป‰เบญเบเบŠเบทเปˆ Vladimir Sitnikov. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบชเปเบฒเบฅเบฑเบš NetCracker เบชเปเบฒเบฅเบฑเบš 10 เบ›เบต. เปเบฅเบฐเบ‚เป‰เบญเบเบชเปˆเบงเบ™เบซเบผเบฒเบเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”. เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบš Java, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบš SQL เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเบฎเบฑเบ.

เปเบฅเบฐเบกเบทเป‰เบ™เบตเป‰เบ‚เป‰เบญเบเบˆเบฐเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบžเบปเบšเปƒเบ™เบšเปเบฅเบดเบชเบฑเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเปƒเบŠเป‰ PostgreSQL เป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบชเปˆเบงเบ™เปƒเบซเบเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš Java. เปเบ•เปˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเบˆเบฐเบšเบญเบเป€เบˆเบปเป‰เบฒเปƒเบ™เบกเบทเป‰เบ™เบตเป‰เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบเปˆเบฝเบงเบเบฑเบš Java เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เปƒเบ™เบ–เบฒเบ™เบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™, เบ™เบตเป‰เบเบฑเบ‡เป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เบžเบฒเบชเบฒเบญเบทเปˆเบ™เป†.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบปเบ™เบ—เบฐเบ™เบฒ:

  • เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เปเป‰เบกเบนเบ™.
  • เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบกเบนเบ™.
  • เปเบฅเบฐเบเบฑเบ‡เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”.
  • เปเบฅเบฐเบเปˆเบฝเบงเบเบฑเบš rakes underwater เบ—เบตเปˆเบ–เบทเบเบเบฑเบ‡เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เปƒเบซเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบ„เปเบฒเบ–เบฒเบกเบ‡เปˆเบฒเบเป†. เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบทเบญเบเบซเบ™เบถเปˆเบ‡เปเบ–เบงเบˆเบฒเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบฅเบฐเบซเบฑเบ”เบ•เบปเป‰เบ™เบ•เป.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เป‚เบฎเบ”เบ”เบฝเบงเบเบฑเบ™. เปเบฅเบฐเบเบฒเบ™เบเบฐเบชเบดเบเปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เปƒเบŠเป‰เป€เบงเบฅเบฒ 20 milliseconds.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

20 milliseconds เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบซเบผเบฒเบ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบต 100 เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบตเป€เบฅเบทเปˆเบญเบ™เบœเปˆเบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, i.e. เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เป€เบชเบเป€เบงเบฅเบฒ.

เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบกเบฑเบเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เปเบฅเบฐเป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบทเป‰เบ™เบ–เบฒเบ™เบชเบฐเป€เบซเบ™เบตเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰. เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบชเบฐเป€เบซเบ™เบตเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเบญเบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ‡เปˆเบฒเบเบ”เบฒเบ. เปเบกเปˆเบ™เบซเบเบฑเบ‡เบ”เบตเบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™? เบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบญเบปเบฒเบกเบฑเบ™เปเบฅเบฐเบชเบปเปˆเบ‡เบกเบฑเบ™, เปเบฅเบฐเบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบญเบตเบ.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

https://github.com/pgjdbc/pgjdbc/pull/478

เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบเบฑเบ‡เบกเบตเปเบšเบšเบชเบญเบšเบ–เบฒเบกเบ—เบตเปˆเบเป‰เบฒเบงเบซเบ™เป‰เบฒ, เป€เบŠเบดเปˆเบ‡เปเบกเปˆเบ™ tricky เบซเบผเบฒเบ, เปเบ•เปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบ. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปเบเบเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เปเบเบเบงเบดเป€เบ„เบฒเบฐ, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เบเบฒเบ™เบœเบนเบเบกเบฑเบ”เบ•เบปเบงเปเบ›, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ—เบตเปˆเบ‚เบฐเบซเบเบฒเบเบชเบนเบ‡เบชเบธเบ”เปเบกเปˆเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบเบงเบกเป€เบญเบปเบฒเปƒเบ™เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™. เบžเบงเบเป€เบฎเบปเบฒ, เบšเบฒเบ‡เบ—เบต, เบ•เป‰เบญเบ‡เบเบฒเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบˆเบฒเบเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเบกเบตเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบ–เบทเบเบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบ‚เบทเป‰เบ™เปƒเบ™เบšเบฒเบ‡เบฎเบนเบšเปเบšเบš, i.e. เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™, เปเบ•เปˆเบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เปเบฅเบฐเปƒเบ™เบ›เบตเบ•เปเปˆเป„เบ›. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบšเบฑเบ™เบ—เบถเบเบกเบฑเบ™เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ›เบ›เบฐเบกเบฒเบ™เบชเบฑเปˆเบ™เบ„เบปเบ™เบ•เบปเป‰เบ™เบ•เป.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เปเบกเปˆเบ™เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเปเบšเบšเบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ‚เบฐเบซเบเบฒเบ.

เปเบกเปˆเบ™เบซเบเบฑเบ‡เบžเบดเป€เบชเบ”เบเปˆเบฝเบงเบเบฑเบšเปเบ•เปˆเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™?

เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเปเบšเบšเบ‡เปˆเบฒเบเป†เปเบกเปˆเบ™เบ”เบตเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบฑเป‰เบ‡เบ”เบฝเบง. เป€เบกเบทเปˆเบญเป€เบฎเบฑเบ”เปเบฅเป‰เบงเปเบฅเบฐเบฅเบทเบก. เปเบฅเบฐเบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบฎเบนเบšเปเบšเบšเบ‚เปเป‰เบกเบนเบ™เบ–เบฒเบ™เบชเบญเบ‡, i.e. เบกเบฑเบ™เบšเปเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบšเบšเบฒเบ‡เบฅเบฐเบšเบปเบšเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบชเบนเบ‡.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบเบฒเบ™โ€‹เบชเบญเบšโ€‹เบ–เบฒเบกโ€‹เบ‚เบฐโ€‹เบซเบเบฒเบ - เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹เปƒเบซเป‰โ€‹เบ—เปˆเบฒเบ™โ€‹เป€เบžเบทเปˆเบญโ€‹เบ›เบฐโ€‹เบซเบเบฑเบ”โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบงเบดโ€‹เป€เบ„เบฒเบฐโ€‹. เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบฎเบฑเบ”เปเบฅเบฐเป€เบฅเบตเปˆเบกเปƒเบŠเป‰. เบ™เบตเป‰เบเปเปˆเบŠเปˆเบงเบเบžเบงเบเป€เบฎเบปเบฒเปเบ—เป‰เป†. เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบกเบตเป€เบ‡เบดเบ™เบเบฒเบเบ›เบฐเบขเบฑเบ”เปƒเบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ. เบกเบตเป€เบ‡เบดเบ™เบเบฒเบเบ›เบฐเบขเบฑเบ”เปƒเบ™เบเบฒเบ™เป‚เบญเบ™เบ‚เปเป‰เบกเบนเบ™. เบเบฒเบ™เป‚เบญเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบฎเบนเบšเปเบšเบšเบ–เบฒเบ™เบชเบญเบ‡เปเบกเปˆเบ™เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบ.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบ‚เปเปƒเบซเป‰เบเป‰เบฒเบงเป„เบ›เบชเบนเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบปเปˆเบงเป„เบ›เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ. เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™ Java, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™. เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡. เบชเป‰เบฒเบ‡เปƒเบเป‰เปเบฅเป‰เบง. เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบขเบนเปˆเปƒเบช? เบกเบตโ€‹เบšเบฑเบ™โ€‹เบซเบฒโ€‹เบซเบเบฑเบ‡? เบšเปเปˆเบกเบตเบšเบฑเบ™เบซเบฒ. เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบฑเบ™เป€เบงเบปเป‰เบฒเบขเบนเปˆเปƒเบ™เบซเบ™เบฑเบ‡เบชเบทเบ—เบฑเบ‡เบซเบกเบปเบ”. เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบ–เบทเบเบ‚เบฝเบ™. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบชเบนเบ‡เบชเบธเบ”, เบ‚เบฝเบ™เปเบšเบšเบ™เบตเป‰.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เปเบ•เปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบœเบปเบ™. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡? เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบงเบดเบ—เบตเบเบฒเบ™ "เปƒเบเป‰เบŠเบดเบ”". เปเบฅเบฐเป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เปเบ™เบงเบ™เบตเป‰, เบˆเบฒเบเบˆเบธเบ”เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบกเบธเบกเบกเบญเบ‡เบกเบฑเบ™เบ›เบฒเบเบปเบ”เบงเปˆเบฒเบกเบฑเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบšเบœเบนเป‰เบชเบนเบšเบขเบฒเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เบžเบงเบเป€เบฎเบปเบฒเป€เบงเบปเป‰เบฒเบงเปˆเบฒ "PARSE EXECUTE DEALLOCATE".

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เบžเบดเป€เบชเบ”เบ—เบฑเบ‡เปเบปเบ”เบ™เบตเป‰ เปเบฅเบฐเบเบฒเบ™เบเบปเบเป€เบฅเบตเบเบเบฒเบ™เบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™? เบšเปเปˆเบกเบตเปƒเบœเบ•เป‰เบญเบ‡เบเบฒเบ™เบžเบงเบเบกเบฑเบ™. เปเบ•เปˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบฑเบเบˆเบฐเป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™ PreparedStatements เปเบกเปˆเบ™เบงเปˆเบฒเป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบ›เบดเบ”เบžเบงเบเบกเบฑเบ™, เบžเบงเบเป€เบ‚เบปเบฒเบˆเบฐเบ›เบดเบ”เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบขเบนเปˆเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™, เบ„เบทเบเบฑเบšเบ„เบปเบ™เบ—เบตเปˆเบกเบตเบชเบธเบ‚เบฐเบžเบฒเบšเบ”เบต, เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบžเบทเป‰เบ™เบ–เบฒเบ™. เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบปเบฒเปเบฅเบฐเบเบฐเบเบฝเบกเบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฑเบ™เบซเบผเบฒเบเบ„เบฑเป‰เบ‡. เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบซเบผเบฒเบเบ„เบฑเป‰เบ‡ - เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบฑเป‰เบ‡เบ”เบฝเบงเปƒเบ™เบŠเบตเบงเบดเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ - เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ–เบทเบเบงเบดเป€เบ„เบฒเบฐ. เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ id เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ”เบฝเบงเบเบฑเบ™เบเปˆเบฝเบงเบเบฑเบš REST เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบšเบฑเบ™เบฅเบธเบชเบดเปˆเบ‡เบ™เบตเป‰เป„เบ”เป‰เปเบ™เบงเปƒเบ”?

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบกเบฑเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบ - เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ›เบดเบ”เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™. เบžเบงเบเป€เบฎเบปเบฒเบ‚เบฝเบ™เปเบšเบšเบ™เบตเป‰: "เบเบฐเบเบฝเบก" "เบ›เบฐเบ•เบดเบšเบฑเบ”".

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เบ•เบปเบงเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰, เบกเบฑเบ™เบˆเบฐเปเบˆเป‰เบ‡เบงเปˆเบฒเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบˆเบฐเบฅเบปเป‰เบ™เบšเปˆเบญเบ™เปƒเบ”เบšเปˆเบญเบ™เบซเบ™เบถเปˆเบ‡. เบ–เป‰เบฒเบกเบฑเบ™เบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบญเบ‡เบกเบฑเบ™เป„เบ”เป‰. เปƒเบซเป‰เป€เบฎเบปเบฒเบ‚เบฝเบ™เบ”เบฑเบ”เบŠเบฐเบ™เบตเบ—เบตเปˆเปƒเบŠเป‰เบงเบดเบ—เบตเบ‡เปˆเบฒเบเป†เบ™เบตเป‰. เบชเป‰เบฒเบ‡เบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™. เบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เบ•เบปเบงเบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบšเบฒเบ‡เบฎเบธเปˆเบ™เบ‚เบญเบ‡เป„เบ”เป€เบงเบตเปเบฅเบฐเบžเบปเบšเบงเปˆเบฒเบกเบฑเบ™ crashes เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เป„เบงเบเบฑเบšเบเบฒเบ™เบชเบนเบ™เป€เบชเบเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบกเบฑเบ™เบกเบต.

เบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบ–เบทเบเปเบเป‰เป„เบ‚เป„เบ”เป‰เบ‡เปˆเบฒเบ. เบ‚เป‰เบญเบเบˆเบฐเบšเปเปˆเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบžเบงเบเบกเบฑเบ™. เปเบ•เปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเป€เบงเบปเป‰เบฒเบงเปˆเบฒเบชเบฐเบšเบฑเบšเปƒเบซเบกเปˆเป€เบฎเบฑเบ”เบงเบฝเบเป„เบงเบ‚เบถเป‰เบ™เบซเบผเบฒเบ. เบงเบดเบ—เบตเบเบฒเบ™เปเบกเปˆเบ™เป‚เบ‡เปˆ, เปเบ•เปˆเบเบฑเบ‡.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡? เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰?

เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบชเบฐเป€เบซเบกเบตเบ›เบดเบ”เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ—เบตเปˆ. เปƒเบ™เบซเบ™เบฑเบ‡เบชเบทเบ—เบฑเบ‡เบซเบกเบปเบ”เบžเบงเบเป€เบ‚เบปเบฒเป€เบงเบปเป‰เบฒเบงเปˆเบฒเปƒเบซเป‰เบ›เบดเบ”เบกเบฑเบ™, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบˆเบฐเบฎเบปเปˆเบงเป„เบซเบผ.

เปเบฅเบฐ PostgreSQL เบšเปเปˆเบฎเบนเป‰เบงเบดเบ—เบต cache queries. เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบตเปˆเปเบ•เปˆเบฅเบฐเบเบญเบ‡เบ›เบฐเบŠเบธเบกเบˆเบฐเบชเป‰เบฒเบ‡ cache เบ™เบตเป‰เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡.

เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเป€เบชเบเป€เบงเบฅเบฒเปƒเบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ„เบทเบเบฑเบ™.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เปเบฅเบฐเบ•เบฒเบกเบ›เบปเบเบเบฐเบ•เบดเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบชเบญเบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบ.

เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบญเบปเบฒเบกเบฑเบ™เปเบฅเบฐเป€เบงเบปเป‰เบฒเบงเปˆเบฒเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบซเปเปˆเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปƒเบ™ PgSQL. เบกเบตเปเบ„เบ”เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. เบกเบฑเบ™เป€เบเบฑเบšเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡. เบกเบฑเบ™เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบเบดเปˆเบ‡เปƒเบซเบเปˆ. เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบ™เบตเป‰. เบžเบงเบเป€เบฎเบปเบฒเบกเบต 100500 เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป. เบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบ. เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป€เบซเบฑเบ™เบ”เบตเบ—เบตเปˆเบˆเบฐเบ›เปˆเบฝเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰เป€เบ›เบฑเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡. เบšเปเปˆโ€‹เบšเปเปˆ.

เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเบชเบญเบ‡ - เป€เบญเบปเบฒเบกเบฑเบ™เปเบฅเบฐเบ•เบฑเบ”เบกเบฑเบ™เป€เบญเบ‡. เบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เปเบซเบผเปˆเบ‡เปเบฅเบฐเป€เบฅเบตเปˆเบกเบ•เบฑเบ”. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบซเบฑเบ™เปเบฅเบฐเป„เบ”เป‰เป€เบซเบฑเบ™. เบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเบซเบผเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

https://github.com/pgjdbc/pgjdbc/pull/319

เบญเบฑเบ™เบ™เบตเป‰เบ›เบฐเบเบปเบ”เบ‚เบถเป‰เบ™เปƒเบ™เป€เบ”เบทเบญเบ™เบชเบดเบ‡เบซเบฒ 2015. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบกเบตเบชเบฐเบšเบฑเบšเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบซเบผเบฒเบ. เปเบฅเบฐเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบเบดเปˆเบ‡เปƒเบซเบเปˆ. เบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ”เบตเบซเบผเบฒเบเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เบซเบเบฑเบ‡เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™. เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบเปเปˆเบขเบธเบ”เป€เบŠเบปเบฒเบเบฒเบ™เบ„เบดเบ”เปƒเบ™เบ—เบดเบ”เบ—เบฒเบ‡เบ‚เบญเบ‡ PgSQL, i.e. เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบžเบฝเบ‡เบžเปเบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเบ—เบตเปˆเบˆเบฐเบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบเบตเบ™เป€เบเบทเบญเบšเบชเบนเบ™.

เบ•เบฒเบกเบ™เบฑเป‰เบ™เปเบฅเป‰เบง, เบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™เบ—เบตเปˆเบเบฐเบเบฝเบกเป‚เบ”เบเป€เบŠเบตเบšเป€เบงเบตเบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบฑเป‰เบ‡เบ—เบต 5 เป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เป€เบชเบเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เปเบ•เปˆเบฅเบฐเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ„เบฑเป‰เบ‡เบ”เบฝเบง.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเบ–เบฒเบก-เบ•เบปเบงเป€เบฅเบเบขเบนเปˆเปƒเบช? เป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบฎเบฑเบšเบซเบเบฑเบ‡? เปเบฅเบฐเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ‚เป‰เบญเบเบˆเบฐเบšเปเปˆเปƒเบซเป‰เบ•เบปเบงเป€เบฅเบ, เป€เบžเบฒเบฐเบงเปˆเบฒเปเบ•เปˆเบฅเบฐเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบกเบตเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡.

เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เปเบšเบšเบ™เบฑเป‰เบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เป€เบงเบฅเบฒเบ›เบฐเบกเบฒเบ™ 20 เบกเบดเบ™เบฅเบดเบงเบดเบ™เบฒเบ—เบตเปƒเบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบเปˆเบฝเบงเบเบฑเบšเบ„เปเบฒเบ–เบฒเบก OLTP. เบกเบต 0,5 milliseconds เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, 20 milliseconds เบชเปเบฒเบฅเบฑเบš parsing. เบฎเป‰เบญเบ‡เบ‚เป - 10 KiB เบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก, 170 เป€เบชเบฑเป‰เบ™เบ‚เบญเบ‡เปเบœเบ™เบเบฒเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบณเบฎเป‰เบญเบ‡เบ‚เป OLTP. เบกเบฑเบ™เบฎเป‰เบญเบ‡เบ‚เป 1, 5, 10 เปเบ–เบง, เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบซเบผเบฒเบ.

เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบขเบฒเบเป€เบชเบเป€เบงเบฅเบฒ 20 เบกเบดเบ™เบฅเบดเบงเบดเบ™เบฒเบ—เบตเป€เบฅเบตเบ. เบžเบงเบเป€เบฎเบปเบฒเบซเบผเบธเบ”เบฅเบปเบ‡เป€เบ›เบฑเบ™ 0. เบ—เบธเบเบขเปˆเบฒเบ‡เบ”เบตเป€เบฅเบตเบ”.

เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบญเบปเบฒเบซเบเบฑเบ‡เป„เบ›เบˆเบฒเบเบ™เบตเป‰? เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบต Java, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เป€เบญเบปเบฒเบฎเบธเปˆเบ™เบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบ‚เบญเบ‡เป„เบ”เป€เบงเบตเปเบฅเบฐเบ›เบดเบ•เบดเบเบดเบ™เบ”เบต.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบงเบปเป‰เบฒเบžเบฒเบชเบฒเบญเบทเปˆเบ™, เปเบฅเป‰เบงเบ„เบดเบ”เบงเปˆเบฒ - เบšเบฒเบ‡เบ—เบตเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ™เบตเป‰เบ„เบทเบเบฑเบ™เบšเป? เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบ‚เบญเบ‡เบžเบฒเบชเบฒเบชเบธเบ”เบ—เป‰เบฒเบ, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒ PL 8 เบซเบผเบทเบ—เปˆเบฒเบ™เบกเบต LibPQ, เบกเบฑเบ™เบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เบเบฑเบšเบ—เปˆเบฒเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰เป€เบงเบฅเบฒเบšเปเปˆเป„เบ”เป‰เบขเบนเปˆเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ, เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™เบกเบนเบ™เบ„เปˆเบฒเบเบฒเบ™เบเบงเบ”เบชเบญเบš. เปเบ™เบงเปƒเบ”? เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบšเปเปˆเป€เบชเบเบ„เปˆเบฒ.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒเบกเบตเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปเบฅเบฐ peculiarities เบšเบฒเบ‡. เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบžเบงเบเบกเบฑเบ™เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™. เบชเปˆเบงเบ™เปƒเบซเบเปˆเบˆเบฐเบเปˆเบฝเบงเบเบฑเบšเป‚เบšเบฎเบฒเบ™เบ„เบฐเบ”เบตเบญเบธเบ”เบชเบฒเบซเบฐเบเปเบฒ, เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบžเบปเบšเป€เบซเบฑเบ™, เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบฒเปƒเบ™เบ—เบปเปˆเบง.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบ–เป‰เบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ–เบทเบเบชเป‰เบฒเบ‡เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง. เบกเบฑเบ™โ€‹เป€เบเบตเบ”โ€‹เบ‚เบทเป‰เบ™. เบšเบฒเบ‡เบ„เบปเบ™เบเบฒเบงเบชเบฒเบเป€เบ‚เบปเป‰เบฒเบเบฑเบ™, เบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰เบกเบตเบเบฒเบ™เบชเบญเบšเบ–เบฒเบก SQL.

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบฅเบฒเบงเบˆเบถเปˆเบ‡เบšเปเปˆเบ”เบต? เบกเบฑเบ™เบšเปเปˆเบ”เบตเป€เบžเบฒเบฐเบงเปˆเบฒเปเบ•เปˆเบฅเบฐเบ„เบฑเป‰เบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบปเบšเบฅเบปเบ‡เบ”เป‰เบงเบเบชเบฒเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เปเบฅเบฐ hashCode เบ‚เบญเบ‡ string เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ™เบตเป‰เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบญเปˆเบฒเบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เบงเบฝเบ CPU เปเบ—เป‰เป† - เบเบฒเบ™เบŠเบญเบเบซเบฒเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบงเปƒเบ™เปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡ hash เบ—เบตเปˆเบกเบตเบขเบนเปˆเบเปเปˆเบšเปเปˆเปเบกเปˆเบ™เป€เบฅเบทเปˆเบญเบ‡เบ‡เปˆเบฒเบ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เบชเบฐเบซเบฅเบธเบšเปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบ - เบšเปเปˆเบชเป‰เบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป. เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบžเบงเบเบกเบฑเบ™เป„เบงเป‰เปƒเบ™เบ•เบปเบงเปเบ›เบ”เบฝเบง. เปเบฅเบฐเบ›เบดเบ•เบดเบเบดเบ™เบ”เบต.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบšเบฑเบ™เบซเบฒเบ•เปเปˆเป„เบ›. เบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เบชเปเบฒเบ„เบฑเบ™. เบกเบต ORMs เบ—เบตเปˆเป€เบงเบปเป‰เบฒเบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเบชเปเบฒเบ„เบฑเบ™เบงเปˆเบฒเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ NULL เปเบกเปˆเบ™เบซเบเบฑเบ‡, เปƒเบซเป‰เบกเบตเบšเบฒเบ‡เบ›เบฐเป€เบžเบ”. เบ–เป‰เบฒ Int, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเป€เบงเบปเป‰เบฒเบงเปˆเบฒ setInt. เปเบฅเบฐเบ–เป‰เบฒ NULL, เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™ VARCHAR เบชเบฐเป€เปเบต. เปเบฅเบฐเบกเบฑเบ™เบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปเบ™เบงเปƒเบ”เปƒเบ™เบ—เบตเปˆเบชเบธเบ”เบชเบดเปˆเบ‡เบ—เบตเปˆ NULL เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™? เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเบ—เบธเบเบขเปˆเบฒเบ‡. เปเบฅเบฐเบฎเบนเบšเบ™เบตเป‰เปƒเบŠเป‰เบšเปเปˆเป„เบ”เป‰.

เปƒเบ™เบ—เบฒเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”, เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบšเปเปˆเบชเบปเบ™เปƒเบˆเป€เบฅเบตเบ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบงเบปเป‰เบฒเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเป€เบฅเบ, เปเบฅเบฐเบ„เบฑเป‰เบ‡เบ—เบตเบชเบญเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™ VARCHAR, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เบเปเปˆเป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ—เบตเปˆเบเบฐเบเบฝเบกเป‚เบ”เบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เปเบฅเบฐเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ„เบทเบ™เปƒเบซเบกเปˆ.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ”เบฝเบงเบเบฑเบ™, เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบ„เปเบฅเปเบฒเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฑเบšเบชเบปเบ™. เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฅเบฐเบงเบฑเบ‡เบชเปเบฒเบฅเบฑเบš NULL. เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบซเบผเบฑเบ‡เบˆเบฒเบเบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเปƒเบŠเป‰ PreparedStatements

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบ•เบปเบเบฅเบปเบ‡, เป€เบ›เบตเบ”เปเบฅเป‰เบง. เบšเบฒเบ‡เบ—เบตเบžเบงเบเป€เบ‚เบปเบฒเป€เบญเบปเบฒเบ„เบปเบ™เบ‚เบฑเบš. เปเบฅเบฐเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบซเบผเบธเบ”เบฅเบปเบ‡. เบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป†เบšเปเปˆเบ”เบต.

เบ™เบตเป‰เป€เบเบตเบ”เบ‚เบถเป‰เบ™เปเบ™เบงเปƒเบ”? เบ™เบตเป‰เปเบกเปˆเบ™ bug เบซเบผเบทเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”? เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เบกเบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเปƒเบˆเป„เบ”เป‰เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™ bug เบซเบผเบทเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”. เปเบ•เปˆเบกเบตเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เบ„เบทเบ™เปƒเบซเบกเปˆ. เบ™เบฒเบ‡เป„เบ”เป‰เป‚เบˆเบกเบ•เบตเบžเบงเบเป€เบฎเบปเบฒเบขเปˆเบฒเบ‡เบšเปเปˆเบ„เบฒเบ”เบเบฑเบ™. เปเบฅเบฐเบกเบฑเบ™เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบเบฒเบ™เป€เบเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบฎเบนเป‰เบซเบ™เบฑเบ‡เบชเบทเบˆเบฒเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบซเบ™เบถเปˆเบ‡. เบžเบงเบเป€เบฎเบปเบฒ, เปเบ™เปˆเบ™เบญเบ™, เบกเบตเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบซเบผเบฒเบ. เบ•เบฒเบกเบเบปเบ”เบฅเบฐเบšเบฝเบš, เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบ›เบฐเบเบญเบšเบกเบตเบชเบญเบ‡เบซเบผเบทเบชเบฒเบกเบ•เบฒเบ•เบฐเบฅเบฒเบ‡, เปเบ•เปˆเบงเปˆเบฒเบกเบตเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบซเบผเบดเป‰เบ™เบ„เบทเบ™. เป€เบญเบปเบฒเบชเบฐเบšเบฑเบšเปƒเบ”เบเปเปˆเบ•เบฒเบกเบˆเบฒเบเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐเบซเบผเบดเป‰เบ™เบกเบฑเบ™.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

https://gist.github.com/vlsi/df08cbef370b2e86a5c1

เบˆเบธเบ”เปเบกเปˆเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบชเบญเบ‡เบ„เปเบฅเปเบฒ, เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เบ–เบทเบเบ”เบฑเบ”เบชเบฐเบ™เบต. เบกเบตเบ™เบถเปˆเบ‡เบฅเป‰เบฒเบ™เปเบ–เบงเบขเบนเปˆเปƒเบ™เบ–เบฑเบ™ NULL. เปเบฅเบฐเบ–เบฑเบ™เบ—เบตเบชเบญเบ‡เบกเบตเบžเบฝเบ‡ 20 เปเบ–เบง. เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเบšเปเปˆเบกเบตเบ•เบปเบงเปเบ›เบ—เบตเปˆเบœเบนเบเบกเบฑเบ”, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ”เบต.

เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเบ›เบฐเบ•เบดเบšเบฑเบ”เบ”เป‰เบงเบเบ•เบปเบงเปเบ›เบ—เบตเปˆเบœเบนเบเบกเบฑเบ”, i.e. เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ” "?" เบซเบผเบท โ€œ$1โ€ เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบซเบเบฑเบ‡?

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

https://gist.github.com/vlsi/df08cbef370b2e86a5c1

เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เป€เบ›เบฑเบ™เป„เบ›เบ•เบฒเบกเบ„เบฒเบ”. เบญเบฑเบ™เบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™เป„เบงเบ‚เบถเป‰เบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ. เบšเบฒเบ‡โ€‹เบญเบฑเบ™โ€‹เบ–เบทเบโ€‹เป€เบเบฑเบšโ€‹เป„เบงเป‰. เบ—เบตเบชเบฒเบก, เบชเบตเปˆ, เบซเป‰เบฒ. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบชเบฝเบ‡เบ›เบฑเป‰เบ‡ - เปเบฅเบฐเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบงเปˆเบฒ. เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบฎเป‰เบฒเบเปเบฎเบ‡เบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™เบงเปˆเบฒเบชเบดเปˆเบ‡เบ™เบตเป‰เป€เบเบตเบ”เบ‚เบทเป‰เบ™เบเบฑเบšเบเบฒเบ™เบ›เบฐเบซเบฒเบ™เบŠเบตเบงเบดเบ”เบ„เบฑเป‰เบ‡เบ—เบต XNUMX. เปƒเบœเบฎเบนเป‰เบงเปˆเบฒเบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ›เบฐเบซเบฒเบ™เบŠเบตเบงเบดเบ”เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡ XNUMX เบ„เบฑเป‰เบ‡เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเปเบœเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบปเบงเบˆเบดเบ‡เปเบกเปˆเบ™เบซเบเบฑเบ‡?

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เปƒเบœเบœเบดเบ”? เป€เบเบตเบ”โ€‹เบซเบเบฑเบ‡โ€‹เบ‚เบถเป‰เบ™? เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš. เปเบฅเบฐเบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบˆเบฐเป€เบซเบกเบฒเบฐเบชเปเบฒเบฅเบฑเบšเบเปเบฅเบฐเบ™เบตเบ—เบปเปˆเบงเป„เบ›. เปเบฅเบฐ, เบ•เบฒเบกเบ™เบฑเป‰เบ™, เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™เบšเบฒเบ‡เบˆเบธเบ”, เบ™เบฒเบ‡เป„เบ”เป‰เบ›เปˆเบฝเบ™เป„เบ›เบชเบนเปˆเปเบœเบ™เบเบฒเบ™เบ—เบปเปˆเบงเป„เบ›, เป€เบŠเบดเปˆเบ‡, เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เบญเบฒเบ”เบˆเบฐเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบญเบฑเบ™เบ”เบฝเบงเบเบฑเบ™, เบซเบผเบทเบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เปเบฅเบฐเบกเบตเบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบ™เปเบฒเป„เบ›เบชเบนเปˆเบžเบถเบ”เบ•เบดเบเปเบฒเบ™เบตเป‰.

เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™? เบ—เบตเปˆเบ™เบตเป‰, เปเบ™เปˆเบ™เบญเบ™, เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบเบฒเบเบ—เบตเปˆเบˆเบฐเบชเบปเบกเบกเบธเบ”เบซเบเบฑเบ‡. เบกเบตเบเบฒเบ™เปเบเป‰เป„เบ‚เบ‡เปˆเบฒเบเป†เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰. เบ™เบตเป‰เปเบกเปˆเบ™ +0, OFFSET 0. เปเบ™เปˆเบ™เบญเบ™เป€เบˆเบปเป‰เบฒเบฎเบนเป‰เบงเบดเบ—เบตเปเบเป‰เป„เบ‚เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง. เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเป€เบญเบปเบฒเบกเบฑเบ™เปเบฅเบฐเป€เบžเบตเปˆเบก "+0" เปƒเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปเบฅเบฐเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ”เบต. เบ‚เป‰เบญเบเบˆเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบˆเบปเป‰เบฒเป€เบซเบฑเบ™เปƒเบ™เบžเบฒเบเบซเบผเบฑเบ‡.

เปเบฅเบฐเบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบญเบทเปˆเบ™ - เป€เบšเบดเปˆเบ‡เปเบœเบ™เบเบฒเบ™เบขเปˆเบฒเบ‡เบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡. เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบ‚เบฝเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป, เปเบ•เปˆเบเบฑเบ‡เป€เบงเบปเป‰เบฒเบงเปˆเบฒ "เบญเบฐเบ—เบดเบšเบฒเบเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ" 6 เป€เบ—เบทเปˆเบญ. เบ–เป‰เบฒเบกเบฑเบ™เป€เบ›เบฑเบ™ 5, เบกเบฑเบ™เบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบ.

เปเบฅเบฐเบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเบชเบฒเบก - เบ‚เบฝเบ™เบˆเบปเบ”เบซเบกเบฒเบเบซเบฒ pgsql-hackers. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ‚เบฝเบ™, เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบกเบฑเบ™เบเบฑเบ‡เบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™ bug เบซเบผเบทเบฅเบฑเบเบชเบฐเบ™เบฐ.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

https://gist.github.com/vlsi/df08cbef370b2e86a5c1

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ„เบดเบ”เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™ bug เบซเบผเบทเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”, เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเปเบเป‰เป„เบ‚เบกเบฑเบ™. เปƒเบซเป‰เป€เบญเบปเบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบฅเบฐเป€เบžเบตเปˆเบก "+0". เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ”เบต. เบชเบญเบ‡เบชเบฑเบ™เบเบฒเบฅเบฑเบเปเบฅเบฐเบ—เปˆเบฒเบ™เบšเปเปˆ เบˆเบณ เป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”. เบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบ. เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบซเป‰เบฒเบกเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ”เบฑเบ”เบชเบฐเบ™เบตเปƒเบ™เบ„เปเบฅเปเบฒเบ™เบตเป‰. เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบกเบตเบ”เบฑเบ”เบŠเบฐเบ™เบตเบขเบนเปˆเปƒเบ™เบ–เบฑเบ™ "+0" เปเบฅเบฐเบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰เบ”เบฑเบ”เบชเบฐเบ™เบต, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ”เบต.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบ™เบตเป‰เปเบกเปˆเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ‚เบญเบ‡ 6 เบญเบฐเบ—เบดเบšเบฒเบ. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เปƒเบ™เบชเบฐเบšเบฑเบšเบ›เบฐเบˆเบธเบšเบฑเบ™เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ” 6 เป€เบ—เบทเปˆเบญเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเบ•เบปเบงเปเบ›เบ—เบตเปˆเบœเบนเบเบกเบฑเบ”. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบกเบตเบ•เบปเบงเปเบ›เบ—เบตเปˆเบœเบนเบเบกเบฑเบ”, เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”. เปเบฅเบฐเปƒเบ™เบ—เบตเปˆเบชเบธเบ”เบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ™เบตเป‰เบ—เบตเปˆเบฅเบปเป‰เบกเป€เบซเบฅเบง. เบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบซเบเบธเป‰เบ‡เบเบฒเบ.

เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ, เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบซเบผเบฒเบเบ›เบฒเบ™เปƒเบ”? เปเบกเบ‡เป„เบกเป‰เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰, เปเบกเบ‡เป„เบกเป‰เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เปเบกเบ‡เป„เบกเป‰เบกเบตเบขเบนเปˆเบ—เบปเปˆเบงเบ—เบธเบเปเบซเปˆเบ‡.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบฅเบญเบ‡เป€เบšเบดเปˆเบ‡เปƒเบเป‰เป†. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบชเบญเบ‡ schemas. เปเบœเบ™เบœเบฑเบ‡ A เบเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡ S เปเบฅเบฐเปเบœเบ™เบงเบฒเบ” B เบเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡ S. Query - เป€เบฅเบทเบญเบเบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบกเบตเบซเบเบฑเบ‡เปเบ”เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰? เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบกเบตเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบกเบตเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡. เบเบปเบ”เบฅเบฐเบšเบฝเบšเปเบกเปˆเบ™ - เปเบกเบ‡เป„เบกเป‰เบกเบตเบขเบนเปˆเบ—เบปเปˆเบงเบ—เบธเบเปเบซเปˆเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบกเบตเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ„เปเบฒเบ–เบฒเบกเปเบกเปˆเบ™: "เป€เบ›เบฑเบ™เบซเบเบฑเบ‡?" เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบกเบตเป€เบญเบเบฐเบชเบฒเบ™เบงเปˆเบฒเบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบกเบต schema, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบตเบ•เบปเบงเปเบ› "search_path" เบ—เบตเปˆเบšเบญเบเบžเบงเบเป€เบฎเบปเบฒเบงเปˆเบฒเบˆเบฐเบŠเบญเบเบซเบฒเบ•เบฒเบ•เบฐเบฅเบฒเบ‡. เบกเบฑเบ™เบˆเบฐเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบกเบตเบ•เบปเบงเปเบ›.

เบกเบตโ€‹เบšเบฑเบ™โ€‹เบซเบฒโ€‹เบซเบเบฑเบ‡? เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบงเปˆเบฒเบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ—เบตเปˆเบเบฐเบเบฝเบกเป‚เบ”เบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบšเปเปˆเป„เบ”เป‰เบชเบปเบ‡เปƒเบชเบงเปˆเบฒ search_path เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ›เปˆเบฝเบ™เปเบ›เบ‡เป‚เบ”เบเบœเบนเป‰เปƒเบ”เบœเบนเป‰เบซเบ™เบถเปˆเบ‡. เบกเบนเบ™เบ„เปˆเบฒเบ™เบตเป‰เบเบฑเบ‡เบ„เบปเบ‡เบขเบนเปˆ, เบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™, เบ„เบปเบ‡เบ—เบตเปˆเบชเปเบฒเบฅเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เปเบฅเบฐเบšเบฒเบ‡เบชเปˆเบงเบ™เบญเบฒเบ”เบˆเบฐเบšเปเปˆเป€เบฅเบทเบญเบเป€เบญเบปเบฒเบ„เบงเบฒเบกเบซเบกเบฒเบเปƒเบซเบกเปˆ.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เปเบ™เปˆเบ™เบญเบ™, เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบชเบฐเบšเบฑเบšเบ—เบตเปˆเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบ—เบปเบ”เบชเบญเบš. เบ‚เบถเป‰เบ™เบเบฑเบšเบงเปˆเบฒเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปเบ™เบงเปƒเบ”. เปเบฅเบฐเบชเบฐเบšเบฑเบš 9.1 เบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเป€เบเบปเปˆเบฒ. เบฎเบธเปˆเบ™เปƒเบซเบกเปˆเบญเบฒเบ”เบˆเบฐเบˆเบฑเบšเปเบกเบ‡เป„เบกเป‰เปเบฅเบฐเบšเบญเบเบ—เปˆเบฒเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบตเปเบกเบ‡เป„เบกเป‰.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบเปเบฒเบ™เบปเบ” search_path + server-prepared statements =
เปเบœเบ™เบเบฒเบ™เบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบ–เบฒเบ™เบ„เบงเบฒเบกเบˆเปเบฒเบ•เป‰เบญเบ‡เบšเปเปˆเบ›เปˆเบฝเบ™เบ›เบฐเป€เบžเบ”เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš

เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบ›เบดเปˆเบ™โ€‹เบ›เบปเบงโ€‹เบกเบฑเบ™โ€‹? เบกเบตเบชเบนเบ”เบ‡เปˆเบฒเบเป† - เบขเปˆเบฒเป€เบฎเบฑเบ”. เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ›เปˆเบฝเบ™ search_path เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡, เบกเบฑเบ™เบเปเปˆเบ”เบตเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปƒเบซเบกเปˆ.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเบปเบ™เบ—เบฐเบ™เบฒ, i.e. เป€เบ›เบตเบ”, เบ›เบถเบเบชเบฒเบซเบฒเบฅเบท, เป€เบžเบตเปˆเบก. เบšเบฒเบ‡เบ—เบตเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป‚เบ™เป‰เบกเบ™เป‰เบฒเบงเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบงเปˆเบฒเป€เบกเบทเปˆเบญเบœเบนเป‰เปƒเบ”เบœเบนเป‰เบ™เบถเปˆเบ‡เบ›เปˆเบฝเบ™เปเบ›เบ‡เบกเบนเบ™เบ„เปˆเบฒ, เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ„เบงเบ™เบšเบญเบเบฅเบนเบเบ„เป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰: "เป€เบšเบดเปˆเบ‡, เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰. เบšเบฒเบ‡เบ—เบตเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบฃเบตเป€เบŠเบฑเบ”เปƒเบšเบฅเบฒเบเบ‡เบฒเบ™ เปเบฅเบฐเบชเป‰เบฒเบ‡เบžเบงเบเบกเบฑเบ™เบ„เบทเบ™เปƒเปเปˆเบšเป?โ€ เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบปเบงเบขเปˆเบฒเบ‡เบฅเบฑเบšเป†เปเบฅเบฐเบšเปเปˆเป„เบ”เป‰เบฅเบฒเบเบ‡เบฒเบ™เปƒเบ™เบ—เบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบกเบ—เบตเปˆเบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบšเบฒเบ‡เบšเปˆเบญเบ™เบžเบฒเบเปƒเบ™.

เปเบฅเบฐเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเป€เบ™เบฑเป‰เบ™เบซเบ™เบฑเบเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡ - เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบšเปเปˆเบ›เบปเบเบเบฐเบ•เบดเบชเปเบฒเบฅเบฑเบš Java. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบซเบฑเบ™เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™เปƒเบ™ PL / pgSQL เบซเบ™เบถเปˆเบ‡เบซเบฒเบซเบ™เบถเปˆเบ‡. เปเบ•เปˆเบกเบฑเบ™เบˆเบฐเบ–เบทเบเปเบœเปˆเบžเบฑเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบกเบฒเบฅเบญเบ‡เป€เบฅเบทเบญเบเบ‚เปเป‰เบกเบนเบ™เบ•เบทเปˆเบกเบญเบตเบ. เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบทเบญเบเปเบฅเบฐเป€เบฅเบทเบญเบ. เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบกเบตเบฅเป‰เบฒเบ™เปเบ–เบง. เปเบ•เปˆเบฅเบฐเป€เบชเบฑเป‰เบ™เปเบกเปˆเบ™เบเบดเป‚เบฅเป„เบš. เบ›เบฐเบกเบฒเบ™ gigabyte เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™. เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡ Java เบ‚เบญเบ‡ 128 megabytes.

เบžเบงเบเป€เบฎเบปเบฒ, เบ•เบฒเบกเบ—เบตเปˆเปเบ™เบฐเบ™เปเบฒเปƒเบ™เบ›เบถเป‰เบกเบ—เบฑเบ‡เบซเบกเบปเบ”, เปƒเบŠเป‰เบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เบ™เป‰เปเบฒ. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ” resultSet เปเบฅเบฐเบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบ—เบทเปˆเบญเบฅเบฐเบซเบ™เป‰เบญเบ. เบกเบฑเบ™เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบšเป? เบกเบฑเบ™เบˆเบฐเบ•เบปเบเบˆเบฒเบเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบšเป? เป€เบˆเบปเป‰เบฒเบˆเบฐเบญเปˆเบฒเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเบšเป? เบ‚เปเปƒเบซเป‰เป„เบงเป‰เบงเบฒเบ‡เปƒเบˆเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เปƒเบซเป‰เป„เบงเป‰เบงเบฒเบ‡เปƒเบˆเปƒเบ™ Postgres. เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป€เบŠเบทเปˆเบญเบกเบฑเบ™. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เบปเบ OutOFMemory เบšเป? เปƒเบœเบกเบตเบ›เบฐเบชเบปเบšเบเบฒเบ™ OutOfMemory? เปƒเบœเบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เบกเบฑเบ™เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™? เบกเบตเบ„เบปเบ™เบˆเบฑเบ”เบเบฒเบ™เปเบเป‰เป„เบ‚เบกเบฑเบ™.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเปเบ–เบงเป€เบ›เบฑเบ™เบฅเป‰เบฒเบ™, เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบžเบฝเบ‡เปเบ•เปˆเป€เบฅเบทเบญเบเปเบฅเบฐเป€เบฅเบทเบญเบ. เบ•เป‰เบญเบ‡เบเบฒเบ™ OFFSET/LIMIT. เปƒเบœเป€เบ›เบฑเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ™เบตเป‰? เปเบฅเบฐเบœเบนเป‰เบ—เบตเปˆเบกเบฑเบเบซเบผเบตเป‰เบ™เบเบฑเบš autoCommit?

เบ—เบตเปˆเบ™เบตเป‰, เบ•เบฒเบกเบ›เบปเบเบเบฐเบ•เบด, เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบšเปเปˆเบ„เบฒเบ”เบ„เบดเบ”เบ—เบตเปˆเบชเบธเบ”เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡. เปเบฅเบฐเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ—เบฑเบ™เบ—เบตเบ—เบฑเบ™เปƒเบ”เบ›เบดเบ” autoCommit, เบกเบฑเบ™เบˆเบฐเบŠเปˆเบงเบเป„เบ”เป‰. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ„เบท? เบงเบดเบ—เบฐเบเบฒเบชเบฒเบ”เบšเปเปˆเบฎเบนเป‰เป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เปเบ•เปˆเป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบฅเบนเบเบ„เป‰เบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ Postgres เบ”เบถเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”. PgJDBC เบšเปเปˆเบกเบตเบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เปƒเบ™เป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰; เบกเบฑเบ™เป€เบฅเบทเบญเบเปเบ–เบงเบ—เบฑเบ‡เบซเบกเบปเบ”.

เบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบซเบปเบงเบ‚เปเป‰ FetchSize, i.e. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบงเบปเป‰เบฒเป„เบ”เป‰เปƒเบ™เบฅเบฐเบ”เบฑเบšเบ‚เบญเบ‡เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ—เบตเปˆเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบงเปˆเบฒเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰, เบเบฐเบฅเบธเบ™เบฒเป€เบฅเบทเบญเบเบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบ 10, 50. เปเบ•เปˆเบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบˆเบปเบ™เบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเบฐเบ›เบดเบ” autoCommit. เบ›เบดเบ” autoCommit - เบกเบฑเบ™เป€เบฅเบตเปˆเบกเป€เบฎเบฑเบ”เบงเบฝเบ.

เปเบ•เปˆเบเบฒเบ™เบœเปˆเบฒเบ™เบฅเบฐเบซเบฑเบ”เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ setFetchSize เบขเบนเปˆเบ—เบปเปˆเบงเบ—เบธเบเปเบซเปˆเบ‡เปเบกเปˆเบ™เบšเปเปˆเบชเบฐเบ”เบงเบ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบงเบปเป‰เบฒเบงเปˆเบฒเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบงเบปเป‰เบฒ. เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเป„เบ”เป‰เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบฅเป‰เบง. เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบซเบเบฑเบ‡? เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบทเบญเบเบˆเปเบฒเบ™เบงเบ™เบ™เป‰เบญเบเป†, เบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบทเบญเบ 10 เปเบ–เบงเปƒเบ™เป€เบงเบฅเบฒเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบซเบผเบฒเบ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ„เปˆเบฒเบ™เบตเป‰เบ„เบงเบ™เบˆเบฐเบ–เบทเบเบ•เบฑเป‰เบ‡เป€เบ›เบฑเบ™เบ›เบฐเบกเบฒเบ™เบฎเป‰เบญเบ.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เป‚เบ”เบเบซเบฅเบฑเบเบเบฒเบ™เปเบฅเป‰เบง, เปเบ™เปˆเบ™เบญเบ™, เบ—เปˆเบฒเบ™เบเบฑเบ‡เบ•เป‰เบญเบ‡เบฎเบฝเบ™เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบˆเปเบฒเบเบฑเบ”เบกเบฑเบ™เปƒเบ™ bytes, เปเบ•เปˆเบชเบนเบ”เบ™เบตเป‰เปเบกเปˆเบ™: เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ defaultRowFetchSize เบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เบฎเป‰เบญเบเปเบฅเบฐเบกเบตเบ„เบงเบฒเบกเบชเบธเบ.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เปƒเบซเป‰เบเป‰เบฒเบงเป„เบ›เบชเบนเปˆเบเบฒเบ™เปƒเบชเปˆเบ‚เปเป‰เบกเบนเบ™. เบเบฒเบ™เปเบŠเบเปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™, เบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡, INSERT, VALUES. เบ™เบตเป‰เปเบกเปˆเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบ”เบต. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบงเบปเป‰เบฒเบงเปˆเบฒ "INSERT SELECT". เปƒเบ™เบ—เบฒเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”, เบกเบฑเบ™เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™. เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”.

เบ›เบทเป‰เบกเบšเบญเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡ Batch, เบซเบ™เบฑเบ‡เบชเบทเบšเบญเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบเบ”เป‰เบงเบเบงเบปเบ‡เป€เบฅเบฑเบšเบซเบผเบฒเบ. เปเบฅเบฐ Postgres เบกเบตเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเบ”เบตเป€เบฅเบตเบ” - เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ” COPY, i.e. เป€เบฎเบฑเบ”เบกเบฑเบ™เป„เบงเบ‚เบถเป‰เบ™.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบงเบฑเบ”เปเบ—เบเบกเบฑเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบเบฒเบ™เบ„เบปเป‰เบ™เบžเบปเบšเบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡. เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบซเป‰เบชเบดเปˆเบ‡เบ™เบตเป‰เป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”? เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบšเปเปˆเบงเบดเป€เบ„เบฒเบฐเปเบฅเบฐเบšเปเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, TCP เบšเปเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰. เบ–เป‰เบฒเบฅเบนเบเบ„เป‰เบฒเบšเปเปˆเบซเบงเปˆเบฒเบ‡เบ—เบตเปˆเบˆเบฐเบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป, เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบšเปเปˆเป„เบ”เป‰เบญเปˆเบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป€เบžเบทเปˆเบญเบžเบฐเบเบฒเบเบฒเบกเบชเบปเปˆเบ‡เบ„เปเบฒเบ•เบญเบšเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒ. เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™เบงเปˆเบฒเบฅเบนเบเบ„เป‰เบฒเบฅเปเบ–เป‰เบฒเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบžเบทเปˆเบญเบญเปˆเบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป, เปเบฅเบฐเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบฅเปเบ–เป‰เบฒเบฅเบนเบเบ„เป‰เบฒเบญเปˆเบฒเบ™เบ„เปเบฒเบ•เบญเบš.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบฅเบนเบเบ„เป‰เบฒเป„เบ”เป‰เบ–เบทเบเบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบชเบปเปˆเบ‡เบŠเบญเบ‡ synchronization เป€เบ›เบฑเบ™เป„เบฅเบเบฐ. เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบžเบดเป€เบชเบ”, เบเบฒเบ™เป€เบชเบเป€เบงเบฅเบฒเบžเบดเป€เบชเบ”.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikovเปเบฅเบฐเบซเบผเบฒเบเบžเบงเบเป€เบฎเบปเบฒเป€เบžเบตเปˆเบกเปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ, เบกเบฑเบ™เบฎเป‰เบฒเบเปเบฎเบ‡เบ‚เบถเป‰เบ™. เป„เบ”เป€เบงเบตเปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบˆเบทเบ”เป†เปเบฅเบฐเป€เบžเบตเปˆเบกเบžเบงเบเบกเบฑเบ™เป€เบฅเบทเป‰เบญเบเป†, เบ›เบฐเบกเบฒเบ™เบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เปƒเบ™ 200 เป€เบชเบฑเป‰เบ™, เบ‚เบถเป‰เบ™เบเบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบชเบฒเบ, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

https://github.com/pgjdbc/pgjdbc/pull/380

เบกเบฑเบ™เป€เบเบตเบ”เบ‚เบทเป‰เบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เปเบเป‰เป„เบ‚เบžเบฝเบ‡เปเบ•เปˆเป€เบชเบฑเป‰เบ™เบ”เบฝเบงเปเบฅเบฐเบ—เบธเบเบขเปˆเบฒเบ‡เบˆเบฐเป„เบงเบ‚เบถเป‰เบ™ 10 เป€เบ—เบทเปˆเบญ. เบกเบฑเบ™โ€‹เป€เบเบตเบ”โ€‹เบ‚เบทเป‰เบ™. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡? เบ•เบฒเบกเบ›เบปเบเบเบฐเบ•เบด, เบ„เปˆเบฒเบ„เบปเบ‡เบ—เบตเปˆเปเบšเบšเบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบขเบนเปˆเบšเปˆเบญเบ™เปƒเบ”เบšเปˆเบญเบ™เปœเบถเปˆเบ‡เปเบฅเป‰เบง. เปเบฅเบฐเบ„เปˆเบฒ "128" เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบšเปเปˆเปƒเบŠเป‰ batching.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

Java microbenchmark harness

เบกเบฑเบ™เบ”เบตเบ—เบตเปˆเบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบฅเบงเบกเบขเบนเปˆเปƒเบ™เบชเบฐเบšเบฑเบšเบ—เบตเปˆเป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™. เบ„เบปเป‰เบ™เบžเบปเบšเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบง. เบ—เบธเบเป†เบ„เบงเบฒเบกเบซเบกเบฒเบเบ—เบตเปˆเบ‚เป‰เบญเบเปƒเบซเป‰เปเบกเปˆเบ™เบญเบตเบ‡เปƒเบชเปˆเบชเบฐเบšเบฑเบšเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบก.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เปƒเบซเป‰เบฅเบญเบ‡เบกเบฑเบ™เป€เบšเบดเปˆเบ‡. เบžเบงเบเป€เบฎเบปเบฒเบงเบฑเบ”เปเบ—เบ InsertBatch เบ‡เปˆเบฒเบเบ”เบฒเบ. เบžเบงเบเป€เบฎเบปเบฒเบงเบฑเบ”เปเบ—เบ InsertBatch เบซเบผเบฒเบเบ„เบฑเป‰เบ‡, i.e. เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™, เปเบ•เปˆเบกเบตเบ„เปˆเบฒเบซเบผเบฒเบ. เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบง tricky. เบšเปเปˆเปเบกเปˆเบ™เบ—เบธเบเบ„เบปเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰, เปเบ•เปˆเบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบ, เบ‡เปˆเบฒเบเบเบงเปˆเบฒเบเบฒเบ™เบชเบณเป€เบ™เบปเบฒเบซเบผเบฒเบ.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ” COPY เป„เบ”เป‰.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เปเบฅเบฐเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡. เบ›เบฐเบเบฒเบ”เบ›เบฐเป€เบžเบ”เบœเบนเป‰เปƒเบŠเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, pass array เปเบฅเบฐ INSERT เป‚เบ”เบเบเบปเบ‡เปƒเบชเปˆเบ•เบฒเบ•เบฐเบฅเบฒเบ‡.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบ›เบตเบ”เบฅเบดเป‰เบ‡: pgjdbc/ubenchmsrk/InsertBatch.java, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™ GitHub. เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบšเบดเปˆเบ‡โ€‹เป‚เบ”เบโ€‹เบชเบฐโ€‹เป€เบžเบฒเบฐโ€‹เบงเปˆเบฒโ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบ—เบตเปˆโ€‹เบ–เบทเบโ€‹เบชเป‰เบฒเบ‡โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ‚เบถเป‰เบ™โ€‹เบ—เบตเปˆโ€‹เบ™เบฑเป‰เบ™โ€‹. เบกเบฑเบ™เบšเปเปˆเบชเปเบฒเบ„เบฑเบ™.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เบ•เบปเบง. เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบฎเบฑเบšเบฎเบนเป‰เปเบกเปˆเบ™เบงเปˆเบฒเบšเปเปˆเปƒเบŠเป‰ batch เปเบกเปˆเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰. เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™ batching เบ—เบฑเบ‡เปเบปเบ”เปเบกเปˆเบ™เบชเบนเบ™, i.e. เป€เบงเบฅเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบปเบงเบˆเบดเบ‡เปเบกเปˆเบ™เบชเบนเบ™เป€เบกเบทเปˆเบญเบ—เบฝเบšเบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบฑเป‰เบ‡เบ”เบฝเบง.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบžเบงเบเป€เบฎเบปเบฒเปƒเบชเปˆเบ‚เปเป‰เบกเบนเบ™. เบกเบฑเบ™เป€เบ›เบฑเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบ. เบชเบฒเบกเบ–เบฑเบ™. เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบซเบเบฑเบ‡เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰? เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป€เบซเบฑเบ™โ€‹เบงเปˆเบฒโ€‹เบ—เบฑเบ‡โ€‹เบชเบฒเบกโ€‹เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เป€เบซเบผเบปเปˆเบฒโ€‹เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบชเบปเบกโ€‹เบ—เบฝเบšโ€‹เบ›เบฐโ€‹เบกเบฒเบ™โ€‹. เปเบฅเบฐ COPY เปเบกเปˆเบ™, เปเบ™เปˆเบ™เบญเบ™, เบ”เบตเบเบงเปˆเบฒ.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เบ™เบตเป‰เปเบกเปˆเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปƒเบชเปˆเบ•เปˆเบญเบ™. เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบšเบญเบเบงเปˆเบฒเปœเบถเปˆเบ‡เบ„เปˆเบฒ VALUES, เบชเบญเบ‡เบ„เปˆเบฒ VALUES, เบชเบฒเบกเบ„เปˆเบฒ VALUES, เบซเบผเบทเบžเบงเบเป€เบฎเบปเบฒเบŠเบตเป‰ 10 เบ‚เบญเบ‡เบกเบฑเบ™เปเบเบเบเบฑเบ™เบ”เป‰เบงเบเป€เบ„เบทเปˆเบญเบ‡เปเบฒเบเบˆเบธเบ”. เบ™เบตเป‰เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเปเบ™เบงเบ™เบญเบ™เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™. 1, 2, 4, 128. เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒ Batch Insert, เป€เบŠเบดเปˆเบ‡เปเบ•เป‰เบกเบ”เป‰เบงเบเบชเบตเบŸเป‰เบฒ, เป€เบฎเบฑเบ”เปƒเบซเป‰เบฅเบฒเบงเบฎเบนเป‰เบชเบถเบเบ”เบตเบ‚เบถเป‰เบ™เบซเบผเบฒเบ. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เปƒเบชเปˆเบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เบซเบผเบทเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡เปƒเบชเปˆเบชเบตเปˆเบ„เบฑเป‰เบ‡, เบกเบฑเบ™เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบชเบญเบ‡เป€เบ—เบปเปˆเบฒเบ—เบตเปˆเบ”เบต, เป€เบžเบฒเบฐเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เบทเปˆเบกเบ‚เปเป‰เบกเบนเบ™เปƒเบชเปˆ VALUES เบ•เบทเปˆเบกเบญเบตเบ. เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ EXECUTE เปœเป‰เบญเบเบฅเบปเบ‡.

เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ COPY เปƒเบ™โ€‹เบ›เบฐโ€‹เบฅเบดโ€‹เบกเบฒเบ™โ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹เบ™เป‰เบญเบโ€‹เปเบกเปˆเบ™ unpromising เบ—เบตเปˆโ€‹เบชเบธเบ”. เบ‚เป‰เบญเบเบšเปเปˆเป„เบ”เป‰เปเบ•เป‰เบกเบชเบญเบ‡เบญเบฑเบ™เบ—เบณเบญเบดเบ”. เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ›เบชเบฐเบซเบงเบฑเบ™, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ•เบปเบงเป€เบฅเบเบชเบตเบ‚เบฝเบงเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบชเปเบฒเบฅเบฑเบš COPY.

เบชเบณเป€เบ™เบปเบฒเบ„เบงเบ™เบ–เบทเบเปƒเบŠเป‰เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบกเบตเบ‚เปเป‰เบกเบนเบ™เบขเปˆเบฒเบ‡เปœเป‰เบญเบเปœเบถเปˆเบ‡เบฎเป‰เบญเบเปเบ–เบง. เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเปƒเบ™เบเบฒเบ™เป€เบ›เบตเบ”เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ™เบตเป‰เปเบกเปˆเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ. เปเบฅเบฐ, เบ”เป‰เบงเบเบ„เบงเบฒเบกเบŠเบทเปˆเบชเบฑเบ”, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบšเปเปˆเป„เบ”เป‰เบ‚เบธเบ”เบ„เบปเป‰เบ™เปƒเบ™เบ—เบดเบ”เบ—เบฒเบ‡เบ™เบตเป‰. เบ‚เป‰เบญเบเป„เบ”เป‰เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš Batch, เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™ COPY.

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบ•เปเปˆเป„เบ›? เบžเบงเบเป€เบฎเบปเบฒเบžเบฐเบเบฒเบเบฒเบกเบกเบฑเบ™. เบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบซเบผเบท bath เบชเบฐเบซเบฅเบฒเบ”เบ—เบตเปˆเบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบซเบผเบฒเบเบ„เบงเบฒเบกเบซเบกเบฒเบ.

PostgreSQL เปเบฅเบฐ JDBC เบšเบตเบšเบ™เป‰เปเบฒเบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”. Vladimir Sitnikov

เป€เบˆเบปเป‰เบฒเบ„เบงเบ™เป€เบญเบปเบฒเบซเบเบฑเบ‡เบญเบญเบเบˆเบฒเบเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบกเบทเป‰เบ™เบตเป‰?

  • เบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™เบเบฒเบ™เบเบฐเบเบฝเบกเปเบกเปˆเบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบšเบœเบปเบ™เบœเบฐเบฅเบดเบ”. เบกเบฑเบ™เบœเบฐเบฅเบดเบ”เป€เบ›เบฑเบ™ flop เปƒเบซเบเปˆเปƒเบ™เบขเบฒเบ‚เบตเป‰เป€เบœเบดเป‰เบ‡.
  • เปเบฅเบฐเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ” EXPLAIN ANALYZE 6 เป€เบ—เบทเปˆเบญ.
  • เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบˆเบทเบญเบˆเบฒเบ‡ OFFSET 0, เปเบฅเบฐ tricks เป€เบŠเบฑเปˆเบ™ +0 เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบชเปˆเบงเบ™เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ—เบตเปˆเบกเบตเบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™