{"id":384125,"date":"2024-06-29T05:18:55","date_gmt":"2024-06-29T05:18:55","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=384125"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=384125","title":{"rendered":"<span>Postgresso #3 (40)<\/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\/e1\/fk\/hn\/e1fkhn5gp7hlso9v5ad1shcfhge.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/e1\/fk\/hn\/e1fkhn5gp7hlso9v5ad1shcfhge.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <i>\u0418\u0422-\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u2014 \u044d\u0442\u043e \u043a\u0430\u043a \u0432\u043e\u0434\u043e\u043f\u0440\u043e\u0432\u043e\u0434, \u0431\u0435\u0437 \u043d\u0435\u0451 \u0436\u0438\u0437\u043d\u044c \u0443\u0436\u0435 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430. \u0418 \u0432 \u044d\u0442\u0438 \u0431\u0435\u0437\u0440\u0430\u0434\u043e\u0441\u0442\u043d\u044b\u0435 \u0434\u043d\u0438 \u043c\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0442\u044c Postgresso.<\/i>  <\/p>\n<hr\/>\n<p>  <\/p>\n<h2>Feature Freeze<\/h2>\n<p>  7 \u0430\u043f\u0440\u0435\u043b\u044f \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 <i>\u0417\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/i>. \u0412\u043e\u0448\u0435\u0434\u0448\u0438\u0445 \u043d\u043e\u0432\u0448\u0435\u0441\u0442\u0432 \u043c\u043d\u043e\u0433\u043e. \u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043e\u0431\u0437\u043e\u0440 <i>\u041f\u0430\u0432\u043b\u0430 \u041b\u0443\u0437\u0430\u043d\u043e\u0432\u0430<\/i> \u0432\u044b\u0439\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435.  <\/p>\n<hr\/>\n<p>  \u0413\u043b\u0430\u0432\u043d\u044b\u043c\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0442\u0430\u043b\u0438 2 \u0441\u0435\u0440\u0438\u0438 \u043c\u043e\u0449\u043d\u044b\u0445 \u043f\u0430\u0442\u0447\u0435\u0439, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0432\u0430\u0436\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0435\u0449\u0451 \u043f\u043b\u043e\u0442\u043d\u0435\u0439 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0430\u044e\u0449\u0438\u0435 \u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c SQL \u2014 SQL\/JSON \u0438 MERGE.<\/p>\n<h2>SQL\/JSON<\/h2>\n<p>  \u0412\u043e\u0442 \u0434\u0432\u0430 \u043f\u043e\u0441\u0442\u0430 <a href=\"https:\/\/obartunov.livejournal.com\/\">\u0432 \u0416\u0416<\/a> <i>\u041e\u043b\u0435\u0433\u0430 \u0411\u0430\u0440\u0442\u0443\u043d\u043e\u0432\u0430<\/i>:<\/p>\n<p>  <b><a href=\"https:\/\/obartunov.livejournal.com\/200076.html\">SQL\/JSON standard-2016 conformance for PostgreSQL, Oracle, SQL Server and MySQL<\/a><\/b><\/p>\n<p>  <b><a href=\"https:\/\/obartunov.livejournal.com\/206138.html\">SQL\/JSON in PG15 !<\/a><\/b><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/3j\/at\/0v\/3jat0vtqqfu9_pgmngzwevmorco.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/3j\/at\/0v\/3jat0vtqqfu9_pgmngzwevmorco.jpeg\" data-blurred=\"true\"\/><br \/>  <i>\u0421\u043a\u0440\u0438\u043d \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432 \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 \u041e\u043b\u0435\u0433\u0430 \u0411\u0430\u0440\u0442\u0443\u043d\u043e\u0432\u0430<\/i><\/p>\n<p>  \u041c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0434\u0432\u0443\u043c\u044f \u043f\u043e\u0441\u0442\u0430\u043c\u0438 \u0442\u0440\u0438 \u0433\u043e\u0434\u0430. \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u043e\u043d \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043b 3 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0441\u0435\u0440\u0438\u0438 \u043f\u0430\u0442\u0447\u0435\u0439, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c SQL\/JSON. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u2014 \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0435 \u043a\u043e\u043c\u043c\u0438\u0442\u044b. \u0421\u0443\u0434\u044c\u0431\u0430 \u043f\u0430\u0442\u0447\u0435\u0439 \u0442\u0430\u043a\u043e\u0432\u0430:<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/22\/1471\/\">SQL\/JSON: jsonpath<\/a><\/b> (\u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0447\u0435\u043d\u043e \u043d\u0430 <a href=\"https:\/\/commitfest.postgresql.org\/22\/\">\u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0435 2019-03<\/a>)<br \/>  <b><a href=\"https:\/\/commitfest.postgresql.org\/37\/2901\/\">SQL\/JSON: functions<\/a><\/b> (\u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0447\u0435\u043d\u043e \u043d\u0430 <a href=\"https:\/\/commitfest.postgresql.org\/37\/\">\u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0435 2022-03<\/a>)<br \/>  <b><a href=\"https:\/\/commitfest.postgresql.org\/37\/2902\/\">SQL\/JSON: JSON_TABLE<\/a><\/b> (\u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0447\u0435\u043d\u043e \u043d\u0430 <a href=\"https:\/\/commitfest.postgresql.org\/37\/\">\u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0435 2022-03<\/a>)<br \/>  <a name=\"habracut\"><\/a> <br \/>  \u042d\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0442\u0440\u0443\u0434\u043e\u0432 \u043c\u043d\u043e\u0433\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0437 Postgres Professional, \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0432\u0448\u0438\u0445 \u044d\u0442\u0443 \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u0441\u0442\u0430\u0432\u0448\u0438\u0445 \u0435\u0451 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0441\u0438\u043b\u043e\u0439. \u0418\u0437 \u0432\u0441\u0435\u0445 \u0441\u0442\u043e\u0438\u0442 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 Postgres Professional <i>\u041d\u0438\u043a\u0438\u0442\u0443 \u0413\u043b\u0443\u0445\u043e\u0432\u0430<\/i>. \u041d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0451 \u0435\u0449\u0451 \u0432 2016-\u043c, \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u0442\u0447 \u043d\u0430 \u0442\u0435\u043c\u0443 SQL\/JSON \u0431\u044b\u043b \u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0447\u0435\u043d \u0432 2017-\u043c. <\/p>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u043d\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u041e\u043b\u0435\u0433\u0430 \u0435\u0441\u0442\u044c \u0432 \u0431\u043b\u043e\u0433\u0435 Postgres Professional:<\/p>\n<p>  <b><a href=\"https:\/\/postgrespro.com\/blog\/pgsql\/5969433\">SQL\/JSON patches committed to PostgreSQL 15!<\/a><\/b><\/p>\n<p>  \u041e\u043d\u0430 \u043f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c, \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0434\u043d\u044f\u0445 \u0432 <a href=\"https:\/\/postgrespro.ru\/blog\/\">\u0440\u0443\u0441\u0441\u043a\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u043b\u043e\u0433\u0430<\/a> (\u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0430\u043f\u0434\u0435\u0439\u0442). <\/p>\n<p>  \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u043e SQL\/JSON \u0432 Postgres \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <b><a href=\"https:\/\/www.postgresql.org\/docs\/devel\/functions-json.html\">JSON Functions and Operators<\/a><\/b>, \u043d\u043e \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0438 \u043f\u0440\u043e Path (\u0440\u0430\u0437\u0434\u0435\u043b 9.16.2), \u0438 JSON_TABLE (\u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 9.16.3.2.5.). \u0422\u0435\u043c\u0430 \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 (\u0435\u0441\u043b\u0438 \u043d\u0435 \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439), \u0430 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0439 \u043e\u0431 \u044d\u0442\u0438\u0445 \u0442\u0440\u0451\u0445 \u0433\u0440\u0443\u043f\u043f\u0430\u0445 \u043f\u0430\u0442\u0447\u0435\u0439.<\/p>\n<p>  <b>JSONPath<\/b> \u2014 \u043d\u0430\u0431\u043e\u0440 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043d\u0443\u0442\u0440\u0438 JSON. \u041e JSONPath \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u043d\u0430\u0448\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435: <b><a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/448612\/\">\u0427\u0442\u043e \u0437\u0430\u043c\u043e\u0440\u043e\u0437\u0438\u043b\u0438 \u043d\u0430 feature freeze 2019. \u0427\u0430\u0441\u0442\u044c I. JSONPath<\/a><\/b><\/p>\n<p>  <b>SQL\/JSON-\u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/b>. \u0418\u0445 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e. \u0418 \u0435\u0449\u0451 \u043d\u0435 \u0432\u0441\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b. \u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u0441\u0442\u0440\u0430\u0448\u043d\u043e, \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e API \u0443\u0436\u0435 \u0435\u0441\u0442\u044c, \u0438 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f.<\/p>\n<p>  \u041f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b SQL\/JSON. \u0421\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u0432, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c:<\/p>\n<p>  JSON_EXISTS() \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043b\u0438 jsonpath-\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u043d\u043e\u0435 \u043a JSONB, \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<br \/>  \u041d\u043e \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u0438 IS JSON. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u0447\u043d\u044b\u0439 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441 ARRAY \/ OBJECT \/ SCALAR \/ WITH | WITHOUT UNIQUE KEYS. \u0410 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0438 \u0442\u0430\u043a: IS NOT JSON.<\/p>\n<p>  \u0414\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 JSONPath \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0445 \u0442\u0438\u043f\u044b SQL.<\/p>\n<p>  JSON_VALUE() \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0430 \u0435\u0441\u043b\u0438 \u0438\u0445 \u043c\u043d\u043e\u0433\u043e \u2014 \u043e\u0448\u0438\u0431\u043a\u0443.<\/p>\n<p>  JSON_QUERY() \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 JSON-\u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u043b\u0438 JSON-\u043c\u0430\u0441\u0441\u0438\u0432;<\/p>\n<p>  <b>JSON_TABLE<\/b> \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u0435\u043b\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a JSON(B), \u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u0432\u0438\u0434\u0435 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f (relational view), \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043a \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435. JSON_TABLE \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f FROM \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 SELECT \u043a SQL-\u0442\u0430\u0431\u043b\u0438\u0446\u0435.<\/p>\n<p>  \u041e TABLE \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/postgrespro.com\/blog\/pgsql\/5969433\">\u0432 \u0442\u043e\u0439 \u0436\u0435 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>. \u041e\u043d \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0442\u0435\u043c\u0443 \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0443\u0436\u043d\u044b\u0445 \u043a\u0432\u0430\u0440\u0442\u0438\u0440, \u043d\u0430 \u0442\u0430\u043a\u043e\u043c JSON <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/448612\/\">\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c<\/a> \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 JSONPath.<\/p>\n<p>  \u0418\u0442\u043e\u0433\u043e: <i>\u042d\u043d\u0434\u0440\u044e \u0414\u0430\u043d\u0441\u0442\u0430\u043d<\/i> (Andrew Dunstan, EDB) \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b (\u043f\u043e\u043a\u0430 \u043d\u0435\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e) \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0443 \u043d\u043e\u0432\u044b\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 SQL\/JSON:<\/p>\n<ul>\n<li>\u0431\u0430\u0437\u043e\u0432\u044b\u0435 SQL\/JSON \u0444\u0443\u043d\u043a\u0446\u0438\u0438-\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b;<\/li>\n<li>SQL\/JSON: JSON_OBJECTAGG;<\/li>\n<li>SQL\/JSON: JSON_ARRAYAGG \u0441 ORDER BY;<\/li>\n<li>\u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u0435 \u0432 JSON_OBJECT \u0438\u043b\u0438 JSON_OBJECTAGG;<\/li>\n<li>\u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 SQL\/JSON;<\/li>\n<li>SQL\/JSON: \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 IS JSON WITH UNIQUE KEYS;<\/li>\n<li>SQL\/JSON: \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 PASSING;<\/li>\n<li>JSON_TABLE: \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c PLAN;<\/li>\n<li>SQL\/JSON: \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f ON EMPTY \u0438 ON ERROR;<\/li>\n<li>\u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 ON ERROR \u0438\u043b\u0438 ON EMPTY;<\/li>\n<li>JSON_TABLE: \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f NESTED COLUMNS \u043e\u0434\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f (siblings);<\/li>\n<li>JSON_QUERY;<\/li>\n<li>JSON_QUERY: \u043e\u043f\u0446\u0438\u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438;<\/li>\n<li>WITH UNIQUE KEYS \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445-\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430\u0445 SQL\/JSON;<\/li>\n<li>JSON_TABLE: PLAN DEFAULT.<\/li>\n<\/ul>\n<h2>MERGE<\/h2>\n<p>  \u0414\u043e \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f MERGE INTO \u043f\u0440\u0438 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 Oracle \u0432 Postgres \u0435\u0433\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0438\u043c\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 <b><a href=\"https:\/\/habr.com\/ru\/post\/216057\/\">\u0418\u0437 Oracle \u0434\u0430 \u0432 Postgres<\/a><\/b> \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 <b>RETURNING<\/b> \u0438 <b>WITH<\/b>.<\/p>\n<p>  \u0412 2015, \u0432 PostgreSQL 10, \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f INSERT \u2026 ON CONFLICT DO \u2026. (<b>PostgreSQL 9.5: \u0447\u0442\u043e \u043d\u043e\u0432\u043e\u0433\u043e? \u0427\u0430\u0441\u0442\u044c 1. INSERT\u2026 ON CONFLICT DO NOTHING\/UPDATE \u0438 ROW LEVEL SECURITY<\/b>).<\/p>\n<p>  \u0412 2018 \u0432 PoostgreSQL 11 \u0447\u0443\u0442\u044c \u043d\u0435 \u043f\u043e\u043f\u0430\u043b MERGE. \u041d\u043e \u0438\u0437-\u0437\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u0430\u0442\u0447 \u043e\u0442\u043a\u0430\u0442\u0438\u043b\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e. \u042d\u0442\u043e \u0431\u044b\u043b\u0430 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0434\u0440\u0430\u043c\u0430, \u043f\u043e\u0447\u0442\u0438 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u0438 \u043c\u044b \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u0438\u0441\u0430\u043b\u0438 \u0432 <b><a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/412605\/\">\u0411\u0438\u0442\u0432\u0430 \u043f\u0440\u0438 MERGE. \u0425\u0440\u043e\u043d\u0438\u043a\u0430 \u0441 \u0432\u044b\u0432\u043e\u0434\u0430\u043c\u0438 \u0438 \u043c\u043e\u0440\u0430\u043b\u044c\u044e<\/a><\/b>. \u0411\u0438\u043b\u0441\u044f \u0437\u0430 MERGE \u0433\u043b\u0430\u0432\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 2ndQuadrant (\u0442\u0435\u043f\u0435\u0440\u044c \u0432 EDB) <i>\u0421\u0430\u0439\u043c\u043e\u043d \u0420\u0438\u0433\u0433\u0441<\/i> (Simon Riggs), \u043e\u043d \u043d\u0430\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e \u0438 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0432\u0441\u0435\u043c\u0438 \u0441\u0438\u043b\u0430\u043c\u0438 \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u043f\u0440\u043e\u0442\u0430\u0449\u0438\u0442\u044c \u0432 \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u0430\u0442\u0447, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u044b MERGE.<\/p>\n<p>  \u0418 \u0432\u043e\u0442 \u2014 \u0441\u0432\u0435\u0440\u0448\u0438\u043b\u043e\u0441\u044c! <b><a href=\"https:\/\/www.postgresql.org\/docs\/devel\/sql-merge.html\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a><\/b> \u043f\u0440\u0438\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>  <i>\u0422\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0438 \u0432\u0441\u0451 \u0436\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f. \u041e\u043d\u0438 \u043f\u043e\u0447\u0442\u0438 \u0433\u043e\u0442\u043e\u0432\u044b.<\/i><\/p>\n<h2>JS<\/h2>\n<p>  JS \u043d\u0435 \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 4 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430 PostgreSQL \u00ab\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438\u00bb (\u044d\u0442\u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u2014 <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/plpgsql\">PL\/pgSQL<\/a>, <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/plperl\">PL\/Perl<\/a>, <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/plpython\">PL\/Python<\/a> \u0438 <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/pltcl\">PL\/Tcl<\/a>), \u043d\u043e \u043e\u043d \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0448\u0438\u0440\u043e\u043a\u043e. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f PL\/V8 \u2014 \u043d\u0430 \u0434\u0432\u0438\u0436\u043a\u0435 V8, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0441\u0442\u043e\u0438\u0442 Google.<\/p>\n<p>  <b><a href=\"https:\/\/github.com\/plv8\/plv8\/releases\/tag\/v3.1.2\">PLV8 3.1.2: PLV8 \u2014 A Procedural Language in Javascript powered by V8<\/a><\/b><\/p>\n<p>  \u041d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044d\u0442\u043e \u0441\u0430\u043c\u0430\u044f \u0441\u0432\u0435\u0436\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u044f\u0437\u044b\u043a\u0430. \u0412\u043e\u0442 <b><a href=\"https:\/\/plv8.github.io\/\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a><\/b>.<\/p>\n<p>  <b><a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/502254\/\">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><\/b><\/p>\n<p>  \u0421\u0442\u0430\u0442\u044c\u044f <i>\u0418\u0432\u0430\u043d\u0430 \u041f\u0430\u043d\u0447\u0435\u043d\u043a\u043e<\/i> \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e PL\/V8. \u041c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432. \u0418 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u044d\u0442\u0438\u0445 \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432. \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/plpgsql\">PL\/pgSQL<\/a>, <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/plperl\">PL\/Perl<\/a>, <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/plpython\">PL\/Python<\/a> \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 PL\/V8 \u043a\u0430\u043a \u0431\u044b \u0437\u0430\u043d\u044f\u043b \u0432 \u0447\u0435\u0442\u0432\u0451\u0440\u043a\u0435 \u043c\u0435\u0441\u0442\u043e \u00ab\u043a\u043e\u0440\u043e\u0431\u043e\u0447\u043d\u043e\u0433\u043e\u00bb <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/pltcl\">PL\/Tcl<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435 \u0442\u0430\u043a \u0430\u043a\u0442\u0443\u0430\u043b\u0435\u043d.<\/p>\n<p>  <b><a href=\"https:\/\/github.com\/porsager\/postgres\">Postgres.js 3.0.5<\/a><\/b><\/p>\n<p>  Postgres.js \u2014 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 Postgres, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441 \u0440\u0430\u043d\u0442\u0430\u0439\u043c-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438 <a href=\"https:\/\/nodejs.org\/en\/\">Node.js<\/a> (\u043d\u0430 \u0431\u0435\u0437\u0435 V8) \u0438 <a href=\"https:\/\/nodejs.org\/en\/\">Deno<\/a> (\u043d\u0430 \u0431\u0430\u0437\u0435 V8, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430 Rust). \u042d\u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u0443\u043c\u0435\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0443 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438, \u0441\u0442\u0440\u043e\u0438\u0442\u044c HA-\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 URL, \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 \u043a\u0443\u0440\u0441\u043e\u0440\u044b \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435.<\/p>\n<p>  <b><a href=\"https:\/\/github.com\/kig\/quickgres\">Quickgres 0.4.2<\/a><\/b><\/p>\n<p>  \u0414\u0440\u0443\u0433\u0430\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0430\u044f \u0438 \u0443\u0434\u043e\u0431\u043d\u0430\u044f, \u0431\u0435\u0437 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c PostgreSQL. \u041c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 \u0434\u043e 2\u0413\u0411, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u0438\u0434\u0435\u043e \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 TOAST. \u0423\u043c\u0435\u0435\u0442 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0442\u044c \u0434\u043e\u043b\u0433\u043e\u0438\u0433\u0440\u0430\u044e\u0449\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0438 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u043c\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435.<\/p>\n<p>  <b><a href=\"https:\/\/github.com\/directus\/directus\">Directus v9.8.0<\/a><\/b><\/p>\n<p>  \u0421\u0440\u0435\u0434\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 Node.js, \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u0444\u0440\u043e\u043d\u0442\u044d\u043d\u0434 \u043a Postgres, SQLite, MySQL, Oracle \u0438 \u0434\u0440\u0443\u0433\u0438\u043c SQL-\u0431\u0430\u0437\u0430\u043c. \u0421\u043e\u0437\u0434\u0430\u0451\u0442 \u0441\u043b\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0431\u0430\u0437\u0435 \u0432 API Real-Time GraphQL \u0438 Rest. \u0412 <a href=\"https:\/\/github.com\/directus\/directus\/releases\/tag\/v9.8.0\">\u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438<\/a> \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/github.com\/directus\/directus\/pull\/12363\">\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u043e\u043b\u0435\u0439<\/a>.<\/p>\n<p>  <b><a href=\"https:\/\/github.com\/tcdi\/pgx\/releases\/tag\/v0.4.2\">PGX 0.4.0<\/a><\/b><\/p>\n<p>  pgx \u2014 \u0441\u0440\u0435\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 <b>\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 PostgreSQL \u0432 Rust<\/b>. \u0412 \u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c \u043d\u0430 \u0431\u0430\u0437\u0435 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Musl\">Musl<\/a>, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a Alpine Linux.<\/p>\n<p>  <b><a href=\"https:\/\/www.zombodb.com\/\">ZomboDB<\/a><\/b><\/p>\n<p>  \u042d\u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 PostgreSQL, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u0442 \u0432 \u043d\u0435\u0433\u043e Elasticsearch. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u043e\u0433\u043e \u0434\u043b\u044f Elasticsearch \u0442\u0430\u043c \u043d\u0435\u0442, \u0442\u043e\u043b\u044c\u043a\u043e PostgreSQL API.<\/p>\n<h2>\u0415\u0449\u0451 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438 \u0440\u0435\u043b\u0438\u0437\u044b<\/h2>\n<p>  <b><a href=\"https:\/\/dataegret.com\/2022\/03\/no-update-updates\/\">No UPDATE updates<\/a><\/b><\/p>\n<p>  \u0421\u0442\u0430\u0442\u044c\u044e \u0441 \u0442\u0430\u043a\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043b <i>\u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u041d\u0438\u043a\u0438\u0442\u0438\u043d<\/i> \u0438\u0437 Data Egret. \u041e\u043d \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <b><a href=\"http:\/\/rigaux.org\/hexedit.html\">hexedit<\/a><\/b>. \u0412\u0440\u0443\u0447\u043d\u0443\u044e \u043c\u0435\u043d\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u0441\u043c\u043e\u0442\u0440\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u0431\u0430\u0437\u0435 \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043a\u044d\u0448\u0430, \u0430 \u043a\u043e\u0433\u0434\u0430 \u0441 \u0434\u0438\u0441\u043a\u0430. \u041e\u0447\u0435\u043d\u044c \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>  <b><a href=\"https:\/\/blog.crunchydata.com\/blog\/fuzzy-name-matching-in-postgresql\">Fuzzy Name Matching in Postgres<\/a><\/b><\/p>\n<p>  \u0412 \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 <i>\u041f\u043e\u043b \u0420\u044d\u043c\u0437\u0438<\/i> Paul Ramsy, Crunchy Data) \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 <b><a href=\"https:\/\/www.postgresql.org\/docs\/current\/fuzzystrmatch.html\">fuzzystrmatch<\/a><\/b>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A0%D0%B0%D1%81%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5_%D0%9B%D0%B5%D0%B2%D0%B5%D0%BD%D1%88%D1%82%D0%B5%D0%B9%D0%BD%D0%B0\">\u041b\u0435\u0432\u0435\u043d\u0448\u0442\u0435\u0439\u043d\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f<\/a> \u0438 \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c <a href=\"https:\/\/en.wikipedia.org\/wiki\/Soundex\">Soundex<\/a>. \u0414\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u041f\u043e\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <a href=\"https:\/\/www.fakenamegenerator.com\/gen-random-rucyr-us.php\">\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0444\u0430\u043b\u044c\u0448\u0438\u0432\u044b\u0445 \u0438\u043c\u0451\u043d<\/a>.<\/p>\n<p>  <b><a href=\"https:\/\/www.enterprisedb.com\/blog\/pg-phriday-tidying-vacuum\">Tidying Up With VACUUM<\/a><\/b><\/p>\n<p>  \u041d\u0430 \u043f\u044f\u0442\u043d\u0438\u0446\u0430\u0445 (<a href=\"https:\/\/www.enterprisedb.com\/shaun-thomas\">PG Phriday<\/a>) \u0432 EDB \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0441\u0442\u0430\u0442\u044c\u044f <i>\u0428\u043e\u043d\u0430 \u0422\u043e\u043c\u0430\u0441\u0430<\/i> (Shaun Thomas), \u0433\u0434\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432\u0441\u0435 \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0432\u043b\u0438\u044f\u044e\u0449\u0438\u0435 \u043d\u0430 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0432\u0430\u043a\u0443\u0443\u043c\u0430.<\/p>\n<p>  <b><a href=\"https:\/\/www.postgresql.org\/about\/news\/database-lab-engine-31-pgbackrest-timezones-for-cli-dle-community-2432\/\">Database Lab Engine 3.1: pgBackRest, timezones for CLI, DLE community<\/a><\/b><\/p>\n<p>  \u041d\u043e\u0432\u043e\u0435: <\/p>\n<ul>\n<li>\u043d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 pgBackRest \u043a\u0430\u043a \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0430\u0440\u0445\u0438\u0432\u0430 (\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 WAL-G \u0443\u0436\u0435 \u0435\u0441\u0442\u044c);<\/li>\n<li>\u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c timezone \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 DLE \u0432 <a href=\"https:\/\/www.jetbrains.com\/ru-ru\/teamcity\/ci-cd-guide\/ci-cd-pipeline\/?ysclid=l26akur771\">CI\/CD-\u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430\u0445<\/a>.<\/li>\n<\/ul>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0439 \u043e \u043d\u043e\u0432\u0448\u0435\u0441\u0442\u0432\u0430\u0445 \u0432 <a href=\"https:\/\/github.com\/postgres-ai\/database-lab-engine\/releases\/tag\/v3.1.0\">Release notes<\/a>.<\/p>\n<p>  \u041f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043f\u0435\u0440\u0432\u044b\u0435 \u00ab\u0432\u043d\u0435\u0448\u043d\u0438\u0435\u00bb \u0441\u0442\u0430\u0442\u044c\u0438 \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 DLE: <b><a href=\"https:\/\/ordina-jworks.github.io\/cloud\/2022\/02\/14\/postgres-ai.html\">TESTING WITH PRODUCTION DATA MADE EASY<\/a><\/b><br \/>  <i>\u041f\u0438\u0442\u0435\u0440 \u0412\u0438\u043d\u043a\u0435\u043d<\/i> (Pieter Vincken) \u043f\u0438\u0448\u0435\u0442 \u043e Database Lab Engine \u0432 \u0431\u043b\u043e\u0433\u0435 JWorks \u2014 \u0431\u0435\u043b\u044c\u0433\u0438\u0439\u0441\u043a\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Java-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432.<\/p>\n<p>  \u041d\u0443 \u0438 \u043e\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439 \u2014 \u0441\u0442\u0430\u0442\u044c\u044f <i>\u041d\u0438\u043a\u043e\u043b\u0430\u044f \u0421\u0430\u043c\u043e\u0445\u0432\u0430\u043b\u043e\u0432\u0430<\/i>: <b><a href=\"https:\/\/postgres.ai\/blog\/20220405-database-lab-engine-3-1-released\">DLE 3.1: pgBackRest, timezones for CLI, DLE community<\/a><\/b>.<\/p>\n<p>  <b><a href=\"https:\/\/github.com\/orafce\/orafce\/releases\/tag\/VERSION_3_21_0\">Orafce 3.21.0<\/a><\/b><\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0440\u0430\u043a\u043b\u043e\u0432\u044b\u0435 <b>regexp<\/b>-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>regexp_instr<\/code> \u0438 <code>regexp_replace<\/code> \u0431\u044b\u043b\u0438 \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u043c\u0438 \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b (backported) \u0438\u0437 PostgreSQL 15. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u0435\u0441\u0442\u044c, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 NULL.<\/p>\n<p>  <b><a href=\"https:\/\/github.com\/xo\/usql\">usql 0.10.0<\/a><\/b><\/p>\n<p>  <b>usql<\/b> \u2014 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0421\u0423\u0411\u0414: \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0445, \u043d\u043e \u0438 NoSQL. \u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 <b>psql<\/b>, \u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439.<\/p>\n<p>  <b><a href=\"https:\/\/www.pgbouncer.org\/2022\/03\/pgbouncer-1-17-0\">PgBouncer 1.17.0<\/a><\/b><\/p>\n<p>  \u0418\u0437 \u043d\u043e\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438: \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u044b \u0432 \u0432\u0438\u0434\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0445\u043e\u0441\u0442\u043e\u0432. \u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0445\u043e\u0441\u0442\u0430\u043c\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043f\u043e \u043a\u0440\u0443\u0433\u0443 (round-robin). \u041f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441 \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0431\u0430\u0437\u043e\u0439 \u0442\u0435\u043f\u0435\u0440\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043a\u043b\u0438\u0435\u043d\u0442\u044b, \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0438\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043d\u0435 \u043c\u043e\u0433\u043b\u0438 \u043f\u0440\u043e\u0449\u0443\u043f\u044b\u0432\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442. \u0410 \u0435\u0449\u0451 \u2014 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u043b\u0438\u043d\u0443 \u043f\u0430\u0440\u043e\u043b\u044f. \u041e\u0431 \u044d\u0442\u0438\u0445 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445 \u2014 \u0432 <a href=\"https:\/\/www.pgbouncer.org\/changelog.html#pgbouncer-117x\">Change log<\/a>.<\/p>\n<p>  <b><a href=\"https:\/\/github.com\/darold\/pgbadger\/releases\/tag\/v11.8\">pgBadger v11.8<\/a><\/b><\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b <i>\u0416\u0438\u043b\u044f \u0414\u0430\u0440\u043e\u043b\u044f<\/i> (Gilles Darold) \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043d\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0445 \u043d\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439. \u041a\u0441\u0442\u0430\u0442\u0438, \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0442\u0430\u043a\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f: <b><a href=\"https:\/\/fluca1978.github.io\/2022\/04\/06\/pgbadger_ssh_download.html\">pgbadger incremental mode via SSH<\/a><\/b><\/p>\n<p>  <b><a href=\"https:\/\/github.com\/DrPostgres\/pg_plan_guarantee\">pg_plan_guarantee<\/a><\/b><\/p>\n<p>  \u042d\u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u043f\u043b\u0430\u043d\u044b \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u0441\u044f. \u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432.<\/p>\n<p>  <b><a href=\"https:\/\/github.com\/dmitigr\/pgfe\">Pgfe 2.0.0<\/a><\/b><\/p>\n<p>  Pgfe \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a <b>PostGres FrontEnd<\/b>. \u041d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430 C++. \u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0431\u044b\u043b\u0430 <i>\u0430\u043b\u044c\u0444\u0430<\/i>.<\/p>\n<h2>\u041e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435<\/h2>\n<p>  <b>\u041a\u0443\u0440\u0441 DBA1<\/b>, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0434\u043e \u0432\u0435\u0440\u0441\u0438\u0438 PostgreSQL-13, \u0443\u0436\u0435 <a href=\"https:\/\/postgrespro.ru\/education\/courses\/DBA1\">\u043d\u0430 \u0441\u0430\u0439\u0442\u0435<\/a>. \u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0435\u043c\u044c\u0435\u0440\u043d\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u0438\u0442\u0441\u044f \u0432 \u042d\u043b\u0438\u0441\u0442\u0435 \u043d\u0430 \u044d\u0442\u043e\u0439 \u043d\u0435\u0434\u0435\u043b\u0435.<\/p>\n<p>  <b>For Newbies<\/b><\/p>\n<p>  <b><a href=\"https:\/\/blog.crunchydata.com\/blog\/postgis-for-newbies\">PostGIS For Newbies<\/a><\/b><\/p>\n<p>  \u041a\u0430\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c. \u041f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 PostGIS. \u0427\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f <i>geometry<\/i> \u043e\u0442 <i>geography<\/i>. QGIS. shp2pgsql \u0438 ogr2ogr. \u0410\u0432\u0442\u043e\u0440 \u2014 <i>\u042d\u043b\u0438\u0437\u0430\u0431\u0435\u0442 \u041a\u0440\u0438\u0441\u0442\u0435\u043d\u0441\u0435\u043d<\/i> (Elizabeth Christensen) \u0438\u0437 Crunchy Data.<\/p>\n<p>  \u0415\u0441\u0442\u044c \u0442\u0430\u043c \u0438 \u0435\u0449\u0451 \u0441\u0442\u0430\u0442\u044c\u0438 \u042d\u043b\u0438\u0437\u0430\u0431\u0435\u0442 \u0434\u043b\u044f \u00ab\u043d\u043e\u0432\u0435\u043d\u044c\u043a\u0438\u0445\u00bb:<\/p>\n<p>  <b><a href=\"https:\/\/blog.crunchydata.com\/blog\/postgres-indexes-for-newbies\">Postgres Indexes for Newbies<\/a><\/b><\/p>\n<p>  \u041f\u043e \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u043e\u043c\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0438 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0444\u0440\u0430\u0437\u0430\u0445 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432: <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/indexes-types#INDEXES-TYPES-BTREE\">B-tree<\/a>, <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/indexes-types#INDEXES-TYPES-BRIN\">BRIN<\/a>, <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/indexes-types#INDEXES-TYPE-GIST\">GIST<\/a> (\u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0442\u0430\u043a, \u043d\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0438\u0448\u0443\u0442 GiST) \u0438 <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/indexes-types#INDEXES-TYPES-GIN\">GIN<\/a>. \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441 \u0443\u043a\u043b\u043e\u043d\u043e\u043c \u0432 PostGIS. \u041f\u0440\u043e <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/indexes-types#INDEXES-TYPES-HASH\">\u0445\u044d\u0448<\/a>, <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/indexes-types#INDEXES-TYPE-SPGIST\">SP-GiST<\/a> \u0438 <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/bloom\">bloom<\/a> \u043d\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f (\u0438 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0432 Postgres Pro Enterprise \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u0438 <a href=\"https:\/\/postgrespro.ru\/docs\/enterprise\/13\/rum\">rum<\/a>; \u0438 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u043e\u0431 \u0443\u0433\u043b\u0443\u0431\u043b\u0451\u043d\u043d\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u2014 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/326096\/\">\u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439<\/a> <i>\u0415\u0433\u043e\u0440\u0430 \u0420\u043e\u0433\u043e\u0432\u0430<\/i> \u043e\u0431 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0445).<\/p>\n<p>  <b><a href=\"https:\/\/blog.crunchydata.com\/blog\/postgres-constraints-for-newbies\">Postgres Constraints for Newbies<\/a><\/b><\/p>\n<p>  \u041e <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/ddl-constraints#DDL-CONSTRAINTS-FK\">FOREIGN KEY<\/a>, \u043a\u0430\u0441\u043a\u0430\u0434\u043d\u044b\u0445 UPDATE \u0438 DELETE, \u043e <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/ddl-constraints#id-1.5.4.6.6\">NOT NULL<\/a>, <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/ddl-constraints#DDL-CONSTRAINTS-CHECK-CONSTRAINTS\">CHECK<\/a>, <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/ddl-constraints#DDL-CONSTRAINTS-EXCLUSION\">EXCLUDE<\/a>.<\/p>\n<p>  \u041d\u0430\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u0432 \u0436\u0430\u043d\u0440\u0435 for newbies \u0435\u0441\u0442\u044c \u0438 \u043d\u0430\u0448\u0430 \u00ab\u043c\u0430\u043b\u044e\u0442\u043a\u0430\u00bb, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u0432 <a href=\"https:\/\/edu.postgrespro.ru\/introbook_v8.pdf\">PDF<\/a>. \u0410 \u0434\u043b\u044f \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e\u0433\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0435\u0441\u0442\u044c <b><a href=\"https:\/\/postgrespro.ru\/education\/books\/internals\">PostgreSQL \u0438\u0437\u043d\u0443\u0442\u0440\u0438<\/a><\/b> (\u043e\u043d\u0430 \u0436\u0435 \u0432 <a href=\"https:\/\/edu.postgrespro.ru\/postgresql_internals-14.pdf\">PDF<\/a>) <i>\u0415\u0433\u043e\u0440\u0430 \u0420\u043e\u0433\u043e\u0432\u0430<\/i>.<\/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\/658783\/\"> https:\/\/habr.com\/ru\/articles\/658783\/<\/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\/e1\/fk\/hn\/e1fkhn5gp7hlso9v5ad1shcfhge.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/e1\/fk\/hn\/e1fkhn5gp7hlso9v5ad1shcfhge.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <i>\u0418\u0422-\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u2014 \u044d\u0442\u043e \u043a\u0430\u043a \u0432\u043e\u0434\u043e\u043f\u0440\u043e\u0432\u043e\u0434, \u0431\u0435\u0437 \u043d\u0435\u0451 \u0436\u0438\u0437\u043d\u044c \u0443\u0436\u0435 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430. \u0418 \u0432 \u044d\u0442\u0438 \u0431\u0435\u0437\u0440\u0430\u0434\u043e\u0441\u0442\u043d\u044b\u0435 \u0434\u043d\u0438 \u043c\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0442\u044c Postgresso.<\/i>  <\/p>\n<hr\/>\n<p>  <\/p>\n<h2>Feature Freeze<\/h2>\n<p>  7 \u0430\u043f\u0440\u0435\u043b\u044f \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 <i>\u0417\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/i>. \u0412\u043e\u0448\u0435\u0434\u0448\u0438\u0445 \u043d\u043e\u0432\u0448\u0435\u0441\u0442\u0432 \u043c\u043d\u043e\u0433\u043e. \u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043e\u0431\u0437\u043e\u0440 <i>\u041f\u0430\u0432\u043b\u0430 \u041b\u0443\u0437\u0430\u043d\u043e\u0432\u0430<\/i> \u0432\u044b\u0439\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435.  <\/p>\n<hr\/>\n<p>  \u0413\u043b\u0430\u0432\u043d\u044b\u043c\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0442\u0430\u043b\u0438 2 \u0441\u0435\u0440\u0438\u0438 \u043c\u043e\u0449\u043d\u044b\u0445 \u043f\u0430\u0442\u0447\u0435\u0439, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0432\u0430\u0436\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0435\u0449\u0451 \u043f\u043b\u043e\u0442\u043d\u0435\u0439 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0430\u044e\u0449\u0438\u0435 \u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c SQL \u2014 SQL\/JSON \u0438 MERGE.<\/p>\n<h2>SQL\/JSON<\/h2>\n<p>  \u0412\u043e\u0442 \u0434\u0432\u0430 \u043f\u043e\u0441\u0442\u0430 <a href=\"https:\/\/obartunov.livejournal.com\/\">\u0432 \u0416\u0416<\/a> <i>\u041e\u043b\u0435\u0433\u0430 \u0411\u0430\u0440\u0442\u0443\u043d\u043e\u0432\u0430<\/i>:<\/p>\n<p>  <b><a href=\"https:\/\/obartunov.livejournal.com\/200076.html\">SQL\/JSON standard-2016 conformance for PostgreSQL, Oracle, SQL Server and MySQL<\/a><\/b><\/p>\n<p>  <b><a href=\"https:\/\/obartunov.livejournal.com\/206138.html\">SQL\/JSON in PG15 !<\/a><\/b><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/3j\/at\/0v\/3jat0vtqqfu9_pgmngzwevmorco.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/3j\/at\/0v\/3jat0vtqqfu9_pgmngzwevmorco.jpeg\" data-blurred=\"true\"\/><br \/>  <i>\u0421\u043a\u0440\u0438\u043d \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432 \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 \u041e\u043b\u0435\u0433\u0430 \u0411\u0430\u0440\u0442\u0443\u043d\u043e\u0432\u0430<\/i><\/p>\n<p>  \u041c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0434\u0432\u0443\u043c\u044f \u043f\u043e\u0441\u0442\u0430\u043c\u0438 \u0442\u0440\u0438 \u0433\u043e\u0434\u0430. \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u043e\u043d \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043b 3 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0441\u0435\u0440\u0438\u0438 \u043f\u0430\u0442\u0447\u0435\u0439, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c SQL\/JSON. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u2014 \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0435 \u043a\u043e\u043c\u043c\u0438\u0442\u044b. \u0421\u0443\u0434\u044c\u0431\u0430 \u043f\u0430\u0442\u0447\u0435\u0439 \u0442\u0430\u043a\u043e\u0432\u0430:<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/22\/1471\/\">SQL\/JSON: jsonpath<\/a><\/b> (\u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0447\u0435\u043d\u043e \u043d\u0430 <a href=\"https:\/\/commitfest.postgresql.org\/22\/\">\u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0435 2019-03<\/a>)<br \/>  <b><a href=\"https:\/\/commitfest.postgresql.org\/37\/2901\/\">SQL\/JSON: functions<\/a><\/b> (\u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0447\u0435\u043d\u043e \u043d\u0430 <a href=\"https:\/\/commitfest.postgresql.org\/37\/\">\u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0435 2022-03<\/a>)<br \/>  <b><a href=\"https:\/\/commitfest.postgresql.org\/37\/2902\/\">SQL\/JSON: JSON_TABLE<\/a><\/b> (\u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0447\u0435\u043d\u043e \u043d\u0430 <a href=\"https:\/\/commitfest.postgresql.org\/37\/\">\u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0435 2022-03<\/a>)  <\/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-384125","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/384125","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=384125"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/384125\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=384125"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=384125"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=384125"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}