{"id":353210,"date":"2024-05-20T22:23:29","date_gmt":"2024-05-20T22:23:29","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=353210"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=353210","title":{"rendered":"<span>PostgreSQL 17: \u0427\u0430\u0441\u0442\u044c 1 \u0438\u043b\u0438 \u041a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442 2023-07<\/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\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/r-\/tq\/rx\/r-tqrxtyayipff4rpkmlou76tyg.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/r-\/tq\/rx\/r-tqrxtyayipff4rpkmlou76tyg.jpeg\" data-blurred=\"true\"\/><br \/>  \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u044f\u043c\u0438 \u0438\u0437 \u043c\u0438\u0440\u0430 PostgreSQL. \u0412\u044b\u043f\u0443\u0441\u043a PostgreSQL 16 Release Candidate 1 <a href=\"https:\/\/www.postgresql.org\/message-id\/7e5e8355-3568-7a2b-bcde-3d696482f22e%40postgresql.org\">\u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f<\/a> \u043d\u0430 31 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0438, \u0435\u0441\u043b\u0438 \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0442\u043e 16-\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0432\u044b\u0439\u0434\u0435\u0442 14 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f. <\/p>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c \u0432 16-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u0441\u043b\u0435 \u0430\u043f\u0440\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0437\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0438 \u043a\u043e\u0434\u0430? \u0427\u0442\u043e \u043f\u043e\u043f\u0430\u043b\u043e \u0432 17 \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0430? \u041e\u0431\u043e \u0432\u0441\u0435\u043c \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u0441\u0432\u0435\u0436\u0435\u043c \u043e\u0431\u0437\u043e\u0440\u0435.<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h2 id=\"postgresql-16\">PostgreSQL 16<\/h2>\n<p>  <\/p>\n<p>\u0412 \u043d\u0430\u0447\u0430\u043b\u0435, \u0434\u043b\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0438, \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e 16-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043a \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0430\u043c: <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/681164\/\">2022-07<\/a>, <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/697228\/\">2022-09<\/a>, <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/706098\/\">2022-11<\/a>, <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/718100\/\">2023-01<\/a>, <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/732916\/\">2023-03<\/a>.<\/p>\n<p>  <\/p>\n<p>\u0421 \u0430\u043f\u0440\u0435\u043b\u044f \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435. <\/p>\n<p>  <\/p>\n<p>\u0418 \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u043e\u0442\u0435\u0440\u044c. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0431\u044b\u043b\u0438 \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u044b:<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/706098\/#commit_60684dd8\">MAINTAIN \u2015 \u043d\u043e\u0432\u0430\u044f \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u044f \u0434\u043b\u044f \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446<\/a> (commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/151c22de\">151c22de<\/a>)<\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/718100\/#commit_096dd80f\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<\/a> (commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/b9a7a822\">b9a7a822<\/a>)<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0410 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<p><strong><a href=\"https:\/\/commitfest.postgresql.org\/43\/4116\/\">psql: \\drg \u043d\u043e\u0432\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0447\u043b\u0435\u043d\u0441\u0442\u0432\u0435 \u0432 \u0440\u043e\u043b\u044f\u0445<\/a><\/strong><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/d65ddaca\">d65ddaca<\/a><\/p>\n<p>  <\/p>\n<p>\u041d\u043e\u0432\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 16-\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0438 \u043a\u043e\u0434\u0430. \u041e\u0431\u044b\u0447\u043d\u043e \u0442\u0430\u043a \u043d\u0435 \u0434\u0435\u043b\u0430\u044e\u0442, \u043d\u043e \u044d\u0442\u043e \u043b\u0438\u0448\u044c \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 psql \u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0438\u043c\u0441\u044f \u0432 16-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. <\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0440\u043e\u043b\u044c alice \u0434\u043b\u044f \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u043e\u043b\u0435\u0439:<\/p>\n<p>  <\/p>\n<pre><code class=\"pgsql\">CREATE ROLE alice LOGIN CREATEROLE; \\c - alice<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0443\u0441\u0442\u044c \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0440\u043e\u043b\u0435\u0439 alice \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438 \u043d\u043e\u0432\u043e\u0439 \u0440\u043e\u043b\u0438 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0435\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 SET ROLE:<\/p>\n<p>  <\/p>\n<pre><code class=\"pgsql\">SET createrole_self_grant = 'INHERIT, SET';  CREATE ROLE bob LOGIN;<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u043e\u0432\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \\drg \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0447\u0442\u043e alice \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0432 \u0440\u043e\u043b\u044c bob \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"pgsql\">\\drg alice<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">               List of role grants  Role name | Member of |   Options    | Grantor   -----------+-----------+--------------+----------  alice     | bob       | INHERIT, SET | alice  alice     | bob       | ADMIN        | postgres (2 rows)<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0442\u043c\u0435\u0447\u0430\u0435\u043c, \u0447\u0442\u043e \u0440\u043e\u043b\u044c alice \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0432 \u0440\u043e\u043b\u044c bob \u0434\u0432\u0430\u0436\u0434\u044b. \u0415\u0449\u0435 \u043e\u0434\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 c ADMIN OPTION \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u043e\u0442 \u0438\u043c\u0435\u043d\u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0443\u043f\u0435\u0440\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041e\u043d\u043e \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 alice \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0440\u043e\u043b\u044c\u044e bob. \u0417\u043d\u0430\u0442\u044c \u043a\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u043b \u043e\u0434\u043d\u0443 \u0440\u043e\u043b\u044c \u0432 \u0434\u0440\u0443\u0433\u0443\u044e, \u0432\u0430\u0436\u043d\u043e, \u0442.\u043a. \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0432\u0448\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 REVOKE \u0434\u043b\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0440\u043e\u043b\u044c charlie \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u043d\u043e\u0432\u0443\u044e \u0440\u043e\u043b\u044c \u0432 bob:<\/p>\n<p>  <\/p>\n<pre><code class=\"pgsql\">CREATE ROLE charlie LOGIN; GRANT bob TO charlie WITH ADMIN FALSE, INHERIT FALSE, SET TRUE;  \\drg<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">               List of role grants  Role name | Member of |   Options    | Grantor   -----------+-----------+--------------+----------  alice     | bob       | INHERIT, SET | alice  alice     | bob       | ADMIN        | postgres  alice     | charlie   | INHERIT, SET | alice  alice     | charlie   | ADMIN        | postgres  charlie   | bob       | SET          | alice (5 rows)<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0447\u043b\u0435\u043d\u0441\u0442\u0432\u043e \u0432 \u0440\u043e\u043b\u044f\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u043e\u0441\u044c \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u00abMember of\u00bb \u043a\u043e\u043c\u0430\u043d\u0434\u044b \\du (\u0438\u043b\u0438 \\dg). \u041d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u044d\u0442\u043e\u0442 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043d\u043e\u0432\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u043a\u0442\u043e \u0432\u044b\u0434\u0430\u043b \u0447\u043b\u0435\u043d\u0441\u0442\u0432\u043e \u0438 \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043d\u043e\u0432\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \\drg.<\/p>\n<p>  <\/p>\n<p>\u0410 \u0432 \\du \u0438 \\dg \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0443\u0431\u0440\u0430\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u00abMember of\u00bb:<\/p>\n<p>  <\/p>\n<pre><code class=\"pgsql\">\\du<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">                             List of roles  Role name |                         Attributes                          -----------+------------------------------------------------------------  alice     | Create role  bob       |  charlie   |  postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u043d\u043e\u0432\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u0445 16-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0447\u043b\u0435\u043d\u0441\u0442\u0432\u043e\u043c \u0432 \u0440\u043e\u043b\u044f\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445:<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/697228\/#commit_ce6b672e\">pg_auth_members: \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0447\u043b\u0435\u043d\u0441\u0442\u0432\u0430 \u0432 \u0440\u043e\u043b\u044f\u0445<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/697228\/#commit_e3ce2de0\">pg_auth_members: \u0447\u043b\u0435\u043d\u0441\u0442\u0432\u043e \u0432 \u0440\u043e\u043b\u044f\u0445 \u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/706098\/#commit_3d14e171\">SET ROLE: \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u0440\u043e\u043b\u044c<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/718100\/#commit_cf5eb37c\">\u0420\u043e\u043b\u0438 \u0441 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u043c CREATEROLE<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<p><strong><a href=\"https:\/\/www.postgresql.org\/message-id\/20230430041106.GA2268796%40rfd.leadboat.com\">\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430: io_direct -> debug_io_direct<\/a><\/strong><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/319bae9a\">319bae9a<\/a><\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0446\u0435\u043b\u0435\u0439 \u0432 16-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/732916\/#commit_faeedbce\">\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 io_direct<\/a>. \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u043a \u0436\u0435\u043b\u0430\u043d\u0438\u044e \u0435\u0433\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043b\u0438 \u0432 debug_io_direct.<\/p>\n<p>  <\/p>\n<p><strong><a href=\"https:\/\/www.postgresql.org\/message-id\/696054d1-bc88-b6ab-129a-18b8bce6a6f0@enterprisedb.com\">\u0423\u0434\u0430\u043b\u0435\u043d\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b: lc_collate \u0438 lc_ctype<\/a><\/strong><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/b0f6c437\">b0f6c437<\/a><\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 15-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043b\u044f \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/679264\/#commit_f2553d43\">\u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 ICU<\/a>. \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0435 \u0438 \u043b\u043e\u043a\u0430\u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 pg_database.datlocprovider \u0438 pg_database.daticulocale.<\/p>\n<p>  <\/p>\n<p>\u041d\u043e, \u043f\u043e \u0440\u044f\u0434\u0443 \u043f\u0440\u0438\u0447\u0438\u043d, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 libc \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u0436\u043d\u044b \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 pg_database.datcollate \u0438 pg_database.datctype \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0435\u0441\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043b\u043e\u043a\u0430\u043b\u0438 libc, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0434\u043b\u044f \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0431\u0440\u0430\u043d \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 ICU. \u0410 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b lc_collate \u0438 lc_ctype \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 libc. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043b\u043e\u043a\u0430\u043b\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 lc_ctype \u0438\u043b\u0438 lc_collate \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u041d\u0443\u0436\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 datlocprovider \u0438 daticulocale.<\/p>\n<p>  <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043b\u043e\u043a\u0430\u043b\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b lc_collate \u0438 lc_ctype \u0443\u0434\u0430\u043b\u0438\u043b\u0438. \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043b\u043e\u043a\u0430\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 pg_database \u0438\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \\list \u0432 psql.<\/p>\n<p>  <\/p>\n<p><strong><a href=\"https:\/\/commitfest.postgresql.org\/43\/4042\/\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f: \u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u0432 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0440\u0430\u043d\u0435\u0435 \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b HTML <\/a><\/strong><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/e2922702\">e2922702<\/a><\/p>\n<p>  <\/p>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 HTML \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u044f\u043a\u043e\u0440\u044f \u0434\u043b\u044f \u0441\u0435\u043a\u0446\u0438\u0439 \u0438\u043b\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432 \u0433\u043b\u0430\u0432\u0435 \u00abServer Configuration\u00bb \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439 \u044f\u043a\u043e\u0440\u044c \u0438 \u043d\u0430 \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. \u041d\u043e \u043a\u0430\u043a \u0443\u0437\u043d\u0430\u0442\u044c \u0442\u043e\u0447\u043d\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u0431\u0435\u0437 \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u043d\u0438\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b? <\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 16 \u0432\u0435\u0440\u0441\u0438\u0438 \u0432 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043c\u044b\u0448\u0438 \u043d\u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u043a\u0446\u0438\u0438 \u0438\u043b\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u0430, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0430, \u0441\u043f\u0440\u0430\u0432\u0430 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u043a # \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0433\u0438\u043f\u0435\u0440\u0441\u0441\u044b\u043b\u043a\u043e\u0439.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 <a href=\"https:\/\/www.postgresql.org\/docs\/16\/runtime-config-client.html\">Client Connection Defaults<\/a> \u043d\u0430\u0432\u0435\u0441\u0442\u0438 \u043c\u044b\u0448\u044c \u043d\u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 search_path, \u0442\u043e \u0441\u043f\u0440\u0430\u0432\u0430 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0437\u043d\u0430\u043a # \u0441 \u043f\u0440\u044f\u043c\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u043d\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440:<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/www.postgresql.org\/docs\/16\/runtime-config-client.html#GUC-SEARCH-PATH\">https:\/\/www.postgresql.org\/docs\/16\/runtime-config-client.html#GUC-SEARCH-PATH<\/a><\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u0447\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u043e\u0439.<\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 postgrespro.ru \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0434\u0430\u0432\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u0422\u043e\u043b\u044c\u043a\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0437\u043d\u0430\u043a\u0430 # \u0441 \u043f\u0440\u0430\u0432\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u043e\u043a \u0441\u043e \u0441\u043a\u0440\u0435\u043f\u043a\u043e\u0439 \u0441 \u043b\u0435\u0432\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b.<\/p>\n<p>  <\/p>\n<h2 id=\"postgresql-17\">PostgreSQL 17<\/h2>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a 17-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u0412 \u044d\u0442\u043e\u0442 \u043e\u0431\u0437\u043e\u0440 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0430 \u043f\u043e\u043f\u0430\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f:<\/p>\n<p>  <\/p>\n<p><a href=\"#commit_46ebdfe1\">\u041f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0432 pg_stat_progress_vacuum<\/a><br \/>  <a href=\"#commit_625d5b3c\">\u0418\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0434\u043b\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 GiST \u0438 SP-GiST<\/a><br \/>  <a href=\"#commit_8c852ba9\">\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f-\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438<\/a><br \/>  <a href=\"#commit_edca3424\">\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f: REPLICA IDENTITY FULL \u0438 hash-\u0438\u043d\u0434\u0435\u043a\u0441\u044b<\/a><br \/>  <a href=\"#commit_3f8c98d0\">pg_archivecleanup: &#8212;clean-backup-history<\/a><br \/>  <a href=\"#commit_a14354ca\">\u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 huge_pages_status<\/a><br \/>  <a href=\"#commit_884eee5b\">\u0423\u0434\u0430\u043b\u0435\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 db_user_namespace<\/a><br \/>  <a href=\"#commit_c9af0546\">\u0421\u043e\u0431\u044b\u0442\u0438\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u0445<\/a><br \/>  <a href=\"#commit_19c590f6\">psql: \u0432\u044b\u0432\u043e\u0434 ECHO_HIDDEN \u043e\u0431\u0440\u0430\u043c\u043b\u0435\u043d \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432<\/a><\/p>\n<p>  <a name=\"commit_46ebdfe1\"><\/a>  <\/p>\n<p><strong><a href=\"https:\/\/commitfest.postgresql.org\/43\/3617\/\">\u041f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0432 pg_stat_progress_vacuum<\/a><\/strong><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/46ebdfe1\">46ebdfe1<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/f1889729\">f1889729<\/a><\/p>\n<p>  <\/p>\n<p>\u0412 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/progress-reporting.html#VACUUM-PROGRESS-REPORTING\">pg_stat_progress_vacuum<\/a> \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0434\u0432\u0430 \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430: indexes_total \u0438 indexes_processed. \u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0434\u043b\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0438, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0443\u0436\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e. \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0444\u0430\u0437 \u043e\u0447\u0438\u0441\u0442\u043a\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438: vacuuming indexes \u0438 cleaning up indexes.<\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438. \u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0447\u0435\u0440\u0435\u0437 pg_stat_progress_vacuum \u0432 \u0442\u0430\u043a\u0438\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u043f\u043e\u043c\u043e\u0433\u0430\u043b \u043f\u043b\u043e\u0445\u043e. \u0412\u0435\u0434\u044c \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u0430\u0440\u0442\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0441\u0430\u043c\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0435 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0440\u0430\u0437\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0447\u0442\u043e \u043f\u0440\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e. \u0410 \u0432\u043e\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0444\u0430\u0437\u044b \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0431\u00f3\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u0445\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0431\u044b\u043b \u043d\u0435 \u0432\u0438\u0434\u0435\u043d. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432, \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433, \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043f\u043e \u0441\u0445\u0435\u043c\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e_\u043e\u0447\u0438\u0449\u0435\u043d\u043d\u044b\u0445_\u0441\u0442\u0440\u0430\u043d\u0438\u0446 \/ \u043e\u0431\u0449\u0435\u0435_\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e_\u0441\u0442\u0440\u0430\u043d\u0438\u0446.<\/p>\n<p>  <a name=\"commit_625d5b3c\"><\/a>  <\/p>\n<p><strong><a href=\"https:\/\/commitfest.postgresql.org\/43\/4433\/\">\u0418\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0434\u043b\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 GiST \u0438 SP-GiST<\/a><\/strong><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/625d5b3c\">625d5b3c<\/a><\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/493106\/#commit_d2d8a229\">\u0418\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430<\/a> \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0435\u0449\u0435 \u0432 13-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u041d\u043e \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043e\u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u0430\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438 B-\u0434\u0435\u0440\u0435\u0432\u043e. \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438 GiST \u0438 SP-GiST.<\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0438\u043d\u0434\u0435\u043a\u0441 GiST \u0432 <a href=\"https:\/\/postgrespro.ru\/education\/demodb\">\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u0435<\/a> \u043f\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u043e\u0432:<\/p>\n<p>  <\/p>\n<pre><code class=\"pgsql\">CREATE INDEX ON airports_data USING gist (coordinates);<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0430\u0439\u0434\u0435\u043c 10 \u0440\u0435\u0439\u0441\u043e\u0432 \u0438\u0437 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u043e\u0432, \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u043a \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 (\u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441 \u043d\u0443\u043b\u0435\u0432\u044b\u043c\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438), \u0438 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0434\u0430\u0442\u0435 \u0432\u044b\u043b\u0435\u0442\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"pgsql\">EXPLAIN (costs off) SELECT f.* FROM   flights f          JOIN airports a ON (f.departure_airport=a.airport_code) ORDER BY point(0,0) &lt;-> a.coordinates, f.scheduled_departure LIMIT 10;<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">                                      QUERY PLAN                                       --------------------------------------------------------------------------------------  Limit    ->  Incremental Sort          Sort Key: (('(0,0)'::point &lt;-> ml.coordinates)), f.scheduled_departure          Presorted Key: (('(0,0)'::point &lt;-> ml.coordinates))          ->  Nested Loop                Join Filter: (ml.airport_code = f.departure_airport)                ->  Index Scan using airports_data_coordinates_idx on airports_data ml                      Order By: (coordinates &lt;-> '(0,0)'::point)                ->  Materialize                      ->  Seq Scan on flights f (10 rows)<\/code><\/pre>\n<p>  <\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430\u043c \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d, \u0430 \u0432\u043e\u0442 \u0443\u0437\u0435\u043b Incremental Sort \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c GiST \u0432 \u043f\u043b\u0430\u043d\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0438 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0443\u0432\u0438\u0434\u0435\u0442\u044c.<\/p>\n<p>  <a name=\"commit_8c852ba9\"><\/a>  <\/p>\n<p><strong><a href=\"https:\/\/commitfest.postgresql.org\/43\/4065\/\">\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f-\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438<\/a><\/strong><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/8c852ba9\">8c852ba9<\/a><\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f-\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. <\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0433\u043e\u0432\u043e\u0440\u043d\u044b\u0445 \u0441 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u043e \u043d\u043e\u043c\u0435\u0440\u0443 \u043a\u043e\u043c\u043d\u0430\u0442\u044b:<\/p>\n<p>  <\/p>\n<pre><code class=\"pgsql\">CREATE TABLE booking(     room integer,     meeting_id integer,     during tstzrange NOT NULL,     CONSTRAINT bookings_pk PRIMARY KEY (room, meeting_id) ) PARTITION BY RANGE(room);  CREATE TABLE booking_1_10     PARTITION OF booking FOR VALUES FROM (1) TO (10); CREATE TABLE booking_11_20     PARTITION OF booking FOR VALUES FROM (11) TO (20);<\/code><\/pre>\n<p>  <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u044b\u043b\u043e \u0434\u0432\u0430\u0436\u0434\u044b \u0437\u0430\u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u043a\u043e\u043c\u043d\u0430\u0442\u0443, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435-\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u041a\u0430\u043a \u0438 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u043a\u043b\u044e\u0447\u0430 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"pgsql\">CREATE EXTENSION btree_gist;  ALTER TABLE booking ADD CONSTRAINT no_intersect     EXCLUDE USING gist(room WITH =, during WITH &amp;&amp;);<\/code><\/pre>\n<p>  <\/p>\n<p>\u0420\u0430\u0437\u043d\u044b\u0435 \u043a\u043e\u043c\u043d\u0430\u0442\u044b \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0435\u043a\u0446\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e\u0436\u0435 \u0432\u0440\u0435\u043c\u044f:<\/p>\n<p>  <\/p>\n<pre><code class=\"pgsql\">INSERT INTO booking(room, meeting_id, during) VALUES     (1, 1, '[today 13:00,today 16:00)'::tstzrange),     (11, 1, '[today 13:00,today 16:00)'::tstzrange);<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">INSERT 0 2<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0437\u0430\u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u043a\u043e\u043c\u043d\u0430\u0442\u0443 \u043d\u0430 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"pgsql\">INSERT INTO booking(room, meeting_id, during)     VALUES (1, 2, '[today 14:00,today 18:00)'::tstzrange);<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">ERROR:  conflicting key value violates exclusion constraint \"booking_1_10_room_during_excl\" DETAIL:  Key (room, during)=(1, [\"2023-11-12 14:00:00+03\",\"2023-11-12 18:00:00+03\")) conflicts with existing key (room, during)=(1, [\"2023-11-12 13:00:00+03\",\"2023-11-12 16:00:00+03\")).<\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>[2023.11.12] \u0414\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f-\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0441\u0442\u043e\u043b\u0431\u0435\u0446 meeting_id. \u0421\u043f\u0430\u0441\u0438\u0431\u043e <a href=\"https:\/\/habr.com\/ru\/users\/nvv\/\" class=\"user_link\">nvv<\/a> \u0437\u0430 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u0443\u044e \u043d\u0435\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435.<\/p><\/blockquote>\n<p>  <a name=\"commit_edca3424\"><\/a>  <\/p>\n<p><strong><a href=\"https:\/\/commitfest.postgresql.org\/43\/4415\/\">\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f: REPLICA IDENTITY FULL \u0438 hash-\u0438\u043d\u0434\u0435\u043a\u0441\u044b<\/a><\/strong><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/edca3424\">edca3424<\/a><\/p>\n<p>  <\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/732916\/#commit_89e46da5\">\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u043d\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0435<\/a> \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432 16-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u041d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0442\u0438\u043f\u0430 B-\u0434\u0435\u0440\u0435\u0432\u043e. \u0412 17-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0442\u0438\u043f\u0430 hash.<\/p>\n<p>  <a name=\"commit_3f8c98d0\"><\/a>  <\/p>\n<p><strong><a href=\"https:\/\/commitfest.postgresql.org\/43\/4298\/\">pg_archivecleanup: &#8212;clean-backup-history<\/a><\/strong><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/dd7c60f1\">dd7c60f1<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/4a7556f7\">4a7556f7<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/3f8c98d0\">3f8c98d0<\/a><\/p>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043c\u043c\u0438\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u043c\u043c\u0438\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0435\u0442\u0438\u0439 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u0437\u0430\u0434\u0443\u043c\u043a\u0443, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212;clean-backup-history. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0440\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u0439. \u0420\u0430\u043d\u044c\u0448\u0435 \u044d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0446\u0435\u043b\u0435\u0439.<\/p>\n<p>  <a name=\"commit_a14354ca\"><\/a>  <\/p>\n<p><strong><a href=\"https:\/\/commitfest.postgresql.org\/43\/3310\/\">\u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 huge_pages_status<\/a><\/strong><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/a14354ca\">a14354ca<\/a><\/p>\n<p>  <\/p>\n<p>\u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/runtime-config-preset.html#GUC-HUGE-PAGES-STATUS\">huge_pages_status<\/a> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446:<\/p>\n<p>  <\/p>\n<pre><code class=\"pgsql\">\\dconfig huge*<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">List of configuration parameters      Parameter     | Value -------------------+-------  huge_pages        | try  huge_page_size    | 2MB  huge_pages_status | off (3 rows)<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u0441\u043c\u043e\u0433 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0434 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<p>  <a name=\"commit_884eee5b\"><\/a>  <\/p>\n<p><strong><a href=\"https:\/\/commitfest.postgresql.org\/43\/4430\/\">\u0423\u0434\u0430\u043b\u0435\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 db_user_namespace<\/a><\/strong><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/884eee5b\">884eee5b<\/a><\/p>\n<p>  <\/p>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043a \u0431\u0430\u0437\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445. 21 \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u044b\u043b\u0430 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043c\u0435\u0440\u044b, \u043d\u043e, \u043f\u043e\u0445\u043e\u0436\u0435, \u0442\u0430\u043a \u0438 \u043d\u0435 \u0431\u044b\u043b\u0430 \u0432\u043e\u0441\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0430.<\/p>\n<p>  <a name=\"commit_c9af0546\"><\/a>  <\/p>\n<p><strong><a href=\"https:\/\/commitfest.postgresql.org\/43\/4368\/\">\u0421\u043e\u0431\u044b\u0442\u0438\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u0445<\/a><\/strong><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/c9af0546\">c9af0546<\/a><\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f. \u0421\u0435\u0439\u0447\u0430\u0441 \u0432\u0441\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043e\u0434\u0438\u043d <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/monitoring-stats.html#WAIT-EVENT-EXTENSION-TABLE\">\u0442\u0438\u043f \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f<\/a>: Extension. \u041d\u043e \u0435\u0441\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439, \u0442\u043e \u0438\u0437 pg_stat_activity \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f contrib \u0434\u043b\u044f \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u043d\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f.<\/p>\n<p>  <a name=\"commit_19c590f6\"><\/a>  <\/p>\n<p><strong><a href=\"https:\/\/commitfest.postgresql.org\/43\/4402\/\">psql: \u0432\u044b\u0432\u043e\u0434 ECHO_HIDDEN \u043e\u0431\u0440\u0430\u043c\u043b\u0435\u043d \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432<\/a><\/strong><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/19c590f6\">19c590f6<\/a><\/p>\n<p>  <\/p>\n<p>\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 ECHO_HIDDEN \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0438\u043b\u0438 \u043e\u0434\u043d\u043e\u0438\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0432\u044b\u0432\u043e\u0434\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 SQL, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445 psql:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">$ psql --echo-hidden -c '\\db';<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/******** QUERY *********\/ SELECT spcname AS \"Name\",   pg_catalog.pg_get_userbyid(spcowner) AS \"Owner\",   pg_catalog.pg_tablespace_location(oid) AS \"Location\" FROM pg_catalog.pg_tablespace ORDER BY 1; \/************************\/         List of tablespaces     Name    |  Owner   | Location ------------+----------+----------  pg_default | postgres |  pg_global  | postgres | (2 rows)<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u0442\u0440\u043e\u043a\u0438 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u044b \u043a\u0430\u043a \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438, \u0447\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u0445 \u0438\u043b\u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0438\u0441\u044c \u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0437\u0432\u0435\u0437\u0434\u043e\u0447\u043a\u0430\u043c\u0438.<\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0438\u0435 \u0436\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 &#8212;log-file \u0438 &#8212;single-step.<\/p>\n<p>  <\/p>\n<hr\/>\n<p>  <\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0451. \u0416\u0434\u0435\u043c \u0432\u044b\u0445\u043e\u0434\u0430 PostgreSQL 16 \u0438 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0430 17-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438.<\/p>\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\/757028\/\"> https:\/\/habr.com\/ru\/articles\/757028\/<\/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\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/r-\/tq\/rx\/r-tqrxtyayipff4rpkmlou76tyg.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/r-\/tq\/rx\/r-tqrxtyayipff4rpkmlou76tyg.jpeg\" data-blurred=\"true\"\/><br \/>  \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u044f\u043c\u0438 \u0438\u0437 \u043c\u0438\u0440\u0430 PostgreSQL. \u0412\u044b\u043f\u0443\u0441\u043a PostgreSQL 16 Release Candidate 1 <a href=\"https:\/\/www.postgresql.org\/message-id\/7e5e8355-3568-7a2b-bcde-3d696482f22e%40postgresql.org\">\u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f<\/a> \u043d\u0430 31 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0438, \u0435\u0441\u043b\u0438 \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0442\u043e 16-\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0432\u044b\u0439\u0434\u0435\u0442 14 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f. <\/p>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c \u0432 16-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u0441\u043b\u0435 \u0430\u043f\u0440\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0437\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0438 \u043a\u043e\u0434\u0430? \u0427\u0442\u043e \u043f\u043e\u043f\u0430\u043b\u043e \u0432 17 \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0430? \u041e\u0431\u043e \u0432\u0441\u0435\u043c \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u0441\u0432\u0435\u0436\u0435\u043c \u043e\u0431\u0437\u043e\u0440\u0435.<\/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-353210","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/353210","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=353210"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/353210\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=353210"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=353210"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=353210"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}