{"id":396088,"date":"2024-06-29T12:37:47","date_gmt":"2024-06-29T12:37:47","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=396088"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-06-29T12:37:47","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=396088","title":{"rendered":"<span>Postgresso 33<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/vq\/wi\/ga\/vqwiga63njkn7hhjlave14pbqys.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/vq\/wi\/ga\/vqwiga63njkn7hhjlave14pbqys.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <i>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c: \u0432 \u044d\u0442\u043e\u043c \u0432\u044b\u043f\u0443\u0441\u043a\u0435 \u043d\u0435\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 <b>\u0420\u0435\u043b\u0438\u0437\u044b<\/b>, \u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u043b\u0438\u0437\u043e\u0432 \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u0430\u043d\u044b \u043f\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0443.<\/i><\/p>\n<h2>\u041b\u044e\u0434\u0438<\/h2>\n<p>  <b><a href=\"https:\/\/wiki.postgresql.org\/wiki\/Committers\">\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043c\u043c\u0438\u0442\u0435\u0440\u043e\u0432<\/a><\/b> \u043f\u0440\u0438\u0440\u043e\u0441 <i>\u0414\u0430\u043d\u0438\u044d\u043b\u0435\u043c \u0413\u0443\u0441\u0442\u0430\u0444\u0441\u0441\u043e\u043d\u043e\u043c<\/i> (Daniel Gustafsson, Greenplum, \u0438\u0437 \u0421\u0442\u043e\u043a\u0433\u043e\u043b\u044c\u043c\u0430) \u0438 <i>\u0414\u0436\u043e\u043d\u043e\u043c \u041d\u0430\u0439\u043b\u043e\u0440\u043e\u043c<\/i> (John Naylor, 2ndQuadrant=EDB)<\/p>\n<p>  \u0414\u0430\u043d\u0438\u044d\u043b\u044c: <i>\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e, \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e \u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u044e open source \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 15 \u043b\u0435\u0442, \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u0443\u044f\u0441\u044c \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043d\u0430 PostgreSQL \u0438 curl. \u0421\u0435\u0439\u0447\u0430\u0441 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 Greenplum. \u042f \u043a\u043e\u043d\u0442\u0440\u0438\u0431\u044c\u044e\u0442\u043e\u0440 PostgreSQL \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u043d\u0430\u0434 \u043a\u043e\u0434\u043e\u043c \u044f\u0434\u0440\u0430 PostgreSQL. \u0410 \u0435\u0449\u0451 \u043d\u0430\u0434 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u043e\u043c, \u0442\u0430\u043c \u044f \u043a\u043e\u043c\u043c\u0438\u0442\u0435\u0440. \u041a\u0440\u043e\u043c\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0441\u043a\u0438\u0445 \u0434\u0435\u043b, \u044f \u0435\u0449\u0451 \u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u044e \u043c\u0435\u0436\u0434\u0443\u043d\u0430\u0440\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438: Nordic PGDay, FOSDEM, PGDay \u0438 PostgreSQL Conference Europe.<\/i><\/p>\n<p>  \u0414\u0436\u043e\u043d \u043d\u0435 \u043b\u044e\u0431\u0438\u0442, \u0432\u0438\u0434\u0438\u043c\u043e, \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0441\u0435\u0431\u0435. \u0412 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u0431\u043b\u043e\u0433\u0435 \u0435\u0441\u0442\u044c <a href=\"https:\/\/www.2ndquadrant.com\/en\/blog\/author\/john\/\">\u043f\u0430\u0440\u043e\u0447\u043a\u0430 \u0435\u0433\u043e \u0441\u0442\u0430\u0442\u0435\u0439.<\/a><\/p>\n<p>  <b><a href=\"https:\/\/postgresql.life\/post\/bryn_llewellyn\/\">\u0418\u043d\u0442\u0435\u0440\u0432\u044c\u044e: \u0411\u0440\u0438\u043d \u041b\u044c\u044e\u044d\u043b\u043b\u0438\u043d<\/a><\/b><br \/>  <a name=\"habracut\"><\/a><br \/>  \u0411\u0440\u0438\u043d (Bryn Llewellyn) \u0432 \u0441\u0432\u043e\u0451 \u0432\u0440\u0435\u043c\u044f \u0443\u0448\u0451\u043b <a href=\"https:\/\/blog.yugabyte.com\/why-i-moved-from-oracle-to-yugabyte\/\">\u0438\u0437 Oracle \u0432 YugaByte<\/a>, \u0438 \u043e\u0431 \u044d\u0442\u043e\u043c \u0435\u0433\u043e \u0441 \u043f\u0440\u0438\u0441\u0442\u0440\u0430\u0441\u0442\u0438\u0435\u043c \u0440\u0430\u0441\u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0442. \u0411\u0440\u0438\u043d \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u043f\u043e \u0435\u0433\u043e \u0441\u043b\u043e\u0432\u0430\u043c, \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0430\u044f, \u0441 \u0431\u041e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0442 \u0411\u0440\u0438\u043d (\u043c\u043d\u0435 <a href=\"https:\/\/docs.yugabyte.com\/\">\u043e\u043d\u0430<\/a>, \u0447\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0443\u0434\u043e\u0431\u043d\u043e\u0439). \u0418 \u044d\u0442\u043e \u0437\u0430\u043d\u044f\u0442\u0438\u0435 \u0435\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442: \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u044f, \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0448\u044c \u0433\u043b\u0443\u0431\u0436\u0435. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0440\u0435\u0437\u0432\u0438\u0442\u044c\u0441\u044f, \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b.<\/p>\n<p>  \u0421\u0430\u043c\u043e\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u043b\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u2014 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c Postgres. \u0412 YugaByte \u0440\u0435\u0448\u0430\u044e\u0442 (\u0438\u043b\u0438 \u0443\u043c\u0435\u0441\u0442\u043d\u0435\u0439 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u00ab\u043e\u0431\u0445\u043e\u0434\u044f\u0442\u00bb?) \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u00ab\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0440\u0430\u0437\u0443\u043c\u043d\u044b\u043c \u043f\u0443\u0442\u0451\u043c: \u043a\u043e\u0434 PostgreSQL \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u201e\u0432\u0435\u0440\u0445\u043d\u044f\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430\u201c, C-\u0441\u043b\u043e\u0439 \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 SQL. \u0410 \u201e\u043d\u0438\u0436\u043d\u044f\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430\u201c \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u044d\u0442\u043e \u044e\u0433\u0430\u0431\u0430\u0439\u0442\u043e\u0432\u0441\u043a\u0438\u0439 \u043a\u043e\u0434, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0438 \u0441 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c\u044e. \u0422\u0430\u043c \u0441\u0445\u0435\u043c\u0430 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 \u0440\u0435\u043f\u043b\u0438\u0446\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u0444\u0430\u043a\u0442\u043e\u0440 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 (\u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u043e). \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0434\u0432\u0443\u0445\u044d\u0442\u0430\u0436\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u044b \u043b\u0443\u0447\u0448\u0435 \u043d\u0430\u0447\u0430\u0442\u044c \u0441\u043e \u0441\u0442\u0430\u0442\u044c\u0438 \u0432 \u044e\u0433\u0430\u0431\u0430\u0442\u043e\u0432\u0441\u043a\u043e\u043c \u0431\u043b\u043e\u0433\u0435: <a href=\"https:\/\/blog.yugabyte.com\/distributed-postgresql-on-a-google-spanner-architecture-storage-layer\/\">Distributed PostgreSQL on a Google Spanner Architecture \u2014 Storage Layer<\/a>. \u0410 \u043f\u043e\u0442\u043e\u043c \u0443\u0436\u0435 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441\u043e\u0432\u044b\u0439 \u0441\u043b\u043e\u0439.\u00bb YugaByte \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u043a\u043e\u0434\u0430\u0445 <a href=\"https:\/\/github.com\/yugabyte\/yugabyte-db\">\u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435<\/a>.<\/p>\n<p>  \u0427\u0442\u043e \u0440\u0430\u0437\u0434\u0440\u0430\u0436\u0430\u0435\u0442 \u0411\u0440\u0438\u043d\u0430 \u0432 Postgres? \u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0442\u043e, \u0447\u0442\u043e PL\/pgSQL \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u043f\u0430\u043a\u0435\u0442\u044b \u2014 \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Oracle. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0439 \u0441\u043e\u0444\u0442, \u0441 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u0430 \u043a\u0443\u0434\u0430 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445.<\/p>\n<h2>\u0421\u0442\u0430\u0442\u044c\u0438<\/h2>\n<p>  <b><a href=\"https:\/\/habr.com\/ru\/company\/rostelecom\/blog\/566624\/\">\u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u044b \u043f\u0435\u0440\u0435\u0448\u043b\u0438 \u0441 Oracle \u043d\u0430 PostgreSQL, \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c<\/a><\/b><\/p>\n<p>  \u041e\u043f\u044b\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0441 Oracle 12 \u043d\u0430 Postgres Pro Standard 13. \u0412\u043e\u043b\u043d\u0443\u044e\u0449\u0430\u044f \u0442\u0435\u043c\u0430, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u0443\u0441\u043e\u0442\u043d\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432. \u0412 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043e\u0442 \u0421\u0431\u0435\u0440\u0430: \u00ab\u0412 \u0421\u0431\u0435\u0440\u0435 \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u044b\u0435 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u044b \u0438 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u0441 Oracle \u043d\u0430 PG \u0438\u0434\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u043c \u0445\u043e\u0434\u043e\u043c, \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0441 \u043d\u0430\u0448\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c.\u00bb<\/p>\n<p>  \u0421\u0442\u0430\u0442\u044c\u044f \u0431\u043e\u0433\u0430\u0442\u0430 \u043d\u0430 \u0441\u0441\u044b\u043b\u043a\u0438. \u0410\u0432\u0442\u043e\u0440, <a href=\"https:\/\/habr.com\/ru\/users\/plotn1\/\" class=\"user_link\">plotn1<\/a> (\u041f\u043b\u043e\u0442\u043d\u0438\u043a\u043e\u0432?) \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0434 \u0447\u0442\u0435\u043d\u0438\u0435\u043c \u0435\u0433\u043e \u0441\u0442\u0430\u0442\u044c\u0438 \u0433\u043b\u044f\u043d\u0443\u0442\u044c, <a href=\"https:\/\/habr.com\/ru\/company\/tensor\/blog\/553754\/\">\u0447\u0435\u0433\u043e \u044d\u043d\u0442\u0435\u0440\u043f\u0440\u0430\u0439\u0437\u0443 \u0432 PostgreSQL \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442<\/a>. \u041a\u0441\u0442\u0430\u0442\u0438, \u0435\u0441\u043b\u0438 \u043b\u0435\u043d\u044c \u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u0433\u0434\u0430, \u043c\u043e\u0436\u043d\u043e \u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430\u0448\u0443 \u0441\u0432\u043e\u0434\u043a\u0443 \u00ab\u043d\u0435\u0445\u0432\u0430\u0442\u043e\u043a\u00bb <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/551776\/\">\u0432 Postgresso 31<\/a>. <\/p>\n<p>  \u0410\u0432\u0442\u043e\u0440 \u0442\u0430\u043a\u0436\u0435 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 <a href=\"https:\/\/pgconf.ru\/2020\/talks-and-tutorials\">\u0434\u043e\u043a\u043b\u0430\u0434\u044b \u0438 \u043c\u0430\u0441\u0442\u0435\u0440-\u043a\u043b\u0430\u0441\u0441\u044b<\/a> PGConf.Russia, \u0441\u043e\u0432\u0435\u0442\u0443\u0435\u0442 \u043d\u0430\u0447\u0430\u0442\u044c \u0432\u043e\u0442 \u0441 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 Oracle: <a href=\"https:\/\/pgconf.ru\/2020\/274661#video\">\u041a\u0430\u043a \u044f \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f \u0438 \u043f\u0435\u0440\u0435\u043d\u0435\u0441 60K \u0441\u0442\u0440\u043e\u043a \u0438\u0437 150 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 PL\/SQL \u0432 Postgres<\/a> <i>\u0410\u043d\u0430\u0442\u043e\u043b\u0438\u044f \u0410\u043d\u0444\u0438\u043d\u043e\u0433\u0435\u043d\u043e\u0432\u0430<\/i> \u0438\u0437 \u0410\u041e \u201c\u0412\u041d\u0418\u0418\u0416\u0422\u201d. \u0410 \u043f\u043e \u0445\u043e\u0434\u0443 \u0434\u0435\u043b\u0430 \u0441\u0432\u0435\u0440\u044f\u0442\u044c\u0441\u044f \u0441 <a href=\"https:\/\/habr.com\/ru\/post\/335716\/\">\u0421\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 Oracle \u0441 PostgreSQL<\/a> <i>\u0414\u044d\u0432\u0438\u0434\u0430 \u0420\u0435\u0439\u0434\u0435\u0440\u0430<\/i> (David Rader).<\/p>\n<p>  \u0421 \u0447\u0435\u0433\u043e \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u043c\u0438\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c:<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0435 \u0432 Oracle 12. \u00ab\u0421\u0442\u0435\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u2014 java\/kotlin \u0432\u043f\u0435\u0440\u0435\u043c\u0435\u0436\u043a\u0443, spring, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f hibernate. \u0427\u0430\u0441\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u0434\u043d\u044f\u0442\u044b \u043d\u0430 glassfish, \u0447\u0430\u0441\u0442\u044c \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b \u043d\u0430 spring boot. \u0422\u0430\u043a\u043e\u0435 \u0432\u043e\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u0438\u0435.\u00bb<\/p>\n<p>  \u041c\u0438\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043d\u0430 Postgres Pro Standard 13 \u043d\u0430 RedOS 7.2 \u00ab\u041c\u0443\u0440\u043e\u043c\u00bb. \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u2014 ora2pg, \u043e\u043d \u0432\u044b\u0434\u0430\u043b \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446. \u041d\u043e \u0432\u0441\u0435 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c numeric(22), \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0442\u044c \u043d\u0430 int8. \u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044e \u0442\u0438\u043f\u043e\u0432 \u0432 Oracle \u0438 Postgres \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043e \u043d\u0435\u043c\u0430\u043b\u043e \u043c\u0435\u0441\u0442\u0430 \u2014 \u043e\u043f\u044b\u0442, \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445.<\/p>\n<p>  \u041f\u0435\u0440\u0435\u0433\u043e\u043d\u044f\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <a href=\"https:\/\/github.com\/laurenz\/oracle_fdw\">oracle_fdw<\/a>, \u043d\u043e \u043e\u043d\u043e \u0441 \u043f\u043e\u043b\u043f\u0438\u043d\u043a\u0430 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u043e\u0441\u044c. \u0410\u0432\u0442\u043e\u0440 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u044d\u043f\u0438\u0437\u043e\u0434: \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u043b \u0442\u0438\u043a\u0435\u0442 \u0432 \u0433\u0438\u0442\u0445\u0430\u0431\u0435 \u0430\u0432\u0442\u043e\u0440\u0443 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u0432\u043e\u043f\u0440\u0435\u043a\u0438 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f\u043c, \u0437\u0430 \u0434\u0435\u043d\u044c \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c.<\/p>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 Postgres Pro Standard \u043d\u0435 \u0432\u0445\u043e\u0434\u0438\u0442 pgpro_scheduler (\u043e\u043d <a href=\"https:\/\/postgrespro.ru\/docs\/enterprise\/13\/pgpro-scheduler\">\u0432\u0445\u043e\u0434\u0438\u0442<\/a> \u0432 Enterprise), \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 <a href=\"https:\/\/github.com\/citusdata\/pg_cron\">pg_cron<\/a>.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <a href=\"https:\/\/github.com\/orafce\/orafce\">orafce<\/a> (Oracle\u2019s Compatibility Functions and Packages). \u0412\u043c\u0435\u0441\u0442\u043e \u043e\u0440\u0430\u043a\u043b\u043e\u0432\u044b\u0445 \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 CTE. \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <a href=\"https:\/\/pgtune.leopard.in.ua\/#\/\">PGTune<\/a>.<\/p>\n<p>  \u041a \u0441\u043b\u043e\u0432\u0443, \u0432\u043e\u0442 \u043d\u043e\u0432\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 ora2pg \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435 \u043d\u0435\u0443\u0442\u043e\u043c\u0438\u043c\u043e\u0433\u043e <i>\u0416\u0438\u043b\u044f \u0414\u0430\u0440\u043e\u043b\u044f<\/i> (<a href=\"https:\/\/darold.net\/resume-en.html\">Gilles Darold<\/a>):<\/p>\n<p>  <b><a href=\"https:\/\/github.com\/darold\/ora2pg\/blob\/master\/changelog\">Ora2Pg 22.1<\/a><\/b><\/p>\n<p>  <b><a href=\"https:\/\/gitlab.com\/postgres-ai\/database-lab\/-\/releases\">Database Lab 2.4<\/a><\/b><\/p>\n<p>  \u041c\u044b \u043d\u0435 \u0440\u0430\u0437 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u043e Database Lab Engine \u0432 Postgresso, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0432 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/523264\/\">Postgresso 26<\/a>, \u0433\u0434\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043e DLE 2.0, \u0434\u0430\u0432\u0430\u043b\u0438 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u043e\u043b\u0443\u0442\u043e\u0440\u0430\u0447\u0430\u0441\u043e\u0432\u043e\u0439 <a href=\"https:\/\/www.youtube.com\/watch?v=t3vfGTcG91o\">\u0412\u0442\u043e\u0440\u043d\u0438\u043a<\/a>, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c <i>\u041d\u0438\u043a\u043e\u043b\u0430\u0439 \u0421\u0430\u043c\u043e\u0445\u0432\u0430\u043b\u043e\u0432<\/i> \u0438 <i>\u0410\u0440\u0442\u0451\u043c \u041a\u0430\u0440\u0442\u0430\u0441\u043e\u0432<\/i> \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0438 DLE. \u0412\u043e\u0442 \u0435\u0449\u0451 \u043f\u043e\u0432\u043e\u0434: \u0440\u0435\u043b\u0438\u0437 2.4.<\/p>\n<p>  Database Lab \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0431\u0430\u0437, \u0447\u0442\u043e\u0431\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043b\u0438 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438\u043b\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u2014 \u0432 \u043d\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438. \u041d\u043e \u044d\u0442\u043e \u00ab\u0442\u043e\u043d\u043a\u0438\u0435\u00bb \u043a\u043b\u043e\u043d\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u043e, \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0438\u043c\u0438 \u0443\u0434\u043e\u0431\u043d\u043e.<\/p>\n<p>  \u0412 2.4 <a href=\"https:\/\/postgres.ai\/blog\/20210714-dle-2-4-test-db-changes-in-ci\">\u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c<\/a> \u0434\u0432\u0430 \u0432\u0430\u0436\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430:<\/p>\n<ul>\n<li><b>DB Migration Checker<\/b>. \u041e\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 <b>\u043c\u0438\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432<\/b> \u0432 \u0441\u0442\u0438\u043b\u0435 CI\/CD (\u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \/ \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f);<\/li>\n<li>\u043c\u043e\u0434\u0443\u043b\u044c <b>Terraform<\/b> \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f DLE \u0432 AWS \u0432 \u00ab\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u00bb \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u0431\u0430\u0437\u0430 PostgreSQL \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u0433\u0434\u0435 \u0443\u0433\u043e\u0434\u043d\u043e.<\/li>\n<\/ul>\n<p>  \u0412 <a href=\"https:\/\/gitlab.com\/postgres-ai\/database-lab\/-\/releases\/2.4.0#dle-240-changelog\">\u0447\u0435\u0439\u043d\u0434\u0436\u043b\u043e\u0433\u0435<\/a> \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u043c\u0435\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0441 \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 <a href=\"https:\/\/postgres.ai\/blog\/20210714-dle-2-4-test-db-changes-in-ci\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  <b><a href=\"https:\/\/github.com\/rjuju\/pg_validate_extupgrade\">pg_validate_extugprade 1.0.0beta<\/a><\/b><\/p>\n<p>  \u041f\u043b\u043e\u0434\u043e\u0432\u0438\u0442\u044b\u0439 <i>\u0416\u0443\u043b\u044c\u0435\u043d \u0420\u0443\u043e<\/i> (Julien Rouhaud) \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442-\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u043f\u043e\u0441\u043b\u0435 \u0438\u0445 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438. \u041d\u0438\u0448\u0435\u0432\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442, \u043a\u0430\u043a \u043e\u043d \u0441\u0430\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f. <b>pg_validate_extugprade<\/b> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0441\u043e\u0437\u0434\u0430\u0434\u0443\u0442 \u043b\u0438 \u0432\u0430\u0448\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u0435\u0441\u043b\u0438 \u0432\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 X, \u0438 \u0437\u0430\u0442\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u0434\u043e Y, \u0442\u043e\u0447\u043d\u043e \u0442\u0435 \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0447\u0442\u043e \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0441\u0440\u0430\u0437\u0443 \u0432\u0435\u0440\u0441\u0438\u0438 Y. \u0418 \u0432\u044b\u0434\u0430\u0441\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0442\u043b\u0438\u0447\u0438\u0439, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0435\u0441\u0442\u044c. \u041a\u043e\u0434 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043d\u0430 RUST, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e \u0441 PostgreSQL 9.2 \u2014 14.<\/p>\n<p>  <b><a href=\"https:\/\/habr.com\/ru\/post\/568192\/\">Empire ERP. \u0417\u0430\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u044f: PostgreSQL<\/a><\/b><\/p>\n<p>  <i>\u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440 \u041d\u043e\u043c\u0445\u043e\u0435\u0432<\/i> aka <a href=\"https:\/\/habr.com\/ru\/users\/nomhoi\/\" class=\"user_link\">nomhoi<\/a> \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0440\u0430\u0437\u0432\u043b\u0435\u0447\u044c\u0441\u044f \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u0435\u0439. \u0423 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u044f. \u041d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0451, \u043a\u0430\u043a \u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0441 <a href=\"https:\/\/russianaicup.ru\/\">AI Cup<\/a> \u2014 \u0441 \u043a\u043e\u043d\u043a\u0443\u0440\u0441\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432, \u043f\u0438\u0448\u0443\u0449\u0438\u0445 \u0438\u0433\u0440\u044b-\u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0430. \u041d\u043e \u043e\u0442\u0442\u0443\u0434\u0430 \u0432\u0437\u044f\u0442, \u0432\u0438\u0434\u0438\u043c\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u2014 \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0441 Python, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0439 C++. \u0414\u043e \u044d\u0442\u043e\u0433\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"https:\/\/habr.com\/ru\/post\/471304\/\">Empire ERP. \u0417\u0430\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u044f: \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u043a\u043d\u0438\u0433\u0430, \u0441\u0447\u0435\u0442\u0430, \u0431\u0430\u043b\u0430\u043d\u0441<\/a> \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u043b\u0438 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f ERP, \u0442\u0430\u043c \u0436\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u044b <a href=\"https:\/\/github.com\/nomhoi\/empire-erp\/blob\/master\/requirements.md\">\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f<\/a>, \u0430 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0430\u0437\u0443 \u0443\u0436\u0435 \u0431\u0435\u0440\u0443\u0442 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u0441 <a href=\"https:\/\/github.com\/nomhoi\/empire-erp.git\">\u0433\u0438\u0442\u0445\u0430\u0431\u0430<\/a>. \u0412\u0441\u0451 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u043e\u043a\u0435\u0440\u0435.<\/p>\n<p>  \u0412 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u043e\u0442, \u043c\u043e\u043b, \u0432\u0441\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u043c\u043e\u0434\u0443\u043b\u044f \u00ab\u0411\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u044f\u00bb \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c SQL API. \u041d\u0430\u0441\u0447\u0451\u0442 \u00ab\u0432\u0441\u0435\u0439\u00bb \u043d\u0435 \u0431\u0435\u0440\u0443\u0441\u044c \u0441\u0443\u0434\u0438\u0442\u044c. \u0410 \u0432 \u0441\u0430\u043c\u043e\u043c-\u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u0418\u0418: \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0443\u0447\u0451\u043d\u044b\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e\u0442 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 ERP-\u0437\u0430\u0434\u0430\u0447 \u043f\u043e\u0440\u0443\u0447\u0438\u0442\u044c <a href=\"http:\/\/aima.cs.berkeley.edu\/newchap00.pdf\">\u0442\u043e\u0436\u0435 \u0418\u0418<\/a> (\u0433\u043b\u0430\u0432\u0430 <i>Automated Planning<\/i>).<\/p>\n<p>  <b><a href=\"https:\/\/habr.com\/ru\/company\/neoflex\/blog\/567930\/\">\u041f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0439 \u0437\u0430\u0445\u0432\u0430\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0438\u0437 PostgreSQL\/MySQL \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Apache Flink<\/a><\/b><\/p>\n<p>  <i>\u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u0421\u0435\u0440\u0433\u0435\u0435\u043d\u043a\u043e<\/i> \u0438\u0437 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u00ab\u041d\u0435\u043e\u0444\u043b\u0435\u043a\u0441\u00bb, \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Change_data_capture\">Change Data Capture<\/a> (CDC) \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 <a href=\"https:\/\/flink.apache.org\/\">Apache Flink<\/a>.<\/p>\n<p>  \u0422\u0435\u043c\u0430, \u043a\u0430\u043a \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u0438\u043c \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441\u0438\u0441\u0442\u0430\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u0430\u044f. \u0411\u043e\u043b\u044c\u0448\u0435, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Apache_Kafka\">\u043a\u0430\u0444\u043a\u0438\u0430\u043d\u0446\u0430\u043c<\/a>. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0435\u0441\u0442\u044c \u0432\u043f\u043e\u043b\u043d\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c. \u00abCDC \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 ETL-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0433\u0434\u0435 \u201eE\u201c \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 <b>\u0430\u043d\u0430\u043b\u0438\u0437 \u043b\u043e\u0433\u0430<\/b> \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u201eT\u201c \u2013 \u043f\u043e \u043e\u0431\u044b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0438 \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u044f\u043c\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u0430 \u201eL\u201c \u2013 \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u044b \u0438\u043b\u0438 \u0441\u044b\u0440\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044e.\u00bb \u041b\u043e\u0433\u0438 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 ETL \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e, \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e WAL \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u043d\u043e\u0433\u043e \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445 \u043c\u043d\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u0432 \u0432\u0440\u043e\u0434\u0435 <i>event-carried state transfer<\/i> \u0438\u043b\u0438 <i>event sourcing<\/i>.<\/p>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435 \u0443\u0436\u0435 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u0441\u0445\u0435\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u044b CDC \u0441 \u0443\u0447\u0430\u0441\u0442\u0438\u0435\u043c Postgres. <\/p>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0439 \u0441\u0445\u0435\u043c\u044b \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f c Postgres \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f <a href=\"https:\/\/github.com\/ververica\/flink-cdc-connectors\">Flink CDC Connectors<\/a> \u2014 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f MySQL \u0438 PostgreSQL, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 Alibaba \u0438 Ververica, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043a \u043b\u043e\u0433\u0430\u043c \u0411\u0414 \u043f\u0440\u044f\u043c\u043e \u0438\u0437 Flink-\u0434\u0436\u043e\u0431\u0430 (\u0437\u0430\u0434\u0430\u043d\u0438\u044f). <\/p>\n<p>  \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u2014 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0438\u0437 WAL PostgreSQL \u2014 \u043a\u0430\u043a docker compose, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c:<\/p>\n<ul>\n<li><b>PostgreSQL<\/b> \u2013 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043c\u0430\u0441\u0442\u0435\u0440-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439;<\/li>\n<li><b>Elasticsearch<\/b> \u2013 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0438 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439;<\/li>\n<li><b>Kibana<\/b> \u2013 \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 Elasticsearch;<\/li>\n<li><b>Job Manager<\/b> \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Apache Flink (\u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0434\u043d\u043e\u0439 \u0448\u0442\u0443\u043a\u0438) \u2013 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c Flink;<\/li>\n<li><b>Task Manager<\/b> \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Apache Flink (\u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0434\u043d\u043e\u0439 \u0448\u0442\u0443\u043a\u0438) \u2013 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f DAG-\u0433\u0440\u0430\u0444\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 CDC-\u0434\u0436\u043e\u0431\u0430.<\/li>\n<\/ul>\n<p>  \u0413\u043e\u0442\u043e\u0432\u044b\u0439 docker-compose.yml \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c <a href=\"https:\/\/github.com\/Lockdain\/flink-cdc-demo\/blob\/main\/docker\/docker-compose.yml\">\u0438\u0437 \u0433\u0438\u0442\u0445\u0430\u0431\u0430<\/a>. \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0443\u0440\u043e\u043a\u0438 \u0442\u0440\u0443\u0434\u0430: \u00ab\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0438\u0437 WAL PostgreSQL, \u043f\u0440\u0438\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u0435\u0439, \u0441\u0442\u0435\u043a\u043e\u043c ELK \u0438 \u0446\u0435\u043b\u044b\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c Flink, \u043f\u0440\u0430\u0432\u0434\u0430 \u0432 \u043c\u0438\u043d\u0438\u0430\u0442\u044e\u0440\u0435.\u00bb<\/p>\n<p>  <b><a href=\"https:\/\/www.instaclustr.com\/kafka-postgres-connector-pipeline-series-part-6\/\">Streaming JSON Data into Postgres with Open Source Kafka Sink Connectors<\/a><\/b><\/p>\n<p>  <i>\u041f\u043e\u043b \u0411\u0440\u0435\u0431\u043d\u0435\u0440<\/i> (Paul Brebner, Instaclustr) \u0432 \u0447\u0430\u0441\u0442\u0438 6 (<a href=\"https:\/\/www.instaclustr.com\/data-processing-pipeline\/\">\u0437\u0434\u0435\u0441\u044c<\/a> \u043d\u0430\u0447\u0430\u043b\u043e) \u0441 \u041a\u0430\u0444\u043a\u043e\u0439 \u0434\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u0434\u043e Postgres. \u041d\u043e <a href=\"https:\/\/kafka.apache.org\/\">\u043a\u0430\u0444\u043a\u0438\u0430\u043d\u0441\u043a\u0438\u0445<\/a> \u0443\u0436\u0430\u0441\u043e\u0432 \u043d\u0435 \u0434\u043e\u0436\u0434\u0430\u043b\u0438\u0441\u044c: \u0432\u0441\u0451 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442. Instaclustr, \u0433\u0434\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u041f\u043e\u043b, \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u043b\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e Credativ, \u0438 \u0442\u0435\u043f\u0435\u0440\u044c <a href=\"https:\/\/www.instaclustr.com\/support-solutions\/postgresql-support\/\">managed PostgreSQL<\/a> \u043d\u0430 \u0438\u0445 \u00ab\u0434\u043e\u0440\u043e\u0436\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0435\u00bb, \u043e\u0442\u0441\u044e\u0434\u0430 \u0438 \u0442\u044f\u0433\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u043e\u0442\u0440\u043e\u0445\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 PostgreSQL \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u0449\u0430\u0442\u044c Elasticsearch, \u0430 <a href=\"https:\/\/github.com\/apache\/superset\">Apache Superset<\/a> \u2014 <a href=\"https:\/\/github.com\/elastic\/kibana\">Kibana<\/a>, \u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u0446\u0443 Elastic, \u0432 \u0444\u0430\u0437\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u041e\u043f\u0443\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u044d\u0442\u0430\u043f\u044b, \u0437\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u0441\u0431\u0440\u043e\u0441\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Postgres \u043d\u0443\u0436\u043d\u044b Kafka Connect PostgreSQL Sink Connectors. \u0418\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441\u043d\u044b\u0435. \u041e\u0433\u043e\u0440\u0447\u0438\u0432\u0448\u0438\u0441\u044c \u0432\u0438\u0434\u043e\u043c \u0434\u0430\u0432\u043d\u043e \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0445 <a href=\"https:\/\/github.com\/justonedb\/kafka-sink-pg-json\">\u043f\u043e\u0442\u043e\u043a JSON-\u043e\u0432 \u0432 Postgres<\/a>, \u041f\u043e\u043b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u0435 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u044b, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0447\u0435\u0440\u0435\u0437 JDBC-\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b:<\/p>\n<ul>\n<li><b>IBM<\/b> Kafka Connect sink connector for JDBC,<\/li>\n<li><b>Aiven<\/b> Connect JDBC Connector,<\/li>\n<li><b>Apache Camel<\/b> JDBC Kafka Sink Connector.<\/li>\n<\/ul>\n<p>  \u0421\u043f\u043e\u0439\u043b\u0435\u0440: \u0443\u0441\u043f\u0435\u0445\u0430 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043f\u043e\u0434 \u0437\u0430\u0434\u0430\u0447\u0443 IBM-\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u043c.<\/p>\n<p>  \u0421\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043b\u0435\u0433\u043a\u043e \u0438 \u0434\u0430\u0436\u0435 \u0432\u0435\u0441\u0435\u043b\u043e. \u0421 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c\u0438 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438-\u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f\u043c\u0438-\u043e\u0442\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f\u043c\u0438:<br \/>  <a href=\"http:\/\/blog.coelho.net\/database\/2013\/08\/17\/turing-sql-1.html#:~:text=PostgreSQL%20implementation%20of%20SQL%20is,expressions%20and%20an%20OUTER%20JOIN%20\">Postgres \u043a\u0430\u043a \u043c\u0430\u0448\u0438\u043d\u0430 \u0422\u044c\u044e\u0440\u0438\u043d\u0433\u0430<\/a>.<\/p>\n<p>  \u0413\u043e\u043b\u043e\u0432\u043e\u043b\u043e\u043c\u043a\u0430 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A5%D0%B0%D0%BD%D0%BE%D0%B9%D1%81%D0%BA%D0%B0%D1%8F_%D0%B1%D0%B0%D1%88%D0%BD%D1%8F\">\u0425\u0430\u043d\u043e\u0439\u0441\u043a\u0430\u044f \u0431\u0430\u0448\u043d\u044f<\/a>, <a href=\"https:\/\/wiki.postgresql.org\/wiki\/Towers_of_Hanoi\">\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f<\/a> \u043d\u0430 Postgres.<br \/>  <a href=\"https:\/\/github.com\/credativ\/gts2\">GTS2<\/a> \u2014 \u0438\u0433\u0440\u0430-\u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u043d\u0430 PostgreSQL + pl\/python.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u043e JDBC: \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0439\u0442\u0435 <b><a href=\"https:\/\/jdbc.postgresql.org\/documentation\/changelog.html#version_42.2.23\">JDBC 42.2.23.<\/a><\/b><\/p>\n<p>  <b><a href=\"https:\/\/github.com\/sibedge-llc\/plv8-build?fbclid=IwAR2AgV4viV6pDX4uTsrNbD52hlO_LbkErM38wQG3zwYfKfmZElUvmAutwas\">Plv8-build: the easiest way to install PLV8 extension to current PostgreSQL release version<\/a><\/b><\/p>\n<p>  <i>\u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u0424\u0430\u0434\u0435\u0435\u0432<\/i> \u0441\u043e \u0441\u0432\u043e\u0438\u043c\u0438 \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c\u0438 \u0438\u0437 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 sibedge \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043d\u0430\u0434 \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 plv8 \u0432 Postgres 13. \u0422\u0435\u043f\u0435\u0440\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0437\u0430 \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u2014 \u0430\u0432\u0442\u043e\u0440\u044b \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c: \u0432\u043e\u0442 \u0434\u043b\u044f <a href=\"https:\/\/github.com\/sibedge-llc\/plv8-build?fbclid=IwAR1naxRWntibE6FA39qpEClKB71WYX-igtwfuUyb4o5TP39EUO03vvi57OQ\">Linux<\/a>, \u0432\u043e\u0442 \u0432 <a href=\"https:\/\/github.com\/alexeyfadeev\/plv8-backend-demo\/blob\/master\/db\/postgresql\/Dockerfile?fbclid=IwAR2R6EzMaaUVAqkpvA1eM29eVwr_DPEw84eQVl-4ivg86ja307VlFetkZww\">\u0414\u043e\u043a\u0435\u0440\u0435<\/a>.<\/p>\n<p>  \u041d\u0430 \u044d\u0442\u0443 \u0440\u0430\u0431\u043e\u0442\u0443, \u043f\u0440\u0438\u0437\u043d\u0430\u0451\u0442\u0441\u044f \u0410\u043b\u0435\u043a\u0441\u0435\u0439, \u0438\u0445 \u043f\u043e\u0434\u0432\u0438\u0433\u043d\u0443\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u044f <i>\u0418\u0432\u0430\u043d\u0430 \u041f\u0430\u043d\u0447\u0435\u043d\u043a\u043e<\/i> aka x-wao <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/502254\/?mobile=no\">PostgreSQL: \u0421\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u00ab\u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u043e\u043c\u00bb \u044f\u0437\u044b\u043a\u0435 (PL\/Perl, PL\/Python, PL\/v8)<\/a> \u0433\u043e\u0434\u043e\u0432\u0430\u043b\u043e\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  <b><a href=\"https:\/\/habr.com\/ru\/company\/karuna\/blog\/563018\/\">\u041e\u043f\u044b\u0442 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432 PostgreSQL<\/a><\/b><\/p>\n<p>  \u041f\u0438\u0448\u0435\u0442 \u043d\u0435\u043a\u0442\u043e <a href=\"https:\/\/habr.com\/ru\/users\/slava-a\/\" class=\"user_link\">slava-a<\/a> \u0438\u0437 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Karuna (\u00ab\u043c\u044b \u043b\u0443\u0447\u0448\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0432 \u0442\u0432\u043e\u0435\u0439 \u0436\u0438\u0437\u043d\u0438\u00bb \u2014 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u0441\u0451, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u0437 \u043f\u0440\u043e\u0444\u0438\u043b\u044f). \u0422\u0435\u043c\u0430, \u043e\u0434\u043d\u0430\u043a\u043e, \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u0430\u044f: \u0432 Postgres \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 inet\/cidr \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u0421\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0430 \u0438 \u043a \u043d\u0435\u0439 GiST-\u0438\u043d\u0434\u0435\u043a\u0441. \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438, \u0438\u0437 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u044b IP, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u0446\u0438\u043a\u043b\u043e\u043c. \u041d\u0430 \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0435 \u0441 1 \u043c\u043b\u043d \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043e\u043d\u0430 \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u0437\u0430 \u0441\u0435\u043a\u0443\u043d\u0434\u0443.<\/p>\n<p>  \u041d\u043e \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <a href=\"https:\/\/github.com\/RhodiumToad\/ip4r\">ip4r<\/a> \u0438 \u043e\u043d\u043e \u0434\u0430\u0451\u0442 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u0432 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 20 \u0440\u0430\u0437. \u0414\u0430\u043b\u044c\u0448\u0435 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u0438 \u043f\u0440\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 <a href=\"http:\/\/nginx.org\/ru\/docs\/http\/ngx_http_geoip_module.html\">\u0433\u0435\u043e-\u043c\u043e\u0434\u0443\u043b\u044f<\/a> \u0434\u043b\u044f <a href=\"https:\/\/nginx.org\/ru\/\">nginx<\/a>.<\/p>\n<p>  <b><a href=\"https:\/\/habr.com\/ru\/company\/galssoftware\/blog\/528150\/\">\u041d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 (LLD) \u0432 Zabbix \u0447\u0435\u0440\u0435\u0437 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u044b<\/a><\/b><\/p>\n<p>  \u0412 \u0431\u043b\u043e\u0433\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Galas Software (\u00ab\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430\u00bb) \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0441\u0442\u0430\u0442\u044c\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <a href=\"https:\/\/github.com\/percona\/pg_stat_monitor\">pg_stat_monitor<\/a> \u043e\u0442 Percona (\u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432). \u041e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/13\/pgstatstatements\">pg_stat_statements<\/a>, \u043d\u043e \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. \u041a\u043e\u0433\u0434\u0430 \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e pg_stat_statements, \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u0441\u0431\u0440\u043e\u0441\u0430 \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u2014 \u043a\u043e\u0433\u0434\u0430 \u0438 \u043a\u0430\u043a. \u0412 pg_stat_monitor:<\/p>\n<ul>\n<li>\u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u0440\u0437\u0438\u043d\u0443 (\u0430\u0433\u0440\u0435\u0433\u0430\u0442);<\/li>\n<li>\u043a\u043e\u0440\u0437\u0438\u043d\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u0432\u0440\u0435\u043c\u0435\u043d\u0438;<\/li>\n<li>\u043a\u043e\u0433\u0434\u0430 \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u0442\u0435\u043a\u0430\u0435\u0442, pg_stat_monitor \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u044e \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0435\u0451 \u0437\u0430\u043d\u043e\u0432\u043e.<\/li>\n<\/ul>\n<p>  \u041f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u043e \u0438 \u0441\u043e \u0432\u043a\u0443\u0441\u043e\u043c?<\/p>\n<p>  \u0427\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/www.zabbix.com\/ru\">Zabbix<\/a>. \u042d\u0442\u043e \u043f\u043e\u0447\u0442\u0438 \u043c\u0435\u0439\u043d\u0441\u0442\u0440\u0438\u043c. <a href=\"https:\/\/postgrespro.ru\/docs\/postgrespro\/13\/mamonsu\">mamonsu<\/a>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 <a href=\"https:\/\/habr.com\/ru\/company\/zabbix\/blog\/515816\/\">\u043a\u0430\u043a \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0430\u0433\u0435\u043d\u0442<\/a> (Zabbix Trapper). \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u0432 Zabbix \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e ODBC, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u043a Zabbix, \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u043c\u0430\u0441\u0442\u0435\u0440-\u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0432\u044b\u0432\u043e\u0434 \u0432 JSON \u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u044e\u0442 \u0435\u0449\u0451 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. <\/p>\n<p>  <b><a href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/568924\/\">\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 PostgreSQL. \u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0430\u0443\u0434\u0438\u043e\u0447\u0430\u0442\u0430 Data Egret \u0438 Okmeter<\/a><\/b><\/p>\n<p>  <i>\u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440 \u0413\u0443\u0440\u044c\u044f\u043d\u043e\u0432<\/i>, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a <a href=\"https:\/\/okmeter.io\/\">okmeter<\/a> (\u043d\u0430 \u0445\u0430\u0431\u0440\u0435 \u043e\u043d \u0441 \u043f\u043e\u0441\u0442\u0440\u043e\u043a-\u044d\u0440\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043d\u0438\u043a\u043e\u043c <a href=\"https:\/\/habr.com\/ru\/users\/magvai69\/\" class=\"user_link\">magvai69<\/a>) \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u0432 \u0431\u043b\u043e\u0433\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0424\u043b\u0430\u043d\u0442 (\u00abDevOps-as-a-Service, Kubernetes, \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 24\u00d77\u00bb) \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0443 <a href=\"https:\/\/www.youtube.com\/watch?v=GT-bK-uWU-k\">\u0431\u0435\u0441\u0435\u0434\u044b<\/a> \u0441 <i>\u0410\u043b\u0435\u043a\u0441\u0435\u0435\u043c \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u043c<\/i> \u0438 <i>\u0418\u043b\u044c\u0451\u0439 \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u0438\u043c<\/i> \u0438\u0437 Data Egret.<\/p>\n<p>  \u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435:<\/p>\n<ul>\n<li>\u041a\u0442\u043e \u0442\u0430\u043a\u0438\u0435 DBA, \u0438 \u0447\u0435\u043c \u043e\u043d\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f.<\/li>\n<li>\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0411\u0414 \u0438 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/li>\n<li>\u041e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445.<\/li>\n<li>\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0435\u0441\u0442\u0432\u043e Data Egret \u0438 Okmeter.<\/li>\n<li>\u041a\u0430\u043a Data Egret \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u0437\u043d\u0430\u043d\u0438\u044f\u043c\u0438 \u0438 \u043e\u043f\u044b\u0442\u043e\u043c.<\/li>\n<li>\u041e\u0431 \u0443\u0447\u0430\u0441\u0442\u0438\u0438 \u0432 Open Source-\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445.<\/li>\n<li>\u0410\u0443\u0442\u0441\u043e\u0440\u0441\u0438\u043d\u0433 DBA \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430.<\/li>\n<li>\u041e \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438 soft skills \u0434\u043b\u044f DBA.<\/li>\n<li>\u0412\u043e\u043f\u0440\u043e\u0441\u044b \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u0435\u0439<\/li>\n<\/ul>\n<p>  <b><a href=\"https:\/\/pgstats.dev\/?version=14\">Postgres Observability<\/a><\/b><\/p>\n<p>  \u0418\u0441\u0442\u0438\u043d\u043d\u043e\u0435 \u043d\u0430\u0441\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u0435 \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c \u043d\u0430 \u043a\u043d\u043e\u043f\u043e\u0447\u043a\u0438 \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0432\u0435\u0440\u0441\u0438\u0439 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0438 <i>\u0410\u043b\u0435\u043a\u0441\u0435\u044f \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u043e\u0433\u043e<\/i> Postgres Observability. \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u0441 13 \u043d\u0430 14 \u043a\u043e\u0435-\u0447\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u0425\u043e\u0442\u044f \u043a\u0443\u0434\u0430 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c 9.6 => 10. \u0410 \u043f\u0440\u0438 10 => 11 \u0432 Observability \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0438\u0447\u0435\u0433\u043e. \u041d\u043e \u044d\u0442\u043e \u0431\u0443\u043a\u043e\u0432\u043a\u0438. \u0421\u0430\u043c\u0430 \u0441\u0445\u0435\u043c\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e 1 \u0440\u0430\u0437: \u0432 12 => 13 \u0441\u0435\u0440\u044b\u0439 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a Shared buffers \u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0441\u044f, \u043e\u0442\u0434\u0430\u043b \u0441\u0435\u0440\u044b\u0439 \u043a\u0443\u0441\u043e\u0447\u0435\u043a SLRU Caches. \u041d\u043e, \u043c\u043e\u0436\u0435\u0442, \u044f \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b. \u041f\u043e\u043f\u0440\u0430\u0432\u044c\u0442\u0435.<\/p>\n<p>  <b><a href=\"https:\/\/github.com\/lesovsky\/noisia\">Noisia 0.1.1. Harmful workload generator for PostgreSQL<\/a><\/b><\/p>\n<p>  \u0412\u0440\u0435\u0434\u043d\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u041d\u0435\u0442, \u0432\u0441\u0451 \u0436\u0435 \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0412\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0439 \u041d\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u042d\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 <i>\u0410\u043b\u0435\u043a\u0441\u0435\u044f \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u043e\u0433\u043e<\/i> \u0443\u043c\u0435\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443, \u043f\u0440\u043e\u0432\u043e\u0446\u0438\u0440\u0443\u044e\u0449\u0443\u044e \u0434\u0435\u0434\u043b\u043e\u043a\u0438, \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u044e\u0442, \u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u0434\u0438\u0441\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b. \u0417\u0430\u0447\u0435\u043c? \u0427\u0442\u043e \u043d\u0435 \u0443\u0431\u0438\u0432\u0430\u0435\u0442, \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0438\u043b\u044c\u043d\u0435\u0439 (\u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438). \u041d\u0435 \u043f\u044b\u0442\u0430\u0439\u0442\u0435\u0441\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0442\u0435\u0441\u0442\u044b \u0431\u0435\u0437 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0439: \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0439, \u0447\u0438\u0441\u0442\u044b\u0439 \u0448\u0430\u043c\u043f\u0430\u043d\u0441\u043a\u0438\u0439 \u0440\u0438\u0441\u043a.<\/p>\n<p>  \u041d\u0430\u0431\u043e\u0440 \u0442\u0435\u0441\u0442\u043e\u0432 \u043d\u0430 \u043f\u0438\u0441\u0430\u043d \u043d\u0430 Go. \u0412 \u0432\u0435\u0440\u0441\u0438\u0438 <a href=\"https:\/\/github.com\/lesovsky\/noisia\/releases\/tag\/v0.1.1\">0.1.1<\/a> (\u0434\u043e \u044d\u0442\u043e\u0433\u043e \u0431\u044b\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0435\u043b\u0438\u0437 \u2014 <a href=\"https:\/\/github.com\/lesovsky\/noisia\/releases\/tag\/v0.1.0\">0.1.0<\/a>) Go \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d \u0434\u043e \u0432\u0435\u0440\u0441\u0438\u0438 1.16.<\/p>\n<p>  <b><a href=\"https:\/\/habr.com\/ru\/company\/ozontech\/blog\/564520\/\">\u041f\u043e\u0447\u0435\u043c\u0443 PostgreSQL \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442: \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0438 \u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/b><\/p>\n<p>  <i>\u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u0412\u0430\u0441\u0438\u043b\u044c\u0435\u0432<\/i>, aka <a href=\"https:\/\/habr.com\/ru\/users\/vadv\/\" class=\"user_link\">vadv<\/a>, Ozon Tech, \u043f\u0438\u0448\u0435\u0442 \u043e \u0442\u043e\u043c, \u043f\u043e\u0447\u0435\u043c\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u0441\u043a\u043e\u0440\u044f\u044e\u0442. \u041e\u0434\u043d\u0430 \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043f\u0440\u0438\u0447\u0438\u043d \u0442\u043e\u0440\u043c\u043e\u0437\u043e\u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u2013 \u044d\u0442\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u043e\u0447\u043d\u0435\u0435: <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/13\/view-pg-stats\">\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u0438<\/a> \u043c\u0435\u0436\u0434\u0443 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0441\u0442\u0440\u043e\u043a \u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u0442\u043e\u043b\u0431\u0446\u0430. <\/p>\n<p>  \u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0443 \u0441 \u043f\u043e\u043b\u044f\u043c\u0438:<\/p>\n<p>  corr \u2014 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u043e\u0442 1 \u0434\u043e 10 000 \u0438 uncorr \u2014 \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 <code>uuid_generate_v4()<\/code> (\u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/13\/uuid-ossp\">uuid-ossp<\/a>). \u0412 \u043f\u043e\u043b\u0435 correlation \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f pg_stats \u044d\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c 1 \u0438 ~0 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u041f\u043e corr \u0438 uncorr \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0438 \u0434\u0430\u043b\u0435\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/13\/pageinspect\">pageinspect<\/a>. \u0412 uncorr \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u0430\u043d\u044b \u043f\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c, \u0438 \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441 \u0434\u0438\u0441\u043a\u0430 \u043f\u043e\u0447\u0442\u0438 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446 (\u0441\u043e\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e IOPS), \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u0442\u0440\u043e\u0447\u0435\u043a. \u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u043d\u0430\u0442\u0440\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043d\u0430 \u0438\u043d\u0434\u0435\u043a\u0441 CLUSTER, \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u043f\u043e IOPS \u0432 50 \u0440\u0430\u0437.<\/p>\n<p>  \u0411\u043b\u0438\u0436\u0435 \u043a \u0444\u0438\u043d\u0430\u043b\u0443 \u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e \u043f\u043e\u043b\u044e\u0431\u0438\u0432\u0448\u0435\u043c\u0441\u044f \u0435\u043c\u0443 <a href=\"https:\/\/github.com\/ulid\/spec\">ULID<\/a> (UniversallyUnique LexicographicallySortable Identifier), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0438\u0448\u0451\u043d \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432 UUID. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438: <code>generate_ulid(now())<\/code> \u0438 constraint \u0434\u0430\u0434\u0443\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0443 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0435\u0441\u043b\u0438 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u0440\u0435\u043c\u044f.<\/p>\n<p>  <b><a href=\"https:\/\/www.highgo.ca\/2021\/07\/09\/using-gdb-to-trace-into-a-parallel-worker-spawned-by-postmaster-during-a-large-query\/\">Using GDB To Trace Into a Parallel Worker Spawned By Postmaster During a Large Query<\/a><\/b><\/p>\n<p>  \u0411\u043b\u043e\u0433\u0435\u0440\u044b High Go \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0438 \u0441 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0445 \u0437\u0430\u043c\u0435\u0442\u043e\u043a \u0432 \u0436\u0430\u043d\u0440\u0435 4 dummies, \u043d\u043e, \u0447\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435, \u0442\u0435\u043c \u0433\u043b\u0443\u0431\u0436\u0435, \u0437\u0430\u0441\u0443\u0447\u0438\u0432 \u0440\u0443\u043a\u0430\u0432\u0430, \u0437\u0430\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442 Postgres. \u041a\u044d\u0440\u0438 \u0425\u0443\u0430\u043d\u044c (Cary Huang) \u2014 \u043a\u0430\u043d\u0430\u0434\u0441\u043a\u0438\u0439 <a href=\"https:\/\/www.highgo.ca\/author\/cary-h\/\">\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a<\/a> High Go, \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0435\u0440\u0435\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0441 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u043f\u0438\u0441\u0438. \u0418 \u0432\u043e\u0442 \u043e\u043d \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0435\u0433\u043e \u043a\u043e\u0434 \u043d\u0435 \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438: \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 (workers). \u0427\u0430\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u044f\u0434\u0440\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u0445 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u043c\u0438, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0434\u0440\u0443\u0433\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u0430. \u0427\u0442\u043e\u0431\u044b \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043f\u0430\u0442\u0447\u0435\u043c, \u043e\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b GDB, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u044f \u043f\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u0418 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043e\u043f\u044b\u0442\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f GDB \u0432 \u044d\u0442\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0412\u043c\u0435\u0441\u0442\u043e \u0432\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0440 \u043e\u0442\u0441\u044b\u043b\u0430\u0435\u0442 \u043a \u0441\u0432\u043e\u0435\u0439 \u0436\u0435 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 GDB: <a href=\"https:\/\/www.highgo.ca\/2020\/11\/07\/how-to-analyze-a-postgresql-crash-dump-file\/\">How to Analyze a PostgreSQL Crash Dump File<\/a>, \u0430 \u043c\u044b \u0435\u0449\u0451 \u0438 \u043d\u0435\u0441\u043a\u0440\u043e\u043c\u043d\u043e \u043d\u0430\u043f\u043e\u043c\u043d\u0438\u043c \u043e \u043d\u0430\u0448\u0435\u0439 \u0441 <i>\u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u043c \u041a\u043e\u0440\u043e\u0442\u043a\u043e\u0432\u044b\u043c<\/i> \u0441\u0442\u0430\u0442\u044c\u0435, \u0433\u0434\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0437\u043c\u043e\u043c \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u0435\u0449\u0451 \u0438 \u0441 <b>perf<\/b> \u0438 <b>\u0444\u043b\u0435\u0439\u043c-\u0433\u0440\u0430\u0444\u0430\u043c\u0438<\/b>: <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/423685\/\">\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0437\u043c \u0432 PostgreSQL: \u043d\u0435 \u0441\u0444\u0435\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439, \u043d\u0435 \u043a\u043e\u043d\u044c, \u043d\u0435 \u0432 \u0432\u0430\u043a\u0443\u0443\u043c\u0435<\/a>.<\/p>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443\u0445\u0432\u0430\u0442\u0438\u0442\u044c PID \u0444\u043e\u0440\u043a\u043d\u0443\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e (\u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c\u0441\u044f \u0440\u0430\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c PID), \u041a\u044d\u0440\u0438 \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442 \u0431\u0440\u0435\u0439\u043a\u043f\u043e\u0438\u043d\u0442 \u0432 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>RegisterDynamicBackgroundWorker<\/code> \u0438 <code>ParallelWorkerMain<\/code>. \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0438 \u043d\u0430\u0448\u0435\u0433\u043e <code>continue<\/code> \u0434\u0435\u0431\u0430\u0433\u0433\u0435\u0440 \u043d\u0430\u043f\u0438\u0448\u0435\u0442 \u043d\u043e\u043c\u0435\u0440 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0435\u0433\u043e. \u0410 \u0434\u0430\u043b\u044c\u0448\u0435 \u2014 \u043f\u043e \u0432\u043a\u0443\u0441\u0443.<\/p>\n<p>  <b><a href=\"https:\/\/blog.crunchydata.com\/blog\/control-runaway-postgres-queries-with-statement-timeout\">Control Runaway Postgres Queries With Statement Timeout<\/a><\/b><\/p>\n<p>  <i>\u0421\u0442\u0430\u0442\u044c\u044f \u041a\u0440\u0435\u0439\u0433\u0430 \u041a\u0435\u0440\u0441\u0442\u0438\u043d\u0441\u0430<\/i> (Craig Kerstiens, Crunchy Data) \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443: <code>statement_timeout<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043f\u0440\u0430\u0432\u0434\u0430, \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0443\u0440\u043e\u0432\u043d\u044f\u0445: \u0437\u0430\u043f\u0440\u043e\u0441\/\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\/\u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e\u0439 \u0432 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430:<\/p>\n<ul>\n<li>\u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u0430\u044f \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0430 \u0438\u043b\u0438 \u043e\u0442\u0447\u0451\u0442\u044b \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u044f;<\/li>\n<li>\u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0449\u0430\u044f \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439;<\/li>\n<li>\u043f\u043b\u043e\u0445\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043a\u043e\u0433\u0434\u0430 JOIN \u0442\u0440\u043e\u0433\u0430\u0435\u0442 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0437\u0430\u043f\u0438\u0441\u0435\u0439;<\/li>\n<li>\u0440\u0430\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435\u0441\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b.<\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u043a\u0430\u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0432\u0435\u0440\u0445\u0434\u043e\u043b\u0433\u043e\u0438\u0433\u0440\u0430\u044e\u0449\u0435\u0433\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0432 \u0441\u0435\u0441\u0441\u0438\u0438:<\/p>\n<pre><code class=\"pgsql\">SET statement_timeout = '30m';<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0438<\/p>\n<pre><code class=\"pgsql\">ALTER DATABASE mydatabase SET statement_timeout ='60s';<\/code><\/pre>\n<p>  \u041c\u0435\u043d\u0435\u0435 \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \u0442\u044e\u043d\u0438\u043d\u0433\u0443 \u0431\u0430\u0437\u044b \u0435\u0441\u0442\u044c \u0443 \u043a\u043e\u043b\u043b\u0435\u0433\u0438 \u041a\u0440\u0435\u0439\u0433\u0430 \u2014 <i>\u0422\u043e\u043c\u0430 \u0428\u0432\u0430\u0440\u0446\u0430<\/i> (Tom Swartz) \u2014 <a href=\"https:\/\/blog.crunchydata.com\/blog\/optimize-postgresql-server-performance\">Optimize PostgreSQL Server Performance Through Configuration<\/a>. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u041a\u0440\u0435\u0439\u0433\u0430 \u043f\u043e\u043f\u0430\u043b\u0430\u0441\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430: <a href=\"https:\/\/blog.crunchydata.com\/blog\/range-types-recursion-how-to-search-availability-with-postgresql\">Range Types &amp; Recursion: How to Search Availability with PostgreSQL<\/a>.<\/p>\n<p>  <b><a href=\"https:\/\/www.migops.com\/blog\/2021\/07\/16\/centos-vs-rocky-linux-benchmark-with-postgresql\/\">Benchmarking CentOS vs Rocky Linux with Postgres<\/a><\/b><\/p>\n<p>  <i>\u0414\u0438\u043d\u0435\u0448 \u041a\u0443\u043c\u0430\u0440<\/i> (Dinesh Kumar, MigOps) \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u043d\u0430\u0431\u043e\u0440\u0430\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 <a href=\"https:\/\/www.phoronix.com\/\">Phoronix<\/a>:<\/p>\n<ul>\n<li>\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440;<\/li>\n<li>\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440;<\/li>\n<li>\u043f\u0430\u043c\u044f\u0442\u044c;<\/li>\n<li>\u0434\u0438\u0441\u043a;<\/li>\n<li>\u0441\u0442\u0440\u0435\u0441\u0441 (stress-ng);<\/li>\n<li>PostgreSQL (pgbench);<\/li>\n<li>(stress-ng + pgbench)<\/li>\n<\/ul>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: Rocky \u043d\u0430 \u0432\u0441\u0435\u0445 \u0442\u0435\u0441\u0442\u0430\u0445 \u0447\u0443\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 => \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u0430\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 CentOS \u043d\u0430 Rocky. <\/p>\n<p>  <b><a href=\"https:\/\/blog.devart.com\/dbforge-schema-compare-for-postgresql-v-1-2-rolled-out.html\">dbForge Schema Compare for PostgreSQL v.1.2<\/a><\/b><\/p>\n<p>  \u0412 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0441\u0445\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f devart \u0441 \u0448\u0442\u0430\u0431-\u043a\u0432\u0430\u0440\u0442\u0438\u0440\u0435 \u0432 \u0427\u0435\u0445\u0438\u0438 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0438\u0437 \u0423\u043a\u0440\u0430\u0438\u043d\u044b, \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c:<\/p>\n<ul>\n<li>Object Filter, \u0441 \u043d\u0438\u043c \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u0443, \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u0440\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438, \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u0444\u0438\u043b\u044c\u0442\u0440\u0435;<\/li>\n<li>\u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u043e\u0442\u0447\u0451\u0442\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u044b HTML, Excel \u0438 XML;<\/li>\n<li>\u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0435- \u0438 \u043f\u043e\u0441\u0442-\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0445\u0435\u043c;<\/li>\n<li>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0432 Amazon Redshift;<\/li>\n<li>\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043e\u0431\u043b\u0430\u043a\u043e\u043c Heroku;<\/li>\n<li>\u043d\u043e\u0432\u044b\u0435 \u043a\u043e\u0441\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438: \u0440\u0430\u0441\u0446\u0432\u0435\u0447\u0438\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043a\u043e\u0434\u0430 \u0432 \u043e\u043a\u043d\u0435 Text Compare (diff).<\/li>\n<\/ul>\n<p>  <b><a href=\"https:\/\/eli.thegreenplace.net\/2021\/accessing-postgresql-databases-in-go\/\">Accessing PostgreSQL databases in Go<\/a><\/b><\/p>\n<p>  \u0421\u0442\u0430\u0442\u044c\u044f <i>\u042d\u043b\u0438 \u0411\u0435\u043d\u0434\u0435\u0440\u0441\u043a\u043e\u0433\u043e<\/i> (Eli Bendersky), \u0437\u043d\u0430\u043a\u043e\u043c\u043e\u0433\u043e \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044f\u043c Go \u2014 \u0441\u0435\u0440\u0438\u044e \u0435\u0433\u043e \u0441\u0442\u0430\u0442\u0435\u0439 <a href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/559816\/\"> \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 REST-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u043d\u0430 Go<\/a> \u043f\u0435\u0440\u0435\u0432\u0435\u043b\u0438 \u0438 \u0432\u044b\u043b\u043e\u0436\u0438\u043b\u0438 \u043d\u0430 \u0445\u0430\u0431\u0440, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0431\u043b\u043e\u0433\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 RUVDS.com. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0430\u0432\u0442\u043e\u0440 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430:<\/p>\n<ul>\n<li>\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <b>database\/sql<\/b> \u0441 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c <b>pq<\/b>,<\/li>\n<li>\u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0438 \u0442\u0443\u043b\u043a\u0438\u0442 <b>pgx<\/b>,<\/li>\n<li>\u043f\u0430\u043a\u0435\u0442 <b>sqlx<\/b>.<\/li>\n<\/ul>\n<p>  \u042d\u0442\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043f\u0440\u043e\u0431\u0443\u044e\u0442 \u043d\u0430 \u0434\u0435\u043c\u043e-\u0431\u0430\u0437\u0435. \u0415\u0441\u0442\u044c \u0438 \u043e\u0431\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 (\u043d\u0435)\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <b>ORM<\/b> \u0432 Go.<\/p>\n<p>  <b><a href=\"https:\/\/www.pgmustard.com\/blog\/max-parallel-workers-per-gather\">Increasing Max Parallel Workers Per Gather In Postgres<\/a><\/b><\/p>\n<p>  <i>\u041c\u0430\u0439\u043a\u043b \u041a\u0440\u0438\u0441\u0442\u043e\u0444\u0438\u0434\u0435\u0441<\/i> (Michael Christofides), \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u044b pgMustard, \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0441\u0442\u0443\u043f\u0438\u043b \u043d\u0430 PgDay \u0441 \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u043c <a href=\"https:\/\/www.youtube.com\/watch?v=sGkSOvuaPs4&amp;list=PL83V-7Vhzqkpj0qwmOimKR-x3FRVg9lDn&amp;index=16\">EXPLAIN: beyond the basics<\/a>, \u043d\u043e \u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b, \u0432 \u0447\u0438\u0441\u043b\u0435 \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u044d\u0442\u0443 \u0437\u0430\u043c\u0435\u0442\u043a\u0443 \u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u043f\u0440\u0438 \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u0422\u0430\u043c \u043d\u0435\u0442 \u043d\u0438 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0439 \u043e\u0431 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u043c \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0438 \u043d\u0430 \u043c\u043d\u043e\u0433\u043e\u044f\u0434\u0435\u0440\u043d\u044b\u0445 \u0438 \u043c\u043d\u043e\u0433\u043e\u0443\u0437\u043b\u043e\u0432\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445, \u043d\u0435 \u0431\u0430\u043b\u0443\u0435\u0442 \u043e\u043d \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041d\u043e \u0437\u0430\u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438: \u0441\u0430\u043c\u0430 \u0442\u0435\u043c\u0430 \u0443\u0436 \u043e\u0447\u0435\u043d\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430 \u2014 \u043b\u0438\u0448\u043d\u0435\u0435 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 \u043d\u0435 \u043f\u043e\u043c\u0435\u0448\u0430\u0435\u0442.<\/p>\n<p>  \u041e\u043d \u0436\u0435 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0438 parallel_setup_cost, parallel_tuple_cost, min_parallel_table_scan_size, min_parallel_index_scan_size, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 (\u043e\u0431 \u044d\u0442\u043e\u043c \u0435\u0441\u0442\u044c <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/13\/runtime-config-query\">\u0437\u0434\u0435\u0441\u044c<\/a>).<\/p>\n<p>  \u041c\u0430\u0439\u043a\u043b \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/13\/how-parallel-query-works\">\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b<\/a> (<a href=\"https:\/\/www.postgresql.org\/docs\/current\/how-parallel-query-works.html\">How Parallel Query Works<\/a>), \u0441\u043e\u0432\u0435\u0442\u0443\u0435\u0442 \u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0438 \u0441\u0441\u044b\u043b\u043a\u0438 <a href=\"https:\/\/postgresqlco.nf\/doc\/en\/param\/max_parallel_workers_per_gather\/\">\u043d\u0430 \u0441\u0430\u0439\u0442\u0435 postgresqlco.nf<\/a> \u0438 \u043f\u043e\u0441\u043b\u0443\u0448\u0430\u0442\u044c \u0441\u0435\u043c\u0438\u043d\u0430\u0440 <a href=\"https:\/\/www.youtube.com\/watch?v=i_91jNrRYWk\">PostgreSQL Parallelism Do\u2019s and Don\u2019ts<\/a> <i>\u0421\u0435\u0431\u0430\u0441\u0442\u044c\u044f\u043d\u0430 \u0414\u0440\u0435\u0441\u0441\u043b\u0435\u0440\u0430<\/i> (Sebastian Dressler) \u0438\u0437 swarm64 \u043d\u0430 \u043a\u0430\u043d\u0430\u043b\u0435 <a href=\"https:\/\/www.youtube.com\/channel\/UCsJkVvxwoM7R9oRbzvUhbPQ\">Postgres Conference<\/a>. \u0410 \u0432\u043e\u0442 \u0442\u0430\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0435\u0441\u0442\u044c \u0438 \u0440\u0430\u0437\u0431\u043e\u0440 \u043f\u043b\u0430\u043d\u043e\u0432, \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u0443\u0434\u0430\u0447\u043d\u044b\u0435 \u0438 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0437\u043c\u0430. \u0418 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432 swarm64 (\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0438\u0441\u0430\u043b\u0438 \u0432 Postgresso <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/558256\/\">32<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/545796\/\">30<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/498152\/\">21<\/a>) \u043e\u0431\u0437\u0430\u0432\u0435\u043b\u0438\u0441\u044c <a href=\"https:\/\/www.youtube.com\/channel\/UCXyRIDixGkeC-slnms3rDWQ\/videos\">\u043f\u0430\u0440\u043e\u0439 \u0434\u044e\u0436\u0438\u043d \u0432\u0438\u0434\u0435\u043e<\/a> \u043e\u0431 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 (\u043a\u0430\u043a \u0441 \u0438\u0445 FPGA, \u0442\u0430\u043a \u0438 \u0431\u0435\u0437).<\/p>\n<p>  <b><a href=\"http:\/\/heterodb.github.io\/pg-strom\/release_v3.0\/\">PG-Strom 3.0<\/a><\/b><\/p>\n<p>  \u041d\u0430\u043f\u043e\u043c\u043d\u0438\u043c: \u044d\u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 PostgreSQL, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 GPU. \u0412 \u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438:<\/p>\n<ul>\n<li>\u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 NVIDIA GPUDirect Storage (cuFile);<\/li>\n<li>\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e PostGIS-\u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u0433\u043e\u043d\u044f\u0442\u044c \u043d\u0430 GPU;<\/li>\n<li>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 GpuJoin \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c GiST;<\/li>\n<li>\u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c GPU Cache \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u043d;<\/li>\n<li>\u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u043a\u0430 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445\/\u0444\u0443\u043d\u043a\u0446\u0438\u0439\/\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f GPU, \u043d\u043e \u043f\u043e\u043a\u0430 \u0432 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435;<\/li>\n<li>\u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044f \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u0430 \u0441 GPLv2 \u043d\u0430 PostgreSQL.<\/li>\n<\/ul>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f, \u0441\u0442\u0440\u0430\u043d\u043d\u0430\u044f \u0442\u0435\u043c\u0430: \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u2014 \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0435\u0439? \u041d\u043e \u0431\u0430\u0437\u044b \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043e\u0445\u043e\u0442\u043d\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044f\u0442\u0441\u044f, \u0438 \u0442\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043a\u0430\u043a Strom (\u0438\u043b\u0438 Swarm64) \u044f\u0432\u043d\u043e \u043d\u0435 \u0432 \u0444\u043e\u043a\u0443\u0441\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u0412\u0438\u0434\u043d\u044b \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u043c db-\u0437\u0440\u0435\u043d\u0438\u0435\u043c.<\/p>\n<p>  <b><a href=\"https:\/\/swarm64.com\/post\/postgresql-jsonb-vs-window-functions\/\">Modern data analysis with PostgreSQL \u2013 JSONB throws Window functions out the\u2026<\/a><\/b><\/p>\n<p>  \u0410 \u0432\u043e\u0442 \u044d\u0442\u043e \u043f\u0438\u0448\u0435\u0442 <i>\u0422\u043e\u043c\u0430\u0441 \u0420\u0438\u0445\u0442\u0435\u0440<\/i> (Thomas Richter) \u0443\u0436\u0435 \u0438\u0437 \u0441\u0430\u043c\u043e\u0439 Swarm64. \u041f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439. \u0422\u043e\u043c\u0430\u0441 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441 \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043a \u0430\u043d\u0430\u043b\u0438\u0437\u0443 \u0437\u0430\u043a\u0430\u0437\u043e\u0432\/\u0434\u043e\u0441\u0442\u0430\u0432\u043e\u043a \u0432 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u043c \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0435, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e: \u043a \u0434\u0432\u0443\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c \u2014 orders (\u0437\u0430\u043a\u0430\u0437\u043e\u0432) \u0438 order_shipment_status (\u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0437\u0430\u043a\u0430\u0437\u043e\u0432). \u041e\u043d\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u043e order_id \u0432 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0438 \u043e\u0434\u0438\u043d-\u043a\u043e-\u043c\u043d\u043e\u0433\u0438\u043c. \u0414\u0430\u043b\u0435\u0435 \u0422\u043e\u043c\u0430\u0441 \u0432\u044b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u043f\u0430\u0432\u0448\u0438\u0435 \u0437\u0430\u043a\u0430\u0437\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441 \u043e\u043a\u043e\u043d\u043d\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438. \u0412\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u0442\u0430\u043a\u043e\u0439 \u0434\u043e\u0440\u043e\u0433.<\/p>\n<p>  \u0422\u043e\u043c\u0430\u0441 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0432\u0443\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043b\u043e\u043d\u043a\u0443 \u0442\u0438\u043f\u0430 jsonb \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u043c\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0437\u0430\u043a\u0430\u0437\u043e\u0432 orders. \u041e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 json-\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b @>, ->, ->>, || \u0438 GIN-\u0438\u043d\u0434\u0435\u043a\u0441. \u0412\u043c\u0435\u0441\u0442\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u043c\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u043b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0435. \u041e\u043d, \u043a\u0441\u0442\u0430\u0442\u0438, \u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0441\u0442\u0443\u0449\u0435\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c\u044e Postgres \u043e\u0431\u044f\u0437\u0430\u043d \u0442\u0430\u043a\u0438\u043c \u0432\u043e\u0442 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c.<\/p>\n<p>  <b><a href=\"https:\/\/blog.crunchydata.com\/blog\/generating-json-directly-from-postgres\">Cut Out the Middle Tier: Generating JSON Directly from Postgres<\/a><\/b><\/p>\n<p>  <i>\u041f\u043e\u043b \u0420\u0430\u043c\u0441\u0438<\/i> (Paul Ramsey, Crunchy Data) \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0443\u0431\u0438\u0440\u0430\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e JSON \u0438\u0437 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445 \u0441\u043b\u043e\u0451\u0432 Web-\u0441\u0430\u0439\u0442\u043e\u0432, \u0433\u0434\u0435 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u2014 \u0430 \u0442\u0430\u043a\u043e\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u043e \u2014 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0441\u0430\u043c\u043e\u0433\u043e PostgreSQL, \u0431\u043b\u0430\u0433\u043e \u043e\u043d\u0438 \u0443\u0436\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0442\u044b. \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u041f\u043e\u043b \u0441 <code>row_to_json()<\/code>, \u043f\u043e\u0442\u043e\u043c <code>json_agg()<\/code>, \u043d\u043e \u044d\u0442\u043e \u0440\u0430\u0437\u043c\u0438\u043d\u043a\u0430: \u0434\u0430\u043b\u044c\u0448\u0435 \u041f\u043e\u043b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u044b <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/9.5\/queries-with\">\u0441 CTE<\/a>, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b JSON \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u044c \u0442\u0430\u0431\u043b\u0438\u0446. Postgres \u043c\u043e\u0436\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0442\u044c \u0441\u0430\u043c\u044b\u0435 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0435 JSON, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e, \u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0434\u0430\u0436\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e.<\/p>\n<p>  \u041d\u0430\u0448 \u043e\u0442\u0434\u0435\u043b \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u0443\u044e \u043a\u043d\u0438\u0433\u0443 <i>\u0413.\u0414\u043e\u043c\u0431\u0440\u043e\u0432\u0441\u043a\u043e\u0439, \u0411.\u041d\u043e\u0432\u0438\u043a\u043e\u0432\u0430 \u0438 \u0410.\u0411\u0435\u0439\u043b\u0438\u043a\u043e\u0432\u043e\u0439<\/i> \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443: <b><a href=\"https:\/\/www.amazon.com\/PostgreSQL-Query-Optimization-Ultimate-Efficient\/dp\/1484268849\/\">PostgreSQL Query Optimization: The Ultimate Guide to Building Efficient Queries<\/a><\/b>. \u0412 \u043d\u0435\u0439 \u043e\u043d\u0438 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442 \u0438\u0434\u0435\u044e \u043e \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u043d\u0438\u0438 \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c JSON. \u0418 \u0432\u043e\u0442 \u0442\u0443\u0442-\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0438 \u0440\u0430\u0437\u0431\u043e\u0440 JSON \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u044b. <a href=\"https:\/\/my-shop.ru\/shop\/producer\/88\/sort\/a\/page\/1.html?partner=4739&amp;utm_source=yandex_poisk&amp;utm_medium=cpc&amp;utm_campaign=4739_search_vendor_kni_izdatelstva_rus_tgb&amp;utm_content=78833705&amp;utm_term=%D0%B4%D0%BC%D0%BA%20%D0%BF%D1%80%D0%B5%D1%81%D1%81&amp;yclid=4563966184384388352\">\u0414\u041c\u041a \u041f\u0440\u0435\u0441\u0441<\/a> \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u0434 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c, \u043a\u043d\u0438\u0433\u0430 \u0441\u043a\u043e\u0440\u043e \u0432\u044b\u0439\u0434\u0435\u0442 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435.<\/p>\n<p>  <b><a href=\"https:\/\/habr.com\/ru\/post\/565782\/\">\u0413\u0438\u0431\u0440\u0438\u0434\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 RDBMS \u0438 NoSQL \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0440\u0430\u043d\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/b><\/p>\n<p>  \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0442\u0440\u0430\u043d\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c\u0430 \u044f \u043f\u043e\u043a\u0430 \u043d\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0441\u044f, \u043d\u043e \u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e \u0438 PostgreSQL 12, \u0438 JSON \u0437\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u043e\u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447. \u0414\u043b\u044f \u043d\u0430\u0441, \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439, \u0442\u0443\u0442 \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0411\u0414 \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e, \u0438 \u0441\u043b\u0430\u0431\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0443\u0434\u043e\u0431\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0435, \u0438\u043d\u043e\u0433\u0434\u0430 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u041a \u0434\u0435\u0441\u044f\u0442\u043a\u0430\u043c \u0438 \u0441\u043e\u0442\u043d\u044f\u043c \u0442\u044b\u0441\u044f\u0447 \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u0435\u043a\u0432\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0430\u0434\u043e \u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0438 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0448\u0438\u0440\u043e\u043a\u043e\u043c\u0443 \u043a\u0440\u0443\u0433\u0443 \u0431\u0438\u043e\u043b\u043e\u0433\u043e\u0432 \u2014 \u043f\u0443\u0441\u0442\u044c \u0438\u0449\u0443\u0442, \u0447\u0442\u043e \u0438\u043c \u043d\u0443\u0436\u043d\u043e.<\/p>\n<p>  \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u0432\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e \u0432 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u0435\u043a\u043b\u0430\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0430 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432. \u0422\u043e, \u0447\u0442\u043e \u043f\u043b\u043e\u0445\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 \u0442\u0438\u043f\u0430 jsonb. \u0414\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043a\u0430\u043a GIN. \u0417\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u0442\u0430\u043a\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b -> \u0438 ->>.<\/p>\n<p>  \u0421\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435, \u0447\u0442\u043e \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438 \u0442\u0438\u043f ts_vector, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0432 \u0445\u043e\u0434 \u0438\u0434\u0443\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>to_tsvector()<\/code> \u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 @@ \u2014 \u043a\u0430\u043a \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u043f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u043f\u043e\u0438\u0441\u043a\u0435. \u0412\u0435\u0434\u044c \u0433\u0435\u043d \u2014 \u044d\u0442\u043e \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442.<\/p>\n<p>  <b><a href=\"https:\/\/railsautoscale.com\/heroku-postgresql-connection-calculator\/\">DB Connection Calculator<\/a><\/b><\/p>\n<p>  \u0414\u043b\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0439 PaaS-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b <a href=\"https:\/\/www.heroku.com\/\">Heroku<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u0445\u043e\u0434\u0438\u0442 \u0438 <a href=\"https:\/\/www.heroku.com\/postgres\">Heroku Postgres<\/a> \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b\u0438 \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u2014 Heroku Database Connection Calculator \u2014 \u0432\u044b \u0437\u0430\u0434\u0430\u0451\u0442\u0435 \u0434\u0432\u0438\u0436\u043e\u0447\u043a\u0430\u043c\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e dyno (dyno \u2014 \u044d\u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u0445\u0435\u0440\u043e\u043a\u0441\u043a\u0438\u0435 <a href=\"https:\/\/devcenter.heroku.com\/articles\/dynos\">\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439<\/a>, \u043e\u043d\u0438 \u0431\u044b\u0432\u0430\u044e\u0442 web dynos \u0438 worker dynos), \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432, \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0438 \u0442\u0440\u0435\u0434\u043e\u0432 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0443\u0436\u043d\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439. \u0412 \u043f\u043b\u0430\u043d\u0435 Heroku Postgres \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e 500, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c PGBouncer. \u041a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0434\u043b\u044f Heroku \u0432 Rails Autoscale.<\/p>\n<h2>\u041a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438<\/h2>\n<p>  <b><a href=\"https:\/\/pgday.ru\/ru\/2021\">PG Day&#8217;21 Russia<\/a><\/b><\/p>\n<p>  \u0417\u0430\u043f\u0438\u0441\u0438 \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u0432 #PGDayRussia 2021 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043d\u0430 <a href=\"https:\/\/www.youtube.com\/playlist?list=PL83V-7Vhzqkpj0qwmOimKR-x3FRVg9lDn\">YouTube-\u043a\u0430\u043d\u0430\u043b\u0435 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438<\/a><\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=kRFRD9giWbc&amp;list=PL83V-7Vhzqkpj0qwmOimKR-x3FRVg9lDn&amp;index=2\">\u0427\u0442\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u0432 \u043f\u043b\u0430\u043d\u0435 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0432 PostgreSQL<\/a> <i>\u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439<\/i><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=46YguW6ILv8&amp;list=PL83V-7Vhzqkpj0qwmOimKR-x3FRVg9lDn&amp;index=3&quot;\">\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445: PostgreSQL Edition<\/a> <i>(\u0410\u043d\u0434\u0440\u0435\u0439 \u0411\u043e\u0440\u043e\u0434\u0438\u043d)<\/i><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=UVSZRQyrXac&amp;list=PL83V-7Vhzqkpj0qwmOimKR-x3FRVg9lDn&amp;index=4\">\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 PostgreSQL \u0441 ClickHouse<\/a> <i>(\u041a\u0441\u0435\u043d\u0438\u044f \u0421\u0443\u043c\u0430\u0440\u043e\u043a\u043e\u0432\u0430)<\/i><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=Bnhu0Fs37Ps&amp;list=PL83V-7Vhzqkpj0qwmOimKR-x3FRVg9lDn&amp;index=4\">\u0418\u043d\u0442\u044b, \u043c\u0430\u0441\u0441\u0438\u0432\u044b, \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0438, \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435<\/a> (<i>\u0418\u0432\u0430\u043d \u041f\u0430\u043d\u0447\u0435\u043d\u043a\u043e<\/i>)<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=Ij4eBQGtnVc&amp;list=PL83V-7Vhzqkpj0qwmOimKR-x3FRVg9lDn&amp;index=6\">\u041c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u0432 \u043e\u0431\u043b\u0430\u043a\u043e: \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438, \u043b\u044e\u0434\u0438 \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b<\/a> <i>(\u0412\u0441\u0435\u0432\u043e\u043b\u043e\u0434 \u0413\u0440\u0430\u0431\u0435\u043b\u044c\u043d\u0438\u043a\u043e\u0432)<\/i><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=NYdVSYpb1KA&amp;list=PL83V-7Vhzqkpj0qwmOimKR-x3FRVg9lDn&amp;index=8\">\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 HighLoad BI \u043d\u0430 PostgreSQL \u0432 \u043a\u0440\u0443\u043f\u043d\u0435\u0439\u0448\u0438\u0445 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u044f\u0445: \u043e\u043f\u044b\u0442 \u0413\u041a Luxms<\/a> <i>(\u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u0414\u043e\u0440\u043e\u0444\u0435\u0435\u0432<\/i> \u0438 <i>\u0421\u0435\u0440\u0433\u0435\u0439 \u0428\u0435\u0441\u0442\u0430\u043a\u043e\u0432)<\/i><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=B3X7Pw-6Ucc&amp;list=PL83V-7Vhzqkpj0qwmOimKR-x3FRVg9lDn&amp;index=9\">Greenplum \u0432 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 \u0421\u0431\u0435\u0440\u0430<\/a> <i>(\u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u0414\u043e\u0431\u0440\u043e\u0432)<\/i><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=vBHQNHhJEo0&amp;list=PL83V-7Vhzqkpj0qwmOimKR-x3FRVg9lDn&amp;index=10\">\u0421\u0434\u0432\u0438\u0433\u0430\u0435\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0411\u0414 \u0432\u043b\u0435\u0432\u043e<\/a> <i>(\u041d\u0438\u043a\u043e\u043b\u0430\u0439 \u0421\u0430\u043c\u043e\u0445\u0432\u0430\u043b\u043e\u0432)<\/i><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=sVy1YGL6Cw0&amp;list=PL83V-7Vhzqkpj0qwmOimKR-x3FRVg9lDn&amp;index=14\">Can Postgres scale like DynamoDB?<\/a> <i>(\u00c1lvaro Hern\u00e1ndez, OnGres)<\/i><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=UNM6if3uIUk&amp;list=PL83V-7Vhzqkpj0qwmOimKR-x3FRVg9lDn&amp;index=15\">Protecting your data with Patroni and pgbackrest<\/a> <i>(Federico Campoli, Kamedata)<\/i><\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/568662\/\"> https:\/\/habr.com\/ru\/articles\/568662\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/vq\/wi\/ga\/vqwiga63njkn7hhjlave14pbqys.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/vq\/wi\/ga\/vqwiga63njkn7hhjlave14pbqys.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <i>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c: \u0432 \u044d\u0442\u043e\u043c \u0432\u044b\u043f\u0443\u0441\u043a\u0435 \u043d\u0435\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 <b>\u0420\u0435\u043b\u0438\u0437\u044b<\/b>, \u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u043b\u0438\u0437\u043e\u0432 \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u0430\u043d\u044b \u043f\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0443.<\/i><\/p>\n<h2>\u041b\u044e\u0434\u0438<\/h2>\n<p>  <b><a href=\"https:\/\/wiki.postgresql.org\/wiki\/Committers\">\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043c\u043c\u0438\u0442\u0435\u0440\u043e\u0432<\/a><\/b> \u043f\u0440\u0438\u0440\u043e\u0441 <i>\u0414\u0430\u043d\u0438\u044d\u043b\u0435\u043c \u0413\u0443\u0441\u0442\u0430\u0444\u0441\u0441\u043e\u043d\u043e\u043c<\/i> (Daniel Gustafsson, Greenplum, \u0438\u0437 \u0421\u0442\u043e\u043a\u0433\u043e\u043b\u044c\u043c\u0430) \u0438 <i>\u0414\u0436\u043e\u043d\u043e\u043c \u041d\u0430\u0439\u043b\u043e\u0440\u043e\u043c<\/i> (John Naylor, 2ndQuadrant=EDB)<\/p>\n<p>  \u0414\u0430\u043d\u0438\u044d\u043b\u044c: <i>\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e, \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e \u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u044e open source \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 15 \u043b\u0435\u0442, \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u0443\u044f\u0441\u044c \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043d\u0430 PostgreSQL \u0438 curl. \u0421\u0435\u0439\u0447\u0430\u0441 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 Greenplum. \u042f \u043a\u043e\u043d\u0442\u0440\u0438\u0431\u044c\u044e\u0442\u043e\u0440 PostgreSQL \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u043d\u0430\u0434 \u043a\u043e\u0434\u043e\u043c \u044f\u0434\u0440\u0430 PostgreSQL. \u0410 \u0435\u0449\u0451 \u043d\u0430\u0434 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u043e\u043c, \u0442\u0430\u043c \u044f \u043a\u043e\u043c\u043c\u0438\u0442\u0435\u0440. \u041a\u0440\u043e\u043c\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0441\u043a\u0438\u0445 \u0434\u0435\u043b, \u044f \u0435\u0449\u0451 \u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u044e \u043c\u0435\u0436\u0434\u0443\u043d\u0430\u0440\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438: Nordic PGDay, FOSDEM, PGDay \u0438 PostgreSQL Conference Europe.<\/i><\/p>\n<p>  \u0414\u0436\u043e\u043d \u043d\u0435 \u043b\u044e\u0431\u0438\u0442, \u0432\u0438\u0434\u0438\u043c\u043e, \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0441\u0435\u0431\u0435. \u0412 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u0431\u043b\u043e\u0433\u0435 \u0435\u0441\u0442\u044c <a href=\"https:\/\/www.2ndquadrant.com\/en\/blog\/author\/john\/\">\u043f\u0430\u0440\u043e\u0447\u043a\u0430 \u0435\u0433\u043e \u0441\u0442\u0430\u0442\u0435\u0439.<\/a><\/p>\n<p>  <b><a href=\"https:\/\/postgresql.life\/post\/bryn_llewellyn\/\">\u0418\u043d\u0442\u0435\u0440\u0432\u044c\u044e: \u0411\u0440\u0438\u043d \u041b\u044c\u044e\u044d\u043b\u043b\u0438\u043d<\/a><\/b>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-396088","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/396088","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=396088"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/396088\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=396088"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=396088"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=396088"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}