{"id":321520,"date":"2021-04-15T21:00:13","date_gmt":"2021-04-15T21:00:13","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=321520"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=321520","title":{"rendered":"PostgreSQL 14: \u0427\u0430\u0441\u0442\u044c 5 \u0438\u043b\u0438 \u00ab\u0432\u0435\u0441\u0435\u043d\u043d\u0438\u0435 \u0437\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0438\u00bb (\u041a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442 2021-03)"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">8 \u0430\u043f\u0440\u0435\u043b\u044f 2021 \u0433. \u0432 15:00 \u043f\u043e \u043c\u043e\u0441\u043a\u043e\u0432\u0441\u043a\u043e\u043c\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f \u043c\u0430\u0440\u0442\u043e\u0432\u0441\u043a\u0438\u0439 \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442, \u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0438\u043c \u0438 \u043f\u0440\u0438\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 PostgreSQL 14. <\/p>\n<p>  \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0432\u0441\u0451 \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043e \u043f\u0435\u0440\u0432\u044b\u0445 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u0441\u0435\u0440\u0438\u0438: <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/510124\/\">\u0438\u044e\u043b\u044c\u0441\u043a\u0438\u0439<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/522428\/\">\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c\u0441\u043a\u0438\u0439<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/533058\/\">\u043d\u043e\u044f\u0431\u0440\u044c\u0441\u043a\u0438\u0439<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/541252\/\">\u044f\u043d\u0432\u0430\u0440\u0441\u043a\u0438\u0439<\/a>.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u043f\u043e\u0439\u0434\u0435\u0442 \u0440\u0435\u0447\u044c \u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c, \u043c\u0430\u0440\u0442\u043e\u0432\u0441\u043a\u043e\u043c. \u0417\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e, \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u0430\u044f. \u041d\u043e \u043f\u043b\u043e\u0445\u043e \u043b\u0438 \u044d\u0442\u043e? \u0427\u0435\u043c \u0434\u043b\u0438\u043d\u043d\u0435\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u043e\u0432\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439, \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435 PostgreSQL 14! \u042d\u0442\u043e \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u0410 \u0441 \u0434\u0440\u0443\u0433\u043e\u0439, \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0441\u0451 \u043f\u043e\u0434\u0440\u044f\u0434 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u0434\u043e \u043a\u043e\u043d\u0446\u0430. \u0422\u0435\u043a\u0441\u0442 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0430\u0442\u0447\u0435\u0439. \u0412 \u043b\u044e\u0431\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f, \u0441 \u043b\u044e\u0431\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0447\u0430\u0442\u044c.<\/p>\n<p>  \u0410 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0441\u0442\u044c \u043e \u0447\u0435\u043c. \u041d\u0435 \u0432\u0435\u0440\u0438\u0442\u0435? \u0412\u043e\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u0437\u0430\u0441\u044b\u043f\u043a\u0443:<\/p>\n<ul>\n<li>\u041c\u043e\u0436\u0435\u0442 \u043b\u0438 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445?<\/li>\n<li>\u041a\u0430\u043a \u043d\u0430\u0439\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438\u0437 pg_stat_activity \u0432 pg_stat_statements?<\/li>\n<li>\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0438 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0441\u0435\u043a\u0446\u0438\u0438 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435?<\/li>\n<li>\u041a\u0430\u043a \u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0430 \u043f\u0440\u043e\u0434 \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043c\u043e\u0433\u043b\u0438 \u0432\u0441\u0451 \u0432\u0438\u0434\u0435\u0442\u044c, \u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u043e\u0433\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c?<\/li>\n<li>\u041f\u043e\u0447\u0435\u043c\u0443 VACUUM \u043f\u043e\u0441\u043b\u0435 COPY FREEZE \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u0447\u0442\u043e \u0441 \u044d\u0442\u0438\u043c \u0434\u0435\u043b\u0430\u0442\u044c?<\/li>\n<li>\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0441\u0436\u0438\u043c\u0430\u0442\u044c TOAST \u0447\u0435\u043c-\u0442\u043e \u043a\u0440\u043e\u043c\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0433\u043e zlib?<\/li>\n<li>\u041a\u0430\u043a \u043f\u043e\u043d\u044f\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043b\u0438\u0442\u0441\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u0430\u044f \u0432 pg_locks?<\/li>\n<li>\u0414\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0443\u0436\u043d\u044b CYCLE \u0438 SEARCH \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443?<\/li>\n<li>\u0422\u0435\u043a\u0441\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0430 \u043a\u0430\u043a\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 (\u043a\u0440\u043e\u043c\u0435 C) \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435?<\/li>\n<\/ul>\n<p>  \u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433<\/h2>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2069\/\">\u0415\u0434\u0438\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u044f\u0434\u0440\u0435 \u0438 \u043c\u043e\u0434\u0443\u043b\u044f\u0445<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/5fd9dfa5\">5fd9dfa5<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/4f0b0966\">4f0b0966<\/a><\/p>\n<p>  \u041a\u0430\u043a \u0436\u0435 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c pg_stat_activity \u0438 pg_stat_statements? \u0422\u0430\u043a \u0432\u0435\u0434\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u043e:<\/p>\n<pre><code class=\"pgsql\">SELECT a.*, s.*  FROM   pg_stat_activity a         JOIN pg_stat_statements s USING (queryid); <\/code><\/pre>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443. \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 pg_stat_statements \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 queryid. \u041e\u0434\u043d\u0430\u043a\u043e pg_stat_statements \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435, \u0430 \u043d\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u044f\u0434\u0440\u0430, \u0434\u0430 \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0445\u0435\u0448\u0430 \u0434\u043b\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0435 \u0431\u044b\u043b \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u043c. \u0412 \u043e\u0431\u0449\u0435\u043c \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0432 pg_stat_activity \u0434\u043e \u043f\u043e\u0440\u044b \u0434\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0440\u044b\u0432\u0430\u043b\u0438\u0441\u044c.<\/p>\n<p>  \u0418 \u0432\u043e\u0442 \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u043b\u0438 \u0432 \u044f\u0434\u0440\u043e. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e pg_stat_statements \u0431\u0443\u0434\u0435\u0442 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0441\u0432\u043e\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440. <\/p>\n<p>  \u041d\u043e \u0441\u0442\u043e\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <i>compute_query_id<\/i>, \u043a\u0430\u043a pg_stat_statements \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430, \u0430 \u0432 pg_stat_activity \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 queryid \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0435\u043c \u0436\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c:<\/p>\n<pre><code class=\"pgsql\">SHOW compute_query_id;<\/code><\/pre>\n<pre><code class=\"plaintext\"> compute_query_id ------------------  off <\/code><\/pre>\n<p>  \u041d\u0430\u0439\u0434\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 pg_stat_activity:<\/p>\n<pre><code class=\"pgsql\">SELECT queryid,query FROM   pg_stat_activity WHERE pid=pg_backend_pid();<\/code><\/pre>\n<pre><code class=\"plaintext\"> queryid |            query             ---------+-----------------------------          | SELECT queryid,query       +          | FROM   pg_stat_activity    +          | WHERE pid=pg_backend_pid(); <\/code><\/pre>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043a\u043b\u044e\u0447\u0438\u043c <i>compute_query_id<\/i> \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0449\u0435 \u0440\u0430\u0437. \u0421\u0443\u043f\u0435\u0440\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u0435\u0430\u043d\u0441\u0430:<\/p>\n<pre><code class=\"pgsql\">SET compute_query_id=on;  SELECT queryid,query FROM   pg_stat_activity WHERE pid=pg_backend_pid();<\/code><\/pre>\n<pre><code class=\"plaintext\">       queryid       |            query             ---------------------+-----------------------------  5840773237036126161 | SELECT queryid,query       +                      | FROM   pg_stat_activity    +                      | WHERE pid=pg_backend_pid(); <\/code><\/pre>\n<p>  \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f. \u0427\u0442\u043e \u0436\u0435 \u0435\u043c\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 pg_stat_statements?<\/p>\n<pre><code class=\"pgsql\">SELECT queryid, query FROM   pg_stat_statements WHERE  queryid = 5840773237036126161\\gx<\/code><\/pre>\n<pre><code class=\"plaintext\">-[ RECORD 1 ]------------------------------------------------------------- queryid | 5840773237036126161 query   | SELECT queryid,query FROM pg_stat_activity WHERE pid=pg_backend_pid() <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441. \u0422\u0430\u043a \u0447\u0442\u043e \u0434\u0432\u0430 \u044d\u0442\u0438\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u043f\u043e queryid.<\/p>\n<p>  \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u0435\u043d \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0434\u0438\u043d\u044b\u0439, \u0432\u044b\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c. \u042d\u0442\u043e \u043a\u0440\u0443\u0442\u043e!<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043c\u043e\u0436\u043d\u043e \u0432 \u043f\u043b\u0430\u043d\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430:<\/p>\n<pre><code class=\"pgsql\">EXPLAIN (VERBOSE, COSTS OFF) SELECT queryid,query FROM   pg_stat_activity WHERE pid=pg_backend_pid();<\/code><\/pre>\n<pre><code class=\"plaintext\">                      QUERY PLAN                       ------------------------------------------------------  Function Scan on pg_catalog.pg_stat_get_activity s    Output: s.queryid, s.query    Function Call: pg_stat_get_activity(NULL::integer)    Filter: (s.pid = pg_backend_pid())  Query Identifier: 5840773237036126161 <\/code><\/pre>\n<p>  \u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0436\u0443\u0440\u043d\u0430\u043b \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043d\u043e\u0432\u0430\u044f \u0441\u043f\u0435\u0446\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c %Q \u0432 <i>log_line_prefix<\/i>.<\/p>\n<p>  \u0415\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043d\u044e\u0430\u043d\u0441\u043e\u0432 \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u043e\u0433\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430. \u0414\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434 DML \u0445\u0435\u0448 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u0430\u043f\u0430 \u0440\u0430\u0437\u0431\u043e\u0440\u0430, \u0434\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 (\u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0445) \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044e. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434 DML \u0445\u0435\u0448 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0430 \u043d\u0435 \u043e\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0434\u0432\u0430\u0436\u0434\u044b, \u043d\u043e \u043c\u0435\u0436\u0434\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438 \u0437\u0430\u043d\u043e\u0432\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0441\u044f \u0434\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/pgstatstatements.html\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a> \u043d\u0430 pg_stat_statements. <\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2896\/\">pg_stat_statements: toplevel<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/6b4d23fe\">6b4d23fe<\/a><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 pg_stat_statements.track = &#8216;all&#8217; \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0438 \u043f\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432\u0435\u0440\u0445\u043d\u0435\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u043c \u0438\u043b\u0438 \u043e\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0441\u044f \u0438\u0437 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>  \u041d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 toplevel \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE t ();  SELECT pg_stat_statements_reset(); SET pg_stat_statements.track = 'all';  TRUNCATE t; DO 'BEGIN TRUNCATE t; END;';  SELECT query, toplevel, calls  FROM   pg_stat_statements WHERE  query LIKE '%TRUNCATE%';<\/code><\/pre>\n<pre><code class=\"plaintext\">            query            | toplevel | calls -----------------------------+----------+-------  TRUNCATE t                  | f        |     1  DO 'BEGIN TRUNCATE t; END;' | t        |     1  TRUNCATE t                  | t        |     1 <\/code><\/pre>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2859\/\">pg_stat_wal: \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u043e \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u0434\u0438\u0441\u043a\u043e\u043c<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/ff99918c\">ff99918c<\/a><\/p>\n<p>  \u0415\u0449\u0435 \u043e\u0434\u043d\u043e <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/533058\/#commit_8d9a9359\">\u043d\u043e\u0432\u043e\u0435<\/a> \u0434\u043b\u044f 14 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 pg_stat_wal \u043e\u0431\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c.<\/p>\n<p>  \u0421\u0431\u0440\u043e\u0441\u0438\u043c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 (SELECT pg_stat_reset_shared(&#8216;wal&#8217;)), \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <i>track_wal_io_timing<\/i> \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c <a href=\"https:\/\/postgrespro.ru\/education\/demodb\">\u0434\u0435\u043c\u043e-\u0431\u0430\u0437\u0443<\/a> \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"pgsql\">SELECT * FROM pg_stat_wal\\gx<\/code><\/pre>\n<pre><code class=\"plaintext\">-[ RECORD 1 ]----+------------------------------ wal_records      | 756763 wal_fpi          | 455817 wal_bytes        | 4719435190 wal_buffers_full | 159387 wal_write        | 163909 wal_sync         | 4186 wal_write_time   | 3211.339 wal_sync_time    | 118864.601 stats_reset      | 2021-04-12 12:50:30.878238+03 <\/code><\/pre>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b. wal_write_time \u0438 wal_sync_time \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0431\u044b\u043b\u043e \u0437\u0430\u0442\u0440\u0430\u0447\u0435\u043d\u043e \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0431\u0443\u0444\u0435\u0440\u043e\u0432 WAL \u043d\u0430 \u0434\u0438\u0441\u043a \u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0441 \u0434\u0438\u0441\u043a\u043e\u043c (fsync). \u0410 \u0441\u0442\u043e\u043b\u0431\u0446\u044b wal_write \u0438 wal_sync \u2015 \u044d\u0442\u043e \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0438: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0431\u0443\u0444\u0435\u0440\u044b WAL \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043d\u0430 \u0434\u0438\u0441\u043a \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0430\u0441\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f (fsync).<\/p>\n<p>  \u0421\u0447\u0435\u0442\u0447\u0438\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u043f\u0440\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c <i>track_wal_io_timing<\/i>. \u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0432\u043b\u0438\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 wal_write_time \u0438 wal_sync_time. \u041d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u044b\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2799\/\">\u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0441\u0431\u043e\u0440\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0438 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0447\u0438\u0441\u0442\u043a\u0438<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/c6fc50cb\">c6fc50cb<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/94d13d47\">94d13d47<\/a><\/p>\n<p>  ANALYZE \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 posix_fadvise, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 linux. \u0412\u044b\u0437\u043e\u0432 posix_fadvise \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043a\u0430\u043a\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u044b \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f, \u0430 \u044d\u0442\u043e \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0445 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c.<\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e (\u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u043c\u043c\u0438\u0442), \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0432 \u0436\u0443\u0440\u043d\u0430\u043b \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0432\u0432\u043e\u0434\u0435\/\u0432\u044b\u0432\u043e\u0434\u0435 (\u0435\u0441\u043b\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d <i>track_io_timing<\/i>). \u0410 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0432\u044b\u0432\u043e\u0434 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u043b\u0438 \u0442\u043e\u0439 \u0436\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439, \u0447\u0442\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0438 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0438:<\/p>\n<pre><code class=\"plaintext\">2021-03-30 16:32:00.534 MSK [28993] LOG:  automatic analyze of table &quot;demo.bookings.bookings&quot;     buffer usage: 10423 hits, 16704 misses, 5 dirtied     avg read rate: 138.978 MB\/s, avg write rate: 0.042 MB\/s     I\/O Timings: read=58.504 write=0.175     system usage: CPU: user: 0.41 s, system: 0.05 s, elapsed: 0.93 s <\/code><\/pre>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a\u0430 system usage.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2978\/\">log_connections: \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0432\u0448\u0435\u043c\u0441\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/9afffcb8\">9afffcb8<\/a><\/p>\n<p>  \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0432\u043d\u0435\u0448\u043d\u0435\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 PostgreSQL. \u0410 \u0431\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u043a\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0434 postgres.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c <i>log_connections<\/i>, \u0442\u043e \u0432 \u0436\u0443\u0440\u043d\u0430\u043b \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c peer-\u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u041e\u0421 pluzanov \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b\u0441\u044f \u043a\u0430\u043a postgres:<\/p>\n<p>  pg_hba.conf<\/p>\n<pre><code class=\"plaintext\">local     all     all         peer map=m1 <\/code><\/pre>\n<p>  pg_ident.conf<\/p>\n<pre><code class=\"plaintext\">m1     pluzanov     postgres <\/code><\/pre>\n<p>  \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c <i>log_connections<\/i> \u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u0436\u0443\u0440\u043d\u0430\u043b \u0441\u0435\u0440\u0432\u0435\u0440\u0430:<\/p>\n<pre><code class=\"plaintext\">LOG:  connection received: host=[local] LOG:  connection authenticated: identity=&quot;pluzanov&quot; method=peer (\/home\/pluzanov\/pg14\/data\/pg_hba.conf:84) LOG:  connection authorized: user=postgres database=postgres application_name=psql <\/code><\/pre>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2711\/\">\u0410\u043d\u0430\u043b\u0438\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/43620e32\">43620e32<\/a><\/p>\n<p>  \u041e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 14 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 pg_backend_memory_contexts, \u0443\u0436\u0435 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/522428\/#commit_3e98c0ba\">\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c<\/a> \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c\u0441\u043a\u043e\u043c \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0435. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0430 \u0447\u0442\u043e \u0440\u0430\u0441\u0445\u043e\u0434\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b. <\/p>\n<p>  \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b\u0432\u0435\u0434\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u0443\u044e \u0438\u0442\u043e\u0433\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443:<\/p>\n<pre><code class=\"pgsql\">SELECT * FROM pg_backend_memory_contexts LIMIT 1 \\gx<\/code><\/pre>\n<pre><code class=\"plaintext\">-[ RECORD 1 ]-+----------------- name          | TopMemoryContext ident         | parent        | level         | 0 total_bytes   | 80776 total_nblocks | 6 free_bytes    | 11984 free_chunks   | 12 used_bytes    | 68792 <\/code><\/pre>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u0446\u0435\u043b\u0435\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0443 \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043d\u0435 \u043e \u0441\u0432\u043e\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435, \u0430 \u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u0412\u044b\u0437\u043e\u0432 \u043d\u043e\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 pg_log_backend_memory_contexts \u0441 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u0439 \u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0432 \u0436\u0443\u0440\u043d\u0430\u043b \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430\u0445 \u043f\u0430\u043c\u044f\u0442\u0438. <\/p>\n<p>  \u0418\u0437 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0435\u0430\u043d\u0441\u0430 \u0441\u0443\u043f\u0435\u0440\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c:<\/p>\n<pre><code class=\"pgsql\">SELECT pg_log_backend_memory_contexts(3003); <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u0436\u0443\u0440\u043d\u0430\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<pre><code class=\"plaintext\">LOG:  logging memory contexts of PID 3003 LOG:  level: 0; TopMemoryContext: 80776 total in 6 blocks; 14784 free (19 chunks); 65992 used ... <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0438\u0441\u044c \u0432 \u0436\u0443\u0440\u043d\u0430\u043b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u043e\u0442\u043d\u0435\u0439 \u0441\u0442\u0440\u043e\u043a.<\/p>\n<p>  \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u043c\u0435\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c. \u041d\u043e \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u043d\u0435\u0440\u0435\u0448\u0435\u043d\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2883\/\">pg_locks.waitstart \u2015 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/46d6e5f5\">46d6e5f5<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/f05ed5a5\">f05ed5a5<\/a><\/p>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 pg_locks \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u2015 waitstart. \u0414\u043b\u044f \u0441\u0442\u0440\u043e\u043a, \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0438\u0445 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 (granted=false), \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0441 \u043a\u0430\u043a\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u0435\u0430\u043d\u0441 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443:<\/p>\n<pre><code class=\"pgsql\">BEGIN; LOCK TABLE tickets; <\/code><\/pre>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u0435\u0430\u043d\u0441 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u044d\u0442\u043e\u0439 \u0436\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438 \u00ab\u043f\u043e\u0432\u0438\u0441\u0430\u0435\u0442\u00bb:<\/p>\n<pre><code class=\"pgsql\">SELECT * FROM tickets LIMIT 1; <\/code><\/pre>\n<p>  \u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u043d\u0435\u0445\u0438\u0442\u0440\u044b\u043c\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043b\u0438\u0442\u0441\u044f \u044d\u0442\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430:<\/p>\n<pre><code class=\"pgsql\">SELECT *, now()-waitstart AS wait_time FROM   pg_locks WHERE  NOT granted\\gx<\/code><\/pre>\n<pre><code class=\"plaintext\">-[ RECORD 1 ]------+------------------------------ locktype           | relation database           | 16384 relation           | 16439 page               | tuple              | virtualxid         | transactionid      | classid            | objid              | objsubid           | virtualtransaction  | 5\/31 pid                | 8525 mode               | AccessShareLock granted            | f fastpath           | f waitstart          | 2021-02-25 12:21:53.236232+03 wait_time          | 00:00:03.106643 <\/code><\/pre>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 waitstart \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043f\u043e\u043b\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a \u0432 pg_locks \u0441 granted=false \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2977\/\">\u0423\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0432 pg_stat_progress_copy<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/9d2d4570\">9d2d4570<\/a><\/p>\n<p>  \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 pg_stat_progress_copy \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0432 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/541252\/#commit_8a4f618e\">\u044f\u043d\u0432\u0430\u0440\u0441\u043a\u043e\u043c \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0435<\/a>, \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0448\u043b\u0430 \u043f\u043e\u0440\u0430 \u0442\u043e\u043d\u043a\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u0412 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0438\u043b\u0438 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435, \u043e\u0442\u043a\u0443\u0434\u0430 \u0438\u043b\u0438 \u043a\u0443\u0434\u0430 (\u0444\u0430\u0439\u043b, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0432\u0432\u043e\u0434\/\u0432\u044b\u0432\u043e\u0434), \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0444\u0440\u0430\u0437\u043e\u0439 WHERE \u0437\u0430\u043f\u0438\u0441\u0435\u0439.<\/p>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0440\u0435\u0439\u0441\u0430\u043c\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440\u0430. <\/p>\n<pre><code class=\"pgsql\">CREATE TABLE flights_krr (LIKE flights); <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0435\u0451 \u0431\u0443\u0434\u0435\u043c \u0438\u0437 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0432\u0441\u0435\u0445 \u0440\u0435\u0439\u0441\u0430\u0445.<\/p>\n<pre><code class=\"pgsql\">COPY flights TO '\/home\/pluzanov\/pg14\/flights.txt'; <\/code><\/pre>\n<p>  \u0422\u0430\u0431\u043b\u0438\u0446\u0430 flights \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u0431\u044b \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0445\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u0435\u0434\u043b\u0438\u043c \u0432\u0441\u0442\u0430\u0432\u043a\u0443:<\/p>\n<pre><code class=\"pgsql\">CREATE FUNCTION slow_ins() RETURNS TRIGGER AS $$ BEGIN     PERFORM pg_sleep(0.1);     RETURN NEW; END;$$ LANGUAGE plpgsql;  CREATE TRIGGER flights_krr_slow_ins     BEFORE INSERT ON flights_krr     FOR EACH ROW EXECUTE FUNCTION slow_ins(); <\/code><\/pre>\n<p>  \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440\u0443:<\/p>\n<pre><code class=\"pgsql\">COPY flights_krr FROM '\/home\/pluzanov\/pg14\/flights.txt'     WHERE departure_airport = 'KRR'; <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043d\u0435 \u0442\u043e\u0440\u043e\u043f\u044f\u0441\u044c, \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0441\u0435\u0430\u043d\u0441\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0445\u043e\u0434\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"pgsql\">SELECT * FROM pg_stat_progress_copy\\gx<\/code><\/pre>\n<pre><code class=\"plaintext\">-[ RECORD 1 ]----+---------- pid              | 29657 datid            | 16384 datname          | demo relid            | 16720 command          | COPY FROM type             | FILE bytes_processed  | 19333118 bytes_total      | 26338755 tuples_processed | 1385 tuples_excluded  | 156235 <\/code><\/pre>\n<p>  \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u0441\u0430\u043c\u0438 \u0437\u0430 \u0441\u0435\u0431\u044f, \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0441 \u043d\u0438\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0432 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/progress-reporting.html#COPY-PROGRESS-REPORTING\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>.<\/p>\n<h2>\u0418\u043d\u0434\u0435\u043a\u0441\u044b<\/h2>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2523\/\">\u0418\u043d\u0434\u0435\u043a\u0441\u044b BRIN: \u043d\u043e\u0432\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 bloom \u0438 multi-minmax<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/ab596105\">ab596105<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/77b88cd1\">77b88cd1<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/a681e3c1\">a681e3c1<\/a><\/p>\n<p>  \u0423 <a href=\"https:\/\/habr.com\/ru\/users\/erogov\/\">\u0415\u0433\u043e\u0440\u0430 \u0420\u043e\u0433\u043e\u0432\u0430<\/a> \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f \u0441\u0442\u0430\u0442\u0435\u0439 \u043e\u0431 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0445 \u0432 PostgreSQL. \u0412 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043f\u0440\u043e <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/346460\/\">BRIN<\/a> \u0438 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/349224\/\">Bloom<\/a>. \u0415\u0433\u043e\u0440 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u043b\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u043f\u0430\u0442\u0447\u0435\u0439, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c BRIN. \u0415\u043c\u0443 \u0438 \u0441\u043b\u043e\u0432\u043e.<\/p>\n<p>  \u041c\u0435\u0442\u043e\u0434 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 BRIN \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0442\u0430\u0431\u043b\u0438\u0446 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0438 \u0443\u0434\u043e\u0431\u0435\u043d \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0441\u043a\u043e\u0440\u044f\u0442\u044c \u043f\u043e\u0438\u0441\u043a, \u0438\u043c\u0435\u044f \u0432\u0435\u0441\u044c\u043c\u0430 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u044b. \u0414\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0442\u0435\u043c, \u0447\u0442\u043e \u0432\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u043e\u043d\u044b \u043d\u0435\u043a\u043e\u0433\u043e (\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e) \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0430 \u0438\u043d\u0434\u0435\u043a\u0441 \u0445\u0440\u0430\u043d\u0438\u0442 \u043b\u0438\u0448\u044c \u0441\u0432\u043e\u0434\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0437\u043e\u043d\u0430\u0445. \u041d\u0430\u0439\u0434\u044f \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0435 \u0437\u043e\u043d\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 <i>\u043c\u043e\u0433\u0443\u0442<\/i> \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <i>\u0432\u0441\u0435<\/i> \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u044d\u0442\u0438\u0445 \u0437\u043e\u043d, \u0438\u043d\u0434\u0435\u043a\u0441 \u043d\u0435 \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438. \u042d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 Seq Scan, \u0447\u0435\u043c \u043d\u0430 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f, \u043d\u043e \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043c\u043e\u0436\u0435\u0442 \u0442\u043e\u0433\u043e \u0441\u0442\u043e\u0438\u0442\u044c.<\/p>\n<p>  BRIN \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u043b\u0430\u0434\u0430\u043b \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0434\u0432\u0443\u0445 \u0442\u0438\u043f\u043e\u0432: minmax \u0438 inclusive. \u041a\u043b\u0430\u0441\u0441\u044b minmax \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u043c \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0437\u043e\u043d\u044b, \u0430 inclusive \u2014 \u043e\u0431 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0435\u043c \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0435 (\u0434\u043b\u044f \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u044b \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f).<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u043f\u043e\u043b\u043d\u0438\u043b\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u043d\u043e\u0432\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438: bloom \u0438 minmax_multi. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443.<\/p>\n<p>  \u0414\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0447\u0430\u0442\u044b\u0439 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u0431 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0445 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/346460\/\">BRIN<\/a> (\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043e\u0441\u0432\u0435\u0436\u0438\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438): \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0435\u043c\u043e\u0431\u0430\u0437\u044b.<\/p>\n<p>  <strong>Bloom<\/strong><\/p>\n<p>  \u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 BRIN \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u043a\u043e\u0440\u0440\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043d\u0430 \u0434\u0438\u0441\u043a\u0435. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0439 \u0437\u043e\u043d\u044b \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 minmax) \u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u043b\u0435\u0436\u0430\u0442\u044c \u00ab\u043a\u0443\u0447\u043d\u043e\u00bb (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 inclusive).<\/p>\n<p>  \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0442\u0430\u043a. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043d\u0430\u0448\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u0430 passenger_name \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e.<\/p>\n<p>  \u0418\u0434\u0435\u044f bloom \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u043e\u043d\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u044c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80_%D0%91%D0%BB%D1%83%D0%BC%D0%B0\">\u0444\u0438\u043b\u044c\u0442\u0440 \u0411\u043b\u0443\u043c\u0430<\/a> \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432 \u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0437\u043e\u043d\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 <i>\u043c\u043e\u0436\u0435\u0442<\/i> \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0438\u0441\u043a\u043e\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0437\u0434\u0435\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043b\u043e\u0436\u043d\u043e\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435, \u043a\u0430\u043a, \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 minmax). \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u044b \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0442\u0430\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u043f\u043e \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0443.<\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u00ab\u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u043e\u0441\u0442\u044c\u00bb \u0437\u043e\u043d. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u0438 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 (\u0438\u043d\u0430\u0447\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0438\u043b\u0438 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0437\u043e\u043d\u044b).<\/p>\n<p>  \u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u043f\u0430\u0441\u0441\u0430\u0436\u0438\u0440\u0430:<\/p>\n<pre><code class=\"pgsql\">EXPLAIN (analyze, costs off, timing off) SELECT * FROM flights_bi WHERE passenger_name = 'ALEFTINA EFREMOVA';<\/code><\/pre>\n<pre><code class=\"plaintext\">                       QUERY PLAN                        --------------------------------------------------------  Seq Scan on flights_bi (actual rows=28 loops=1)    Filter: (passenger_name = 'ALEFTINA EFREMOVA'::text)    Rows Removed by Filter: 30517048  Planning Time: 0.063 ms  Execution Time: 16559.124 ms <\/code><\/pre>\n<pre><code class=\"pgsql\">CREATE INDEX ON flights_bi USING brin(passenger_name text_bloom_ops);  EXPLAIN (analyze, costs off, timing off) SELECT * FROM flights_bi WHERE passenger_name = 'ALEFTINA EFREMOVA';<\/code><\/pre>\n<pre><code class=\"plaintext\">                          QUERY PLAN --------------------------------------------------------------  Bitmap Heap Scan on flights_bi (actual rows=28 loops=1)    Recheck Cond: (passenger_name = 'ALEFTINA EFREMOVA'::text)    Rows Removed by Index Recheck: 325426    Heap Blocks: lossy=5632    -&gt;  Bitmap Index Scan on flights_bi_passenger_name_idx         (actual rows=56320 loops=1)          Index Cond: (passenger_name = 'ALEFTINA EFREMOVA'::text)  Planning Time: 0.077 ms  Execution Time: 83.796 ms <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0445\u0435\u0448-\u0438\u043d\u0434\u0435\u043a\u0441 \u0438\u043b\u0438 B-\u0434\u0435\u0440\u0435\u0432\u043e \u0443\u0441\u043a\u043e\u0440\u044f\u0442 \u043f\u043e\u0438\u0441\u043a \u0435\u0449\u0435 \u043b\u0443\u0447\u0448\u0435, \u043d\u043e BRIN-\u0438\u043d\u0434\u0435\u043a\u0441 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0441\u0435\u0433\u043e 32 \u041c\u0431\u0430\u0439\u0442\u0430, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0445\u0435\u0448-\u0438\u043d\u0434\u0435\u043a\u0441 \u2014 \u043e\u043a\u043e\u043b\u043e 200 \u041c\u0431\u0430\u0439\u0442, \u0430 B-\u0434\u0435\u0440\u0435\u0432\u043e \u2014 \u0431\u043e\u043b\u044c\u0448\u0435 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u0430.<\/p>\n<p>  <strong>minmax_multi<\/strong><\/p>\n<p>  \u042d\u0442\u043e\u0442 \u0442\u0438\u043f \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0439 minmax, \u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u043e\u043d\u044b \u043d\u0435 \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b, \u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0437\u043e\u043d\u044b \u0432 \u0446\u0435\u043b\u043e\u043c \u0431\u043b\u0438\u0437\u043a\u0438, \u043d\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043a\u043e\u0440\u0440\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u0438\u0437-\u0437\u0430 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432\u0435\u0440\u0441\u0438\u0439 \u0441\u0442\u0440\u043e\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446.<\/p>\n<p>  \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440. BRIN-\u0438\u043d\u0434\u0435\u043a\u0441 \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043b\u0435\u0442\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u044b \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u0434\u0430\u0442\u0435:<\/p>\n<pre><code class=\"pgsql\">CREATE INDEX ON flights_bi USING brin(scheduled_time);  \\set d 'bookings.now()::date - interval \\'7 days\\'' EXPLAIN (analyze, costs off, timing off) SELECT * FROM flights_bi WHERE scheduled_time &gt;= :d AND scheduled_time &lt; :d + interval '1 day';<\/code><\/pre>\n<pre><code class=\"plaintext\">                          QUERY PLAN  ------------------------------------------------------------  Bitmap Heap Scan on flights_bi (actual rows=83954 loops=1)    Recheck Cond: ...    Rows Removed by Index Recheck: 12290    Heap Blocks: lossy=1664    -&gt;  Bitmap Index Scan on flights_bi_scheduled_time_idx        (actual rows=16640 loops=1)          Index Cond: ...  Planning Time: 0.475 ms  Execution Time: 77.029 ms <\/code><\/pre>\n<p>  \u041d\u043e \u0435\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0431\u0443\u0434\u0443\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f, \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u0442\u0440\u043e\u043a \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u0441\u044f. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0443\u0442\u043e\u0447\u043d\u0438\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u043e\u0432:<\/p>\n<pre><code class=\"pgsql\">UPDATE flights_bi   SET airport_coord = point '(56.0211982727,57.9145011902)'   WHERE airport_code = 'PEE'; VACUUM flights_bi; UPDATE flights_bi   SET airport_coord = point '(39.9566001892,43.4499015808)'   WHERE airport_code = 'AER'; VACUUM flights_bi; <\/code><\/pre>\n<p>  \u0421\u0442\u0440\u043e\u043a\u0438 \u043e\u0442\u0447\u0430\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0430\u043b\u0438\u0441\u044c, \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0442\u043e\u0442 \u0436\u0435 \u0438\u043d\u0434\u0435\u043a\u0441 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u0443\u0436\u0435:<\/p>\n<pre><code class=\"plaintext\">                         QUERY PLAN ------------------------------------------------------------  Bitmap Heap Scan on flights_bi (actual rows=83954 loops=1)    Recheck Cond: ...    Rows Removed by Index Recheck: 4004401    Heap Blocks: lossy=71033    -&gt;  Bitmap Index Scan on flights_bi_scheduled_time_idx        (actual rows=710600 loops=1)          Index Cond: ...  Planning Time: 9.322 ms  Execution Time: 17385.129 ms <\/code><\/pre>\n<p>  \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c BRIN-\u0438\u043d\u0434\u0435\u043a\u0441 \u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 minmax_multi:<\/p>\n<pre><code class=\"pgsql\">CREATE INDEX ON flights_bi USING brin(scheduled_time timestamptz_minmax_multi_ops); <\/code><\/pre>\n<p>  \u0418\u043d\u0434\u0435\u043a\u0441 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442 \u043f\u0440\u043e\u0442\u0438\u0432 160 \u041a\u0431\u0430\u0439\u0442\u043e\u0432. \u041d\u043e \u0437\u0430 \u0441\u0447\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0437\u043e\u043d\u0430\u0445 \u043e\u043d \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0443\u0447\u0448\u0435 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u0435\u0439:<\/p>\n<pre><code class=\"plaintext\">                         QUERY PLAN             ------------------------------------------------------------  Bitmap Heap Scan on flights_bi (actual rows=83954 loops=1)    Recheck Cond: ...    Rows Removed by Index Recheck: 672976    Heap Blocks: lossy=13157    -&gt;  Bitmap Index Scan on flights_bi_scheduled_time_idx1        (actual rows=131840 loops=1)          Index Cond: ...  Planning Time: 0.291 ms  Execution Time: 378.037 ms <\/code><\/pre>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2675\/\">\u041f\u043e\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0442\u0438\u043f\u0430 SP-GiST<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/09c1c6ab\">09c1c6ab<\/a><\/p>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u0438\u043d\u0434\u0435\u043a\u0441 \u043d\u0435\u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0432 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0438 INCLUDE \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0435\u0449\u0435 \u0432 11 \u0432\u0435\u0440\u0441\u0438\u0438, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0441 \u0442\u0438\u043f\u043e\u043c B-\u0434\u0435\u0440\u0435\u0432\u043e. \u0412 12 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 GiST. <\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043a \u043d\u0438\u043c \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u044b SP-GiST.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2269\/\">REINDEX: \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/c5b28604\">c5b28604<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/57e6db70\">57e6db70<\/a><\/p>\n<p>  \u0412 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 REINDEX \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0434\u043b\u044f CONCURRENTLY. \u0422\u0430\u043a\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430, \u043a\u043e\u0433\u0434\u0430 \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u043e, \u0430 \u0432\u043e\u0442 \u043c\u0435\u0441\u0442\u043e \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0434\u0438\u0441\u043a, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438.<\/p>\n<p>  \u041d\u043e\u0432\u043e\u0435 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLESPACE new_place LOCATION '\/home\/pluzanov\/pg14\/data2'; \\db<\/code><\/pre>\n<pre><code class=\"plaintext\">                List of tablespaces     Name    |  Owner   |         Location           ------------+----------+---------------------------  new_place  | postgres | \/home\/pluzanov\/pg14\/data2  pg_default | postgres |  pg_global  | postgres | (3 rows) <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b:<\/p>\n<pre><code class=\"pgsql\">REINDEX (TABLESPACE new_place) TABLE flights;  SELECT c.relname, c.relkind, ts.spcname FROM   pg_class c        LEFT JOIN pg_tablespace ts ON c.reltablespace = ts.oid WHERE  relname LIKE 'flights%' AND relkind IN ('r','i');<\/code><\/pre>\n<pre><code class=\"plaintext\">                  relname                  | relkind |  spcname   -------------------------------------------+---------+-----------  flights                                   | r       |  flights_flight_no_scheduled_departure_key | i       | new_place  flights_pkey                              | i       | new_place (3 rows) <\/code><\/pre>\n<p>  \u0418\u043d\u0434\u0435\u043a\u0441\u044b \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u0438, \u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u043c\u043c\u0438\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212;tablespace \u043a \u043a\u043e\u043c\u0430\u043d\u0434\u0435 reindexdb.<\/p>\n<h2>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/h2>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2724\/\">libpq: api \u0434\u043b\u044f \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/acb7e4eb\">acb7e4eb<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/9aa491ab\">9aa491ab<\/a><\/p>\n<p>  \u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b libpq \u0434\u0430\u0432\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434. \u041e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u0430 \u0437\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u0437\u0436\u0435. \u041d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0434\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043e\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0431\u044b\u043b\u043e \u043d\u0435\u043b\u044c\u0437\u044f.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0432 \u043d\u043e\u0432\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (pipeline mode). \u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043d\u0435 \u0434\u043e\u0436\u0438\u0434\u0430\u044f\u0441\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0438\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0422\u043e\u0447\u043d\u0435\u0435, \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0435 \u043f\u043e\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u0430 \u0432\u0441\u0442\u0430\u044e\u0442 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443. \u041d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c. \u041a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0432 \u0442\u0430\u043a\u043e\u043c \u0436\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<p>  \u041a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0437\u0430 \u0441\u0447\u0435\u0442 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043e\u0431\u043c\u0435\u043d \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435. \u041d\u043e \u0442\u0430\u043a\u043e\u0439 \u0440\u0435\u0436\u0438\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435, \u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u043c\u043c\u0438\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 pgbench \u043a\u043e\u043c\u0430\u043d\u0434\u044b \\startpipeline \u0438 \\endpipeline \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 libpq.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2856\/\">\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 REFRESH MATERIALIZED VIEW<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/9e7ccd9e\">9e7ccd9e<\/a><\/p>\n<p>  \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043b\u0430\u043d\u044b \u0441 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c. \u0410 \u0432\u043e\u0442 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0430\u0442. \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043b\u0430\u043d\u044b \u0441\u0447\u0438\u0442\u0430\u043b\u0438\u0441\u044c \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c\u0438. <\/p>\n<p>  \u041f\u0440\u0438 \u0431\u043e\u043b\u0435\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0438 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e REFRESH MATERIALIZED VIEW \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043b\u0430\u043d\u044b. \u0427\u0442\u043e \u0438 \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2924\/\">\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0443 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u0442\u0440\u043e\u043a<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/bb437f99\">bb437f99<\/a><\/p>\n<p>  \u0414\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0443 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u0442\u0440\u043e\u043a (tid) \u0432 \u043f\u043b\u0430\u043d\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043d\u043e\u0432\u044b\u0439 \u0443\u0437\u0435\u043b TID Range Scan.<\/p>\n<p>  \u0412\u043e\u0442 \u043f\u043b\u0430\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0432\u044b\u0432\u043e\u0434\u044f\u0449\u0438\u0439 \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b tickets:<\/p>\n<pre><code class=\"pgsql\">EXPLAIN SELECT * FROM tickets WHERE ctid &gt;= '(0,0)' AND ctid &lt; '(1,0)';<\/code><\/pre>\n<pre><code class=\"plaintext\">                           QUERY PLAN                            ----------------------------------------------------------------  Tid Range Scan on tickets  (cost=0.01..4.59 rows=59 width=104)    TID Cond: ((ctid &gt;= '(0,0)'::tid) AND (ctid &lt; '(1,0)'::tid)) <\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043f\u043b\u0430\u043d \u0432 13 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u043e\u0440\u043e\u0436\u0435:<\/p>\n<pre><code class=\"plaintext\">                                 QUERY PLAN                                   -----------------------------------------------------------------------------  Gather  (cost=1000.00..68857.51 rows=59 width=104)    Workers Planned: 2    -&gt;  Parallel Seq Scan on tickets  (cost=0.00..67851.61 rows=25 width=104)          Filter: ((ctid &gt;= '(0,0)'::tid) AND (ctid &lt; '(1,0)'::tid)) <\/code><\/pre>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2491\/\">postgres_fdw: \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 Append<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/27e1f145\">27e1f145<\/a><\/p>\n<p>  \u0414\u0430\u043d\u0430 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u0442\u0440\u0435\u043c\u044f \u0441\u0435\u043a\u0446\u0438\u044f\u043c\u0438:<\/p>\n<pre><code class=\"pgsql\">\\d bookings_range<\/code><\/pre>\n<pre><code class=\"plaintext\">               Partitioned table &quot;bookings.bookings_range&quot;     Column    |           Type           | Collation | Nullable | Default --------------+--------------------------+-----------+----------+---------  book_ref     | character(6)             |           |          |  book_date    | timestamp with time zone |           |          |  total_amount | numeric(10,2)            |           |          | Partition key: RANGE (book_date) Number of partitions: 3 (Use \\d+ to list them.) <\/code><\/pre>\n<p>  \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u0432 \u043d\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0435\u0439? \u0415\u0441\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e \u2015 \u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e. \u0417\u0430\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u043b\u0430\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u0430:<\/p>\n<pre><code class=\"pgsql\">EXPLAIN (COSTS OFF) SELECT COUNT(*) FROM bookings_range;<\/code><\/pre>\n<pre><code class=\"plaintext\">                         QUERY PLAN                          ------------------------------------------------------------  Aggregate    -&gt;  Append          -&gt;  Seq Scan on p201607 bookings_range_1          -&gt;  Async Foreign Scan on p201608 bookings_range_2          -&gt;  Async Foreign Scan on p201609 bookings_range_3 <\/code><\/pre>\n<p>  \u0427\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0443\u0437\u0435\u043b \u0442\u0430\u043a\u043e\u0439 Async Foreign Scan? \u041d\u0435\u0443\u0436\u0435\u043b\u0438 \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e, \u043e \u0447\u0435\u043c \u0432\u0441\u0435 \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u0438? \u0422\u043e\u0447\u043d\u043e, \u044d\u0442\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u043a\u0446\u0438\u0439, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u043e\u0431\u043e\u0439 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b! <\/p>\n<p>  \u0418\u0437 \u0442\u0440\u0435\u0445 \u0441\u0435\u043a\u0446\u0438\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u0434\u0432\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445:<\/p>\n<pre><code class=\"pgsql\">\\det<\/code><\/pre>\n<pre><code class=\"plaintext\">     List of foreign tables   Schema  |  Table  |   Server    ----------+---------+------------  bookings | p201608 | srv_201608  bookings | p201609 | srv_201609 <\/code><\/pre>\n<p>  \u041c\u0435\u0447\u0442\u044b \u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u043c \u0448\u0430\u0440\u0434\u0438\u043d\u0433\u0435 \u0432 PostgreSQL \u043d\u0435\u0442\u043e\u0440\u043e\u043f\u043b\u0438\u0432\u043e \u0441\u0431\u044b\u0432\u0430\u044e\u0442\u0441\u044f. \u041d\u043e \u044d\u0442\u043e \u043a\u0440\u0443\u0442\u043e\u0439 \u0448\u0430\u0433 \u0432\u043f\u0435\u0440\u0435\u0434!<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2569\/\">\u0423\u0437\u0435\u043b \u043f\u043b\u0430\u043d\u0430 Result Cache \u0434\u043b\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u0446\u0438\u043a\u043b\u0430\u043c\u0438<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/9eacee2e\">9eacee2e<\/a><\/p>\n<p>  \u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u0446\u0438\u043a\u043b\u0430\u043c\u0438 \u043a\u0440\u0430\u0442\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0438\u043b\u0438 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0431\u043e\u0440\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041d\u043e \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u043d\u0430\u0431\u043e\u0440\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u043e\u043a \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435? \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0438\u0441\u043a\u0430\u0442\u044c \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c \u043d\u0430\u0431\u043e\u0440\u0435 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0441\u0442\u0440\u043e\u043a\u0438. \u0410 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c \u043d\u0430\u0431\u043e\u0440\u0435 \u0438 \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0434\u043b\u044f \u043a\u0430\u043a\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u044d\u0442\u043e\u0442 \u043d\u0430\u0431\u043e\u0440 \u043f\u043e\u043b\u0443\u0447\u0435\u043d? \u0422\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u0435 \u043f\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u0446\u0438\u043a\u043b\u0443 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0430 \u043d\u0435\u0442 \u043b\u0438 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c \u043d\u0430\u0431\u043e\u0440\u0435.<\/p>\n<p>  \u042d\u0442\u0430 \u043b\u043e\u0433\u0438\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 \u043d\u043e\u0432\u043e\u043c \u0443\u0437\u043b\u0435 \u043f\u043b\u0430\u043d\u0430 Result Cache. \u0427\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0435\u0451 \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u0430\u0442. \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e 10 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u043c, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0438\u043b\u0435\u0442\u043e\u0432. <\/p>\n<pre><code class=\"pgsql\">CREATE MATERIALIZED VIEW top10 AS SELECT book_ref, ticket_no FROM   tickets WHERE  book_ref IN (            SELECT book_ref            FROM   tickets            GROUP BY book_ref            ORDER BY count(*) DESC LIMIT 10 ); ANALYZE top10; <\/code><\/pre>\n<p>  \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0432 \u043e\u0434\u043d\u043e \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u0445\u043e\u0434\u0438\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0438\u043b\u0435\u0442\u043e\u0432. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 \u043a\u0430\u0436\u0434\u043e\u0435 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u0438\u0442 5 \u0431\u0438\u043b\u0435\u0442\u043e\u0432:<\/p>\n<pre><code class=\"pgsql\">SELECT book_ref, COUNT(*) FROM top10 GROUP BY 1;<\/code><\/pre>\n<pre><code class=\"plaintext\"> book_ref | count ----------+-------  581B6D   |     5  831982   |     5  88C866   |     5  D6B5B2   |     5  0D15DF   |     5  E9F768   |     5  876B11   |     5  10EAF6   |     5  A4CCF6   |     5  A1A654   |     5 <\/code><\/pre>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u043c\u0430\u0442. \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u043b\u0430\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u0430:<\/p>\n<pre><code class=\"pgsql\">EXPLAIN (COSTS OFF, ANALYZE, TIMING OFF, SUMMARY OFF) SELECT * FROM bookings JOIN top10 USING (book_ref);<\/code><\/pre>\n<pre><code class=\"plaintext\">                                   QUERY PLAN                                     ----------------------------------------------------------------------------  Nested Loop (actual rows=50 loops=1)    -&gt;  Seq Scan on top10 (actual rows=50 loops=1)    -&gt;  Result Cache (actual rows=1 loops=50)          Cache Key: top10.book_ref          Hits: 40  Misses: 10  Evictions: 0  Overflows: 0  Memory Usage: 2kB          -&gt;  Index Scan using bookings_pkey on bookings (actual rows=1 loops=10)                Index Cond: (book_ref = top10.book_ref) <\/code><\/pre>\n<p>  \u0422\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0446\u0438\u043a\u043b\u043e\u0432. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 top10, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 50 \u0441\u0442\u0440\u043e\u043a. \u041d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f 10 \u0441\u0442\u0440\u043e\u043a \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 bookings, \u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438. \u0420\u0430\u0441\u0445\u043e\u0434 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u043a\u0435\u0448\u0435\u0439 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0439 \u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439 \u043d\u0435 \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.<\/p>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c:<\/p>\n<pre><code class=\"pgsql\">SET enable_resultcache = OFF;  EXPLAIN (COSTS OFF, ANALYZE, TIMING OFF, SUMMARY OFF) SELECT * FROM bookings JOIN top10 USING (book_ref);<\/code><\/pre>\n<pre><code class=\"plaintext\">                                QUERY PLAN                                  ---------------------------------------------------------------------------  Nested Loop (actual rows=50 loops=1)    -&gt;  Seq Scan on top10 (actual rows=50 loops=1)    -&gt;  Index Scan using bookings_pkey on bookings (actual rows=1 loops=50)          Index Cond: (book_ref = top10.book_ref) <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0443\u0436\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0439 \u043f\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c \u0432\u0435\u0440\u0441\u0438\u044f\u043c \u043f\u043b\u0430\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2833\/\">\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 nullif \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u043f\u043b\u0430\u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/9c5f67fd\">9c5f67fd<\/a><\/p>\n<p>  \u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441 nullif \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>  \u0412 \u0432\u0435\u0440\u0441\u0438\u0438 13 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043b\u0430\u043d \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e:<\/p>\n<pre><code class=\"pgsql\">EXPLAIN (ANALYZE, TIMING OFF, COSTS OFF, SUMMARY OFF) SELECT * FROM tickets WHERE NULLIF(1, 2) = 2;<\/code><\/pre>\n<pre><code class=\"plaintext\">                 QUERY PLAN                  --------------------------------------------  Result (actual rows=0 loops=1)    One-Time Filter: (NULLIF(1, 2) = 2)    -&gt;  Seq Scan on tickets (never executed) <\/code><\/pre>\n<p>  \u041f\u043b\u0430\u043d \u044d\u0442\u043e\u0433\u043e \u0436\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 14 \u0432\u0435\u0440\u0441\u0438\u0438:<\/p>\n<pre><code class=\"plaintext\">           QUERY PLAN            --------------------------------  Result (actual rows=0 loops=1)    One-Time Filter: false <\/code><\/pre>\n<p>  <\/p>\n<h2>\u0420\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f<\/h2>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2509\/\">\u0423\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044f \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0440\u0435\u043f\u043b\u0438\u043a\u0435<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/df938449\">df938449<\/a><\/p>\n<p>  \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0440\u0435\u043f\u043b\u0438\u043a\u0435 \u0441 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c <i>hot_standby<\/i> \u0441\u0442\u0430\u043b\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c. \u0420\u0430\u043d\u044c\u0448\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u044b\u043b\u043e \u00abthe database system is starting up\u00bb, \u0442\u0435\u043f\u0435\u0440\u044c \u00abthe database system is not accepting connections\u00bb \u0438 \u0432 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u00abHot standby mode is disabled.\u00bb<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0436\u0435 hot_standby \u0432\u043a\u043b\u044e\u0447\u0435\u043d, \u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0435\u0449\u0435 \u043d\u0435 \u0434\u043e\u0448\u043b\u043e \u0434\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0442\u043e \u0442\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u00abthe database system is not yet accepting connections\u00bb, \u0430 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u00abConsistent recovery state has not been yet reached.\u00bb<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2803\/\">\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/cd91de0d\">cd91de0d<\/a><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0438\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e, \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0440\u0438\u0447\u0438\u043d \u043f\u0430\u0434\u0435\u043d\u0438\u044f. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u043e\u0439 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435, \u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u0430\u0434\u0430\u0442\u044c, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u043c\u0443\u0441\u043e\u0440 \u043f\u043e\u0441\u043b\u0435 \u0441\u0435\u0431\u044f. \u0421\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043c\u0443\u0441\u043e\u0440\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044f \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e. \u0410 \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u0443\u0434\u0430\u043b\u0438\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440, \u0447\u0442\u043e \u043d\u0435 \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441\u043c\u0435\u043b\u044c\u0447\u0430\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0431\u043e\u044f\u0442\u0441\u044f \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043b\u0438\u0448\u043d\u0435\u0435 (\u0430 \u043e\u043d\u0438 \u043d\u0435 \u0431\u043e\u044f\u0442\u0441\u044f, \u0445\u043e\u0442\u044f \u0438 \u043d\u0430\u043f\u0440\u0430\u0441\u043d\u043e).<\/p>\n<p>  \u0422\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u041d\u043e \u044d\u0442\u0438\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <i>remove_temp_files_after_crash<\/i>.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2410\/\">\u0423\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0449\u0435\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 WAL \u043f\u0440\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/1d257577\">1d257577<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/f003d9f8\">f003d9f8<\/a><\/p>\n<p>  \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 WAL \u0441 \u0446\u0435\u043b\u044c\u044e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f. \u0418 \u0435\u0441\u043b\u0438 \u044d\u0442\u0438\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043d\u0435\u0442 \u0432 \u0431\u0443\u0444\u0435\u0440\u043d\u043e\u043c \u043a\u0435\u0448\u0435, \u0442\u043e \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c.<\/p>\n<p>  \u0422\u0430\u043a\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <i>recovery_prefetch<\/i>, \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0420\u0430\u0437\u043c\u0435\u0440 \u0436\u0443\u0440\u043d\u0430\u043b\u0430 WAL \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0432\u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <i>wal_decode_buffer_size<\/i>. \u0410 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u043d\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 pg_stat_prefetch_recovery.<\/p>\n<p>  \u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 posix_fadvise, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u043c \u043d\u0435 \u043d\u0430 \u0432\u0441\u0435\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2795\/\">\u0420\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f: \u043a\u0430\u043a \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e?<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/32fd2b57\">32fd2b57<\/a><\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f pg_wal_replay_pause \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f. \u041d\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442\u0438 \u043d\u0435 \u0441\u0440\u0430\u0437\u0443, \u0432\u0435\u0434\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0435\u0441\u0442\u0430\u0445. <\/p>\n<p>  \u041a\u0430\u043a \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e? \u0415\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f pg_is_wal_replay_paused, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0433\u043b\u0430 \u0431\u044b \u0434\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441, \u043d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0442\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e. \u041e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u0441\u0442\u0438\u043d\u0443 \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0431\u044b\u043b\u0430 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u0430 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 pg_wal_replay_pause, \u043d\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0435\u0449\u0435 \u043d\u0435 \u0441\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c. <\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u0435\u0436\u043d\u0435\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u0444\u0443\u043d\u043a\u0446\u0438\u044e pg_is_wal_replay_paused \u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043a\u0430\u043a \u0435\u0441\u0442\u044c. \u0418 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043d\u043e\u0432\u0443\u044e: pg_get_wal_replay_pause_state, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0443\u044e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>not paused \u2015 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442;<\/li>\n<li>paused requested \u2015 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 pg_wal_replay_pause \u0438 \u0434\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438;<\/li>\n<li>paused \u2015 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e.<\/li>\n<\/ul>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2965\/\">ALTER SUBSCRIPTION\u2026 ADD\/DROP PUBLICATION<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/82ed7748\">82ed7748<\/a><\/p>\n<p>  \u0420\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438. \u0412 \u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439. \u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e:<\/p>\n<pre><code class=\"pgsql\">CREATE SUBSCRIPTION sub1 .. PUBLICATION pub1, pub2, pub3; <\/code><\/pre>\n<p>  \u041d\u043e \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439? \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"pgsql\">ALTER SUBSCRIPTION sub1 SET PUBLICATION \u043d\u043e\u0432\u044b\u0439_\u0441\u043f\u0438\u0441\u043e\u043a_\u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439; <\/code><\/pre>\n<p>  \u0422. \u0435. \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443 \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u0438\u0437 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439, \u043c\u044b \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0412 14 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438, \u043a\u0440\u043e\u043c\u0435 SET, \u043c\u043e\u0436\u043d\u043e \u0435\u0449\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c: <\/p>\n<pre><code class=\"pgsql\">ALTER SUBSCRIPTION sub1 ADD PUBLICATION pub4; ALTER SUBSCRIPTION sub1 DROP PUBLICATION pub1; <\/code><\/pre>\n<p>  <\/p>\n<h2>\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c<\/h2>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2913\/\">\u041f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u0440\u043e\u043b\u044c pg_database_owner<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/a14a0118\">a14a0118<\/a><\/p>\n<p>  \u0420\u043e\u043b\u044c pg_database_owner \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0434\u043b\u044f \u0432\u044b\u0434\u0430\u0447\u0438 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430\u043c \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043c\u0435\u043b \u043f\u0440\u0430\u0432\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b pg_statistic. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0437 \u043d\u0435\u0451 \u043c\u043e\u0433\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0443\u043f\u0435\u0440\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u0435 \u0432\u044b\u0434\u0430\u0434\u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u044e \u0434\u043b\u044f pg_database_owner.<\/p>\n<pre><code class=\"pgsql\">\\c template1 postgres GRANT SELECT ON pg_statistic TO pg_database_owner; <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u0430\u0436\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443\u0447\u0438 \u0441\u0443\u043f\u0435\u0440\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0437 pg_statistic:<\/p>\n<pre><code class=\"pgsql\">\\c postgres postgres CREATE ROLE app_owner LOGIN; CREATE DATABASE app_db OWNER app_owner; <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c:<\/p>\n<pre><code class=\"pgsql\">\\c app_db app_owner SELECT COUNT(*) FROM pg_statistic;<\/code><\/pre>\n<pre><code class=\"plaintext\"> count -------    405 <\/code><\/pre>\n<p>  <a href=\"https:\/\/www.depesz.com\/2021\/04\/01\/waiting-for-postgresql-14-add-pg_database_owner-default-role\/\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/a> \u043e\u0442 depesz.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2702\/\">\u041f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0440\u043e\u043b\u0438 pg_read_all_data \u0438 pg_write_all_data<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/6c3ffd69\">6c3ffd69<\/a><\/p>\n<p>  \u041d\u0443\u0436\u0435\u043d \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0451 \u0447\u0438\u0442\u0430\u0442\u044c, \u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c? <\/p>\n<pre><code class=\"pgsql\">CREATE ROLE readonly LOGIN BYPASSRLS; GRANT pg_read_all_data TO readonly; <\/code><\/pre>\n<p>  \u0412\u0441\u0451! <\/p>\n<p>  \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c readonly \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043f\u0440\u0430\u0432\u043e USAGE \u043d\u0430 \u0432\u0441\u0435 \u0441\u0445\u0435\u043c\u044b \u0438 \u043f\u0440\u0430\u0432\u0430 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435, \u0442\u0438\u043f\u0430 pg_authid), \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439. \u0418 \u0442\u0430\u043a \u0432\u043e \u0432\u0441\u0435\u0445 \u0431\u0430\u0437\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430.<\/p>\n<p>  \u0414\u0435\u0436\u0443\u0440\u043d\u043e\u043c\u0443 \u0430\u0434\u043c\u0438\u043d\u0443 \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c pg_dump\/pg_dumpall, \u043d\u043e \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0435\u043c\u0443 \u043f\u0440\u0430\u0432\u0430 \u0441\u0443\u043f\u0435\u0440\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f? \u0425\u043c, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0449\u0435.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u0430\u044f \u0440\u043e\u043b\u044c pg_write_all_data \u0434\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0430 INSERT, UPDATE, DELETE \u043d\u0430 \u0432\u0441\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041e\u043f\u044f\u0442\u044c \u0436\u0435 \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u0445\u0435\u043c\u0430\u0445 \u0432\u0441\u0435\u0445 \u0431\u0430\u0437\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/3002\/\">\u0421\u0436\u0430\u0442\u0438\u0435 SSL \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/f9264d15\">f9264d15<\/a><\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0436\u0430\u0442\u0438\u0435 SSL \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0443\u0436\u0435 \u0441 11 \u0432\u0435\u0440\u0441\u0438\u0438. \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0441\u0436\u0430\u0442\u0438\u044f \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2835\/\">\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0438\u043c\u0435\u043d\u0438 \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u043c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0435<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/6d7a6fea\">6d7a6fea<\/a><\/p>\n<p>  \u0412 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0443 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 clientname, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0435 \u0438\u043c\u044f \u0432 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0435 CN (Common Name) \u0438\u043b\u0438 DN (Distinguished Name) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0415\u0441\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 clientname \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d, \u0442\u043e \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f CN.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/3010\/\">SSL: \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f Server Name Indication (SNI)<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/5c55dc8b\">5c55dc8b<\/a><\/p>\n<p>  libpq \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 TLS \u00ab<a href=\"https:\/\/tools.ietf.org\/html\/rfc6066#section-3\">Server Name Indication<\/a>\u00bb. \u0418\u043c\u044f \u0445\u043e\u0441\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u043c. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435\u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e, \u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 SNI \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c libpq sslsni.<\/p>\n<h2>\u0421\u0435\u0440\u0432\u0435\u0440<\/h2>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2936\/\">\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <i>vacuum_cost_page_miss<\/i> \u0441\u043d\u0438\u0436\u0435\u043d\u043e \u0434\u043e 2<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/e19594c5\">e19594c5<\/a><\/p>\n<p>  \u0428\u0438\u0440\u043e\u043a\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0438\u0441\u043a\u043e\u0432 SSD \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>  \u0412 12 \u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <i>autovacuum_vacuum_cost_delay<\/i> \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b\u0438 \u0441 20 \u0434\u043e 2 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434 \u0438 \u0430\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u0442\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 10 \u0440\u0430\u0437 \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u0435\u0435.<\/p>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/runtime-config-resource.html#GUC-VACUUM-COST-PAGE-MISS\"><i>vacuum_cost_page_miss<\/i><\/a> c 10 \u0434\u043e 2. \u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u0435\u0435, \u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043b\u0443\u0447\u0448\u0435 \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0442\u0440\u0430\u0442 \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440\u043d\u044b\u0439 \u043a\u0435\u0448 (<i>vacuum_cost_page_miss<\/i>) \u0438 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043d\u0430 \u0434\u0438\u0441\u043a (<i>vacuum_cost_page_dirty<\/i>, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 20).<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2858\/\">\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 checkpoint_completion_target: \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 0.9<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/bbcc4eb2\">bbcc4eb2<\/a><\/p>\n<p>  \u0418\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u0438\u0448\u0435\u0442 \u043d\u0430 \u0434\u0438\u0441\u043a, \u0430 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432. \u0418 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f, \u0447\u0442\u043e \u0434\u043b\u044f \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u0438\u0448\u0443\u0449\u0435\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 0.5, \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e 0.9.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u0430 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f \u043d\u0430\u0448\u043b\u0430 \u0441\u0432\u043e\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2940\/\">\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0438 CREATE INDEX | REINDEX\u2026 CONCURRENTLY<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/d9d07622\">d9d07622<\/a><\/p>\n<p>  \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/533058\/#commit_c98763bf\">\u043d\u043e\u044f\u0431\u0440\u044c\u0441\u043a\u043e\u043c \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0435<\/a> \u043f\u0438\u0441\u0430\u043b\u043e\u0441\u044c \u043e \u043d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0435\u043c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 CREATE INDEX CONCURRENTLY, \u0430 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u0431 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/541252\/#commit_f9900df5\">\u044f\u043d\u0432\u0430\u0440\u0441\u043a\u043e\u043c<\/a> \u043f\u0440\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0443\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u043b\u044f REINDEX CONCURRENTLY.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0443\u0447\u0438\u043b\u0438 VACUU\u041c \u043d\u0435 \u0436\u0434\u0430\u0442\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u0432\u0438\u0434\u043e\u0432 \u043a\u043e\u043c\u0430\u043d\u0434. \u041e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e, \u0432\u0435\u0434\u044c \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\/\u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0443\u0439\u0442\u0438 \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. <\/p>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u043d\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e\u0431 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u0427\u0430\u0441\u0442\u0438\u0447\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043f\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c \u0431\u0443\u0434\u0443\u0442 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0432\u0435\u0434\u044c \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0434\u0440\u0443\u0433\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2898\/\">\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432, \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043c\u0430\u043b\u043e\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/5100010e\">5100010e<\/a><\/p>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u0434\u0432\u0443\u043c\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438 \u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043c\u0435\u0440\u0442\u0432\u044b\u0445 \u0441\u0442\u0440\u043e\u043a:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE t (col1 int primary key, col2 int unique)     WITH (autovacuum_enabled=false); INSERT INTO t SELECT f.x, f.x FROM generate_series(1,100000) AS f(x); UPDATE t SET col2 = -col2 WHERE col1 &lt; 100; <\/code><\/pre>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043e\u0447\u0438\u0441\u0442\u043a\u0443:<\/p>\n<pre><code class=\"pgsql\">VACUUM VERBOSE t;<\/code><\/pre>\n<pre><code class=\"plaintext\">INFO:  vacuuming &quot;public.t&quot; INFO:  &quot;t&quot;: index scan bypassed: 443 pages from table (0.23% of total) have 99 dead item identifiers INFO:  launched 1 parallel vacuum worker for index cleanup (planned: 1) INFO:  &quot;t&quot;: found 99 removable, 100000 nonremovable row versions in 443 out of 443 pages DETAIL:  0 dead row versions cannot be removed yet, oldest xmin: 27459 0 pages removed. Skipped 0 pages due to buffer pins, 0 frozen pages. CPU: user: 0.01 s, system: 0.00 s, elapsed: 0.02 s. <\/code><\/pre>\n<p>  \u041b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u0430 \u0432\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430. \u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442, \u0447\u0442\u043e \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0441 \u043c\u0435\u0440\u0442\u0432\u044b\u043c\u0438 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 (0,23%). \u0418 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432. <\/p>\n<p>  \u0422\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0447\u0438\u0441\u0442\u043a\u0435 \u043d\u0435 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0432 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u043c\u0435\u0440\u0442\u0432\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u043c\u0430\u043b\u043e.<\/p>\n<p>  \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u044d\u0442\u043e \u00ab\u043c\u0430\u043b\u043e\u00bb? \u041c\u0430\u043b\u043e \u2015 \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 \u043c\u0435\u0440\u0442\u0432\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 2% \u043e\u0442 \u043e\u0431\u0449\u0435\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435.<\/p>\n<p>  \u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2961\/\">VACUUM: \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0431\u0435\u0437 TOAST-\u0447\u0430\u0441\u0442\u0438<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/7cb3048f\">7cb3048f<\/a><\/p>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u0430 VACUUM \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u043a\u0430\u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0442\u0430\u043a \u0438 \u0435\u0451 TOAST-\u0447\u0430\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u043f\u043e \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0430 TOAST \u043d\u0435\u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u043e\u0441\u043b\u0430\u0441\u044c \u0438\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0440\u043e\u0447\u043d\u043e\u0439 \u0437\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0438 \u0441\u0442\u0440\u043e\u043a, \u0442\u043e \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0442\u043e\u0439 \u0436\u0435 \u0441\u0430\u043c\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 VACUUM. \u0410 \u0432\u043e\u0442 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u0431\u0435\u0437 TOAST, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u0431\u044b\u043b\u043e. <\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u043d\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c:<\/p>\n<pre><code class=\"pgsql\">VACUUM (PROCESS_TOAST OFF) tickets; <\/code><\/pre>\n<p>  \u0414\u043b\u044f VACUUM FULL \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b TOAST \u043d\u0435\u043b\u044c\u0437\u044f. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 PROCESS_TOAST \u0432\u043a\u043b\u044e\u0447\u0435\u043d. <\/p>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u0435\u0451 TOAST-\u0447\u0430\u0441\u0442\u044c \u043a\u0430\u043a \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u041f\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0438\u0445 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2870\/\">\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0438, \u0435\u0441\u043b\u0438 \u00ab\u043f\u0440\u043e\u043f\u0430\u043b\u00bb postmaster<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/4753ef37\">4753ef37<\/a><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 postmaster \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f, \u0442\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u0443\u0437\u043d\u0430\u044e\u0442 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0438 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0442\u0441\u044f. <\/p>\n<p>  \u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435, \u043d\u043e \u043d\u0435 \u0432\u0441\u0435. \u041a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0430\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0442 \u0442\u0440\u0443\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0438 \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e. \u0422\u0435\u043f\u0435\u0440\u044c \u0438 \u043e\u043d\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0442\u0441\u044f.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2474\/\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f date_bin<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/49ab61f0\">49ab61f0<\/a><\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f date_trunc \u043e\u0431\u0440\u0435\u0437\u0430\u0435\u0442 \u0434\u0430\u0442\u0443 \u0434\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438: \u0447\u0430\u0441, \u0434\u0435\u043d\u044c, \u043c\u0435\u0441\u044f\u0446 \u0438 \u0442.\u0434. \u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0435\u0441\u0442\u044c \u0432 <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/13\/functions-datetime#FUNCTIONS-DATETIME-TRUNC\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>. <\/p>\n<p>  \u041d\u043e \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0435\u0437\u0430\u0442\u044c \u0434\u0430\u0442\u0443 \u0434\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043f\u043e \u0440\u0435\u0439\u0441\u0430\u043c \u0432 \u0440\u0430\u0437\u0431\u0438\u0432\u043a\u0435 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043d\u044f: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0439\u0441\u043e\u0432 \u0431\u044b\u043b\u043e \u043d\u043e\u0447\u044c\u044e, \u0443\u0442\u0440\u043e\u043c, \u0434\u043d\u0435\u043c \u0438 \u0432\u0435\u0447\u0435\u0440\u043e\u043c. \u041d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043d\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f date_bin:<\/p>\n<pre><code class=\"pgsql\">SELECT date_bin('6 hours', scheduled_departure, '1970-01-01') AS day_part,        count(*) FROM   flights WHERE  scheduled_departure::date = bookings.now()::date GROUP BY day_part ORDER BY day_part;<\/code><\/pre>\n<pre><code class=\"plaintext\">        day_part        | count ------------------------+-------  2017-08-15 00:00:00+03 |    13  2017-08-15 06:00:00+03 |   224  2017-08-15 12:00:00+03 |   255  2017-08-15 18:00:00+03 |    53 <\/code><\/pre>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2980\/\">\u0410\u0433\u0440\u0435\u0433\u0430\u0442\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f bit_xor<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/f9a0392e\">f9a0392e<\/a><\/p>\n<p>  \u0412 PostgreSQL \u0434\u0430\u0432\u043d\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 bit_and \u0438 bit_or. \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u0438 bit_xor \u0434\u043b\u044f <i>\u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0435\u0433\u043e \u0438\u043b\u0438<\/i>. \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0434\u0430\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0431\u0438\u0442, \u0435\u0441\u043b\u0438 \u0432 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u044d\u0442\u043e\u0442 \u0431\u0438\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 \u043d\u0435\u0447\u0435\u0442\u043d\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>  \u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u043e\u043a (\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b):<\/p>\n<pre><code class=\"pgsql\">SELECT bit_xor(n) FROM ( VALUES   (b'100'),   (b'110'),   (b'111') ) t(n);<\/code><\/pre>\n<pre><code class=\"plaintext\"> bit_xor ---------  101 (1 row) <\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2917\/\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f bit_count<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/a6715af1\">a6715af1<\/a><\/p>\n<p>  \u041d\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f SQL \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0438\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e:<\/p>\n<pre><code class=\"pgsql\">SELECT bit_count(B'001'), bit_count(B'011'), bit_count(B'111');<\/code><\/pre>\n<pre><code class=\"plaintext\"> bit_count | bit_count | bit_count -----------+-----------+-----------          1 |         2 |         3 <\/code><\/pre>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2613\/\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f unistr<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/f37fec83\">f37fec83<\/a><\/p>\n<p>  \u041d\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0441\u043f\u0435\u0446\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438 Unicode \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 Unicode.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u043f\u0435\u0440\u0432\u044b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%B8%D1%80%D0%B8%D0%BB%D0%BB%D0%B8%D1%86%D0%B0_(%D0%B1%D0%BB%D0%BE%D0%BA_%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4%D0%B0)#%D0%9A%D0%BE%D0%BC%D0%BF%D0%B0%D0%BA%D1%82%D0%BD%D0%B0%D1%8F_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0\">\u043a\u0438\u0440\u0438\u043b\u043b\u0438\u0446\u044b<\/a>:<\/p>\n<pre><code class=\"pgsql\">SELECT unistr('\\u0400\\u0401\\u0402\\u0403\\u0404');<\/code><\/pre>\n<pre><code class=\"plaintext\"> unistr --------  \u0400\u0401\u0402\u0403\u0404 <\/code><\/pre>\n<p>  <a href=\"https:\/\/www.depesz.com\/2021\/04\/01\/waiting-for-postgresql-14-add-unistr-function\/\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/a> \u043e\u0442 depesz.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2997\/\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f trim_array<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/0a687c8f\">0a687c8f<\/a><\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0431\u0440\u0435\u0437\u0430\u0435\u0442 \u0441 \u043a\u043e\u043d\u0446\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<pre><code class=\"pgsql\">SELECT trim_array(ARRAY['A','B','C','D','E'], 2);<\/code><\/pre>\n<pre><code class=\"plaintext\"> trim_array ------------  {A,B,C} <\/code><\/pre>\n<p>  \u0411\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0442\u0430\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435\u0442, \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0440\u0435\u0437\u044b \u0438\u043b\u0438 \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041d\u043e trim_array \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 SQL \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d\u0430 \u0435\u0441\u0442\u044c \u0432 PostgreSQL.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2679\/\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f extract, \u0430\u043d\u0430\u043b\u043e\u0433 date_part, \u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 numeric<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/a2da77cd\">a2da77cd<\/a><\/p>\n<p>  \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f EXTRACT \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 date_part, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 double precision:<\/p>\n<pre><code class=\"pgsql\">SELECT pg_typeof(extract(epoch from now()));<\/code><\/pre>\n<pre><code class=\"plaintext\">    pg_typeof      ------------------  double precision <\/code><\/pre>\n<p>  \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u0442\u044c. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0431\u044b \u0440\u0435\u0448\u0438\u043b\u0430 \u0437\u0430\u043c\u0435\u043d\u0430 \u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 date_part \u0442\u0438\u043f\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441 double precision \u043d\u0430 numeric, \u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0438\u043f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u043f\u0430\u0441\u043d\u043e.<\/p>\n<p>  \u0420\u0435\u0448\u0438\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a. \u0421\u043e\u0437\u0434\u0430\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c extract, \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c date_part, \u0430 \u0442\u0438\u043f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f numeric. \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f EXTRACT \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0432\u044b\u0437\u043e\u0432 \u043d\u043e\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 extract \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 numeric:<\/p>\n<pre><code class=\"pgsql\">SELECT pg_typeof(extract(epoch from now()));<\/code><\/pre>\n<pre><code class=\"plaintext\"> pg_typeof -----------  numeric <\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u0438 date_part \u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438. <\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2813\/\">\u0412\u044b\u0431\u043e\u0440 \u043c\u0435\u0442\u043e\u0434\u0430 \u0441\u0436\u0430\u0442\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/bbe0a81d\">bbe0a81d<\/a><\/p>\n<p>  PostgreSQL \u0443\u043c\u0435\u0435\u0442 \u0441\u0436\u0438\u043c\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 \u0441 \u0442\u0438\u043f\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b: text, bytea, json[b] \u0438 \u0434\u0440. \u0414\u043b\u044f \u0441\u0436\u0430\u0442\u0438\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f zlib.<\/p>\n<p>  \u041d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0432 PostgreSQL 14. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u0437 \u0434\u0432\u0443\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0441\u0436\u0430\u0442\u0438\u044f: zlib (\u0442\u043e\u0447\u043d\u0435\u0435 pglz) \u0438\u043b\u0438 lz4. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f pglz.<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE json_data (name text, data jsonb); \\d+ json_data<\/code><\/pre>\n<pre><code class=\"plaintext\">                                       Table &quot;public.json_data&quot;  Column | Type  | Collation | Nullable | Default | Storage  | Compression ... --------+-------+-----------+----------+---------+----------+-------------  name   | text  |           |          |         | extended | pglz          data   | jsonb |           |          |         | extended | pglz         Access method: heap <\/code><\/pre>\n<p>  \u041d\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043d\u043e\u0432\u043e\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <i>default_toast_compression<\/i>.<\/p>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u043c \u043c\u0435\u0442\u043e\u0434 \u0441\u0436\u0430\u0442\u0438\u044f \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u0430 jsonb:<\/p>\n<pre><code class=\"pgsql\">ALTER TABLE json_data ALTER COLUMN data SET COMPRESSION lz4; \\d+ json_data<\/code><\/pre>\n<pre><code class=\"plaintext\">                                       Table &quot;public.json_data&quot;  Column | Type  | Collation | Nullable | Default | Storage  | Compression ... --------+-------+-----------+----------+---------+----------+-------------  name   | text  |           |          |         | extended | pglz          data   | jsonb |           |          |         | extended | lz4          Access method: heap <\/code><\/pre>\n<p>  \u041c\u0435\u0442\u043e\u0434 \u0441\u0436\u0430\u0442\u0438\u044f lz4, \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f \u043d\u0430 <a href=\"https:\/\/github.com\/lz4\/lz4\">\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0435<\/a> \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 github, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u044b\u043c, \u0445\u043e\u0442\u044f \u0438 \u043d\u0435 \u0441\u0442\u043e\u043b\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0441\u0436\u0438\u043c\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435. \u0422\u0430\u043c \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0441\u0436\u0430\u0442\u0438\u044f.<\/p>\n<p>  \u041d\u0443 \u0430 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0441\u0442\u043e\u0438\u0442 \u043b\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0441\u0436\u0430\u0442\u0438\u044f, \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435.<\/p>\n<p>  <a href=\"https:\/\/www.depesz.com\/2021\/03\/22\/waiting-for-postgresql-14-allow-configurable-lz4-toast-compression\/\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/a> \u043e\u0442 depesz.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2832\/\">\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/a4d75c86\">a4d75c86<\/a><\/p>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u0430 CREATE STATISTICS \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432, \u043d\u043e \u0435\u0449\u0435 \u0438 \u043f\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0412 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e.<\/p>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0440\u0435\u0439\u0441\u043e\u0432, \u0432\u044b\u043b\u0435\u0442\u0430\u044e\u0449\u0438\u0445 \u043f\u043e \u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a\u0430\u043c:<\/p>\n<pre><code class=\"pgsql\">EXPLAIN (ANALYZE, TIMING OFF) SELECT * FROM flights WHERE to_char(scheduled_departure, 'DY') = 'MON';<\/code><\/pre>\n<pre><code class=\"plaintext\">                                               QUERY PLAN                                                --------------------------------------------------------------------------  Gather  (cost=1000.00..5627.29 rows=1074 width=63)          (actual rows=30552 loops=1) ... <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043e\u0448\u0438\u0431\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0446\u0435\u043d\u043a\u0435 \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 30 \u0440\u0430\u0437. \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c? \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e, \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. \u041d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u0432\u0435\u0434\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f to_char \u0438\u043c\u0435\u0435\u0442 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u0438 stable, \u0447\u0442\u043e \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e \u043d\u0435\u0439.<\/p>\n<p>  \u0414\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043f\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e:<\/p>\n<pre><code class=\"pgsql\">CREATE STATISTICS s_flights ON to_char(scheduled_departure, 'DY')     FROM flights; ANALYZE flights; <\/code><\/pre>\n<p>  \u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u043d\u043e\u0432\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c pg_stats_ext_exprs (\u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 pg_stats):<\/p>\n<pre><code class=\"pgsql\">SELECT * FROM pg_stats_ext_exprs WHERE statistics_name = 's_flights'\\gx<\/code><\/pre>\n<pre><code class=\"plaintext\">-[ RECORD 1 ]----------+-------------------------------------------------- schemaname             | bookings tablename              | flights statistics_schemaname  | bookings statistics_name        | s_flights statistics_owner       | postgres expr                   | to_char(scheduled_departure, 'DY'::text) null_frac              | 0 avg_width              | 7 n_distinct             | 7 most_common_vals       | {SAT,TUE,WED,THU,MON,SUN,FRI} most_common_freqs      | {0.1483,0.14606667,0.14523333,0.14496666,0.14436667,0.14196667,0.1291} histogram_bounds       | correlation            | 0.1514369 most_common_elems      | most_common_elem_freqs | elem_count_histogram   | <\/code><\/pre>\n<p>  \u041d\u0443 \u0430 \u0447\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u0441 \u043e\u0446\u0435\u043d\u043a\u043e\u0439 \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430? \u0412\u0441\u0451 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435:<\/p>\n<pre><code class=\"pgsql\">EXPLAIN (ANALYZE, TIMING OFF) SELECT * FROM flights WHERE to_char(scheduled_departure, 'DY') = 'MON';<\/code><\/pre>\n<pre><code class=\"plaintext\">                                        QUERY PLAN                                          --------------------------------------------------------------------------  Seq Scan on flights  (cost=0.00..5847.00 rows=31020 width=63)                       (actual rows=30552 loops=1) ... <\/code><\/pre>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2972\/\">FDW: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 TRUNCATE<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/8ff1c946\">8ff1c946<\/a><\/p>\n<p>  \u041e\u0431\u0435\u0440\u0442\u043a\u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c TRUNCATE \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446. \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0432 postgres_fdw. <\/p>\n<p>  \u041e\u0447\u0435\u0440\u0435\u0434\u044c \u0437\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 fdw.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2650\/\">postgres_fdw: \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u0435\u0430\u043d\u0441\u0430\u043c\u0438<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/b1be3074\">b1be3074<\/a><\/p>\n<p>  \u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0447\u0435\u0440\u0435\u0437 postgres_fdw \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441, \u043d\u043e \u0438 \u0432\u0441\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435. \u0417\u0430\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u043d\u0430\u0448 \u0441\u0435\u0430\u043d\u0441. \u042d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0432\u043d\u0435\u0448\u043d\u0435\u043c\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u2015 \u043d\u0435 \u0442\u0440\u0430\u0442\u044f\u0442\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439. <\/p>\n<p>  \u0410 \u0435\u0441\u043b\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0443\u0434\u0430 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u043d\u0430\u0434\u043e, \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e? \u0423\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0430\u043d\u0441 \u0431\u0443\u0434\u0435\u0442 \u00ab\u0431\u043e\u043b\u0442\u0430\u0442\u044c\u0441\u044f\u00bb \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0438 \u0441 \u044d\u0442\u0438\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u043e\u0434\u0435\u043b\u0430\u0442\u044c. \u0421\u0440\u0435\u0434\u0441\u0442\u0432 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u043c \u0441\u0435\u0430\u043d\u0441\u043e\u043c \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442.<\/p>\n<p>  \u0422\u043e\u0447\u043d\u0435\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e \u0434\u043e 14 \u0432\u0435\u0440\u0441\u0438\u0438. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 keep_connections, \u0438 \u0442\u043e\u0433\u0434\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0430\u043d\u0441 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u043f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0432\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043a \u0441\u043e\u0441\u0435\u0434\u043d\u0435\u0439 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 demo. \u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0435.<\/p>\n<pre><code class=\"pgsql\">CREATE EXTENSION postgres_fdw;  CREATE SERVER demo_srv_cached FOREIGN DATA WRAPPER postgres_fdw OPTIONS (dbname 'demo'); CREATE SERVER demo_srv_not_cached FOREIGN DATA WRAPPER postgres_fdw OPTIONS (dbname 'demo', keep_connections 'off');  CREATE USER MAPPING FOR postgres SERVER demo_srv_cached OPTIONS (user 'postgres', password 'postgres'); CREATE USER MAPPING FOR postgres SERVER demo_srv_not_cached OPTIONS (user 'postgres', password 'postgres'); <\/code><\/pre>\n<p>  \u0418 \u0434\u0432\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u0438\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432:<\/p>\n<pre><code class=\"pgsql\">CREATE FOREIGN TABLE bookings_cached (     book_ref char(6),     book_date timestamptz,     total_amount numeric(10,2) ) SERVER demo_srv_cached    OPTIONS (schema_name 'bookings', table_name 'bookings');  CREATE FOREIGN TABLE bookings_not_cached (     book_ref char(6),     book_date timestamptz,     total_amount numeric(10,2) ) SERVER demo_srv_not_cached    OPTIONS (schema_name 'bookings', table_name 'bookings'); <\/code><\/pre>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0433\u0434\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043d\u0435 \u043a\u0435\u0448\u0438\u0440\u0443\u0435\u0442\u0441\u044f:<\/p>\n<pre><code class=\"pgsql\">SELECT count(*) FROM bookings_not_cached;<\/code><\/pre>\n<pre><code class=\"plaintext\">  count   ---------  2111110 <\/code><\/pre>\n<p>  \u0418\u0449\u0435\u043c \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0430\u043d\u0441:<\/p>\n<pre><code class=\"pgsql\">SELECT datname, pid  FROM pg_stat_activity WHERE application_name = 'postgres_fdw';<\/code><\/pre>\n<pre><code class=\"plaintext\"> datname | pid ---------+----- (0 rows) <\/code><\/pre>\n<p>  \u0410 \u0435\u0433\u043e \u0443\u0436\u0435 \u043d\u0435\u0442, \u043e\u043d \u0437\u0430\u043a\u0440\u044b\u0442. \u0414\u0440\u0443\u0433\u043e\u0435 \u0434\u0435\u043b\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0435 bookings_cached:<\/p>\n<pre><code class=\"pgsql\">SELECT count(*) FROM bookings_cached;<\/code><\/pre>\n<pre><code class=\"plaintext\">  count   ---------  2111110 <\/code><\/pre>\n<pre><code class=\"pgsql\">SELECT datname, pid  FROM pg_stat_activity  WHERE application_name = 'postgres_fdw';<\/code><\/pre>\n<pre><code class=\"plaintext\"> datname |  pid   ---------+-------  demo    | 17876 <\/code><\/pre>\n<p>  \u0421\u0435\u0430\u043d\u0441 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u0438 \u0436\u0434\u0435\u0442 \u043d\u043e\u0432\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2950\/\">postgres_fdw: \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u043a\u0446\u0438\u0439<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/a3740c48\">a3740c48<\/a><\/p>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u0430 IMPORT FOREIGN SCHEMA \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0439 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0441\u0435\u043a\u0446\u0438\u044f\u043c\u0438. \u0410 \u0432\u043e\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f.<\/p>\n<p>  \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0430\u043a\u043e\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f CREATE FOREIGN TABLE, \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e \u0438 \u0432\u043e \u0444\u0440\u0430\u0437\u0435 LIMIT TO \u043a\u043e\u043c\u0430\u043d\u0434\u044b IMPORT FOREIGN SCHEMA.<\/p>\n<h2>\u0421\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h2>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2714\/\">ALTER TABLE\u2026 DETACH PARTITION CONCURRENTLY<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/71f4c8c6\">71f4c8c6<\/a><\/p>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0435\u043a\u0446\u0438\u044f\u043c\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0430 \u043b\u0435\u0442\u0443, \u0431\u0435\u0437 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u0430 \u0432 \u043c\u0438\u0440\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0443, \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u0434\u043d\u043e \u0438\u0437 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 <a href=\"https:\/\/www.timescale.com\/\">timescaledb<\/a> \u043f\u0435\u0440\u0435\u0434 \u0432\u0430\u043d\u0438\u043b\u044c\u043d\u044b\u043c PostgreSQL \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u043d<i>\u044b<\/i>\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0441\u0435\u043a\u0446\u0438\u0438, \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0435\u0449\u0435 \u0432 12 \u0432\u0435\u0440\u0441\u0438\u0438. ALTER TABLE\u2026 ATTACH PARTITION \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 ShareUpdateExclusiveLock, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0443\u044e \u0441 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438 DML. \u0410 \u0432\u043e\u0442 \u0441 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u0435\u043a\u0446\u0438\u0435\u0439 \u0442\u0430\u043a \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c. ALTER TABLE\u2026 DETACH PARTITION \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u043e\u0439 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438.<\/p>\n<p>  \u0421\u043f\u0443\u0441\u0442\u044f \u0434\u0432\u0430 \u0433\u043e\u0434\u0430 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0435\u043a\u0446\u0438\u0439. \u041a DETACH PARTITION \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e CONCURRENTLY. <\/p>\n<p>  \u0412 \u043d\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438. \u041f\u0435\u0440\u0432\u0430\u044f \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 \u0441\u0435\u043a\u0446\u0438\u044e (pg_inherits.inhdetachpending) \u043a\u0430\u043a \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c\u0443\u044e \u043a \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e. \u042d\u0442\u043e \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0438\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0435\u043a\u0446\u0438\u0438, \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u044f\u044f \u043f\u043b\u0430\u043d\u0430, \u0430 \u0432\u0441\u0435 \u043d\u043e\u0432\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0443\u0436\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u00ab\u0432\u0438\u0434\u0435\u0442\u044c\u00bb \u0441\u0435\u043a\u0446\u0438\u044e. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u0442\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u0438 \u043d\u0430\u0447\u0430\u0442\u044b\u0445 \u0434\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430 pg_inherits.inhdetachpending, \u0438 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0435\u043a\u0446\u0438\u044e.<\/p>\n<p>  \u0422\u0430\u043a\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0435\u0441\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>DETACH PARTITION CONCURRENTLY \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0432 \u043d\u0430\u0447\u0430\u0442\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438. \u0418, \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0430\u043a\u043e\u0432\u0430, \u0447\u0442\u043e \u0438 \u0438\u0437 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f. \u0415\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0431\u0432\u044f\u0437\u043a\u0443 \u0432\u043e\u043a\u0440\u0443\u0433 \u043a\u043e\u043c\u0430\u043d\u0434\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438 \u0438 \u0441\u0440\u0430\u0437\u0443 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0440\u043e\u0439), \u0442\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435.<\/li>\n<\/ul>\n<p>  <\/p>\n<ul>\n<li>\u0423 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0441\u0435\u043a\u0446\u0438\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. <\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0434\u0432\u0443\u043c\u044f \u0441\u0435\u043a\u0446\u0438\u044f\u043c\u0438, \u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0430\u043d\u0441\u0430\u0445 \u0431\u0443\u0434\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0435\u043a\u0446\u0438\u044e:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE logdata (ts date) PARTITION BY RANGE (ts); CREATE TABLE ts_20210401 PARTITION OF logdata     FOR VALUES FROM ('2021-04-01'::date) TO ('2021-04-02'::date); CREATE TABLE ts_20210402 PARTITION OF logdata     FOR VALUES FROM ('2021-04-02'::date) TO ('2021-04-03'::date); <\/code><\/pre>\n<p>  \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u0435\u0430\u043d\u0441\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0441\u0435\u043a\u0446\u0438\u044e \u0437\u0430 2 \u0430\u043f\u0440\u0435\u043b\u044f:<\/p>\n<pre><code class=\"pgsql\">|    BEGIN; |    INSERT INTO logdata VALUES ('2021-04-02'::date); <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u0435\u043a\u0446\u0438\u044e \u0437\u0430 1 \u0430\u043f\u0440\u0435\u043b\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u0435\u0430\u043d\u0441\u0435:<\/p>\n<pre><code class=\"pgsql\">ALTER TABLE logdata DETACH PARTITION ts_20210401 CONCURRENTLY; <\/code><\/pre>\n<p>  \u2026 \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043f\u043e\u0432\u0438\u0441\u0430\u0435\u0442. \u041f\u0440\u0438\u0437\u043d\u0430\u043a, \u0447\u0442\u043e \u0441\u0435\u043a\u0446\u0438\u044f \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430 \u043d\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u043d\u0430\u0447\u0430\u0442\u044b\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u0441 \u043b\u044e\u0431\u044b\u043c\u0438 \u0441\u0435\u043a\u0446\u0438\u044f\u043c\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0438\u0441\u044c.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0441\u0435\u043a\u0446\u0438\u044e, \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043d\u0443\u044e \u043a \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e, \u0443\u0436\u0435 \u043d\u0435\u043b\u044c\u0437\u044f, \u0435\u0451 \u043d\u0435 \u0432\u0438\u0434\u043d\u043e. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0438\u0437 \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u0441\u0435\u0430\u043d\u0441\u0430:<\/p>\n<pre><code class=\"pgsql\">||    INSERT INTO logdata VALUES ('2021-04-01'::date);<\/code><\/pre>\n<pre><code class=\"plaintext\">ERROR:  no partition of relation &quot;logdata&quot; found for row DETAIL:  Partition key of the failing row contains (ts) = (2021-04-01). <\/code><\/pre>\n<p>  \u0410 \u0441 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0435\u043a\u0446\u0438\u044f\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u0441\u0435\u0430\u043d\u0441\u0435 \u0432 \u043d\u043e\u0432\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"pgsql\">||    BEGIN; ||    INSERT INTO logdata VALUES ('2021-04-02'::date); ||    INSERT 0 1 <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u0435\u0430\u043d\u0441\u0435, \u0441\u0435\u043a\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430. \u0410 \u043e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u0441\u0435\u0430\u043d\u0441\u0435 \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u043e\u043c\u0435\u0445\u043e\u0439.<\/p>\n<p>  \u041d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439 \u0441\u0431\u043e\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0430\u044f \u043d\u0430\u0447\u0430\u0442\u043e\u0435:<\/p>\n<pre><code class=\"pgsql\">ALTER TABLE .. DETACH PARTITION .. FINALYZE; <\/code><\/pre>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2575\/\">\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 UPDATE \u0438 DELETE \u0434\u043b\u044f \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/86dc9005\">86dc9005<\/a><\/p>\n<p>  \u0423\u0437\u0435\u043b \u043f\u043b\u0430\u043d\u0430 ModifyTable, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043b\u044e\u0431\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 UPDATE \u0438 DELETE, \u0440\u0430\u0434\u0438\u043a\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b\u0438. \u041d\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u044d\u0442\u043e \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \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.<\/p>\n<p>  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u0438\u043b\u0438 \u0432 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0435. \u0410 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 bookings_range, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE bookings_range (        book_ref     character(6),        book_date    timestamptz,        total_amount numeric(10,2)    ) PARTITION BY RANGE(book_date);  CREATE TABLE p201607 PARTITION OF bookings_range        FOR VALUES FROM ('2016-07-01') TO ('2016-08-01'); CREATE TABLE p201608 PARTITION OF bookings_range        FOR VALUES FROM ('2016-08-01') TO ('2016-09-01'); CREATE TABLE p201609 PARTITION OF bookings_range        FOR VALUES FROM ('2016-09-01') TO ('2016-10-01');  INSERT INTO bookings_range SELECT * FROM bookings WHERE book_date &lt; '2016-10-01'; <\/code><\/pre>\n<p>  \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f to_timestamp \u0441 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0435\u0439 \u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u0438 STABLE:<\/p>\n<pre><code class=\"pgsql\">EXPLAIN (ANALYZE, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT * FROM bookings_range WHERE  book_date = to_timestamp('01.08.2016','DD.MM.YYYY');<\/code><\/pre>\n<pre><code class=\"plaintext\">                                        QUERY PLAN                                         --------------------------------------------------------------------------  Gather (actual rows=3 loops=1)    Workers Planned: 2    Workers Launched: 2    -&gt;  Parallel Append (actual rows=1 loops=3)          Subplans Removed: 2          -&gt;  Parallel Seq Scan on p201608 bookings_range_1               (actual rows=1 loops=3)                Filter: (book_date = to_timestamp('01.08.2016'::text, 'DD.MM.YYYY'::text))                Rows Removed by Filter: 56109 <\/code><\/pre>\n<p>  \u041e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u043b\u0430\u043d. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043b\u0430\u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438 \u0447\u0430\u0441\u0442\u044c \u0441\u0435\u043a\u0446\u0438\u0439 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 (\u0432\u0438\u0434\u043d\u043e \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 Subplans Removed). \u0422\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0435\u0449\u0435 \u0432 12 \u0432\u0435\u0440\u0441\u0438\u0438 (\u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u0437\u044f\u0442 \u0438\u0437 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/456716\/\">\u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u0434\u0432\u0443\u0445\u043b\u0435\u0442\u043d\u0435\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438). <\/p>\n<p>  \u041d\u043e \u0432\u043e\u0442 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0441\u0442\u0440\u043e\u043a \u0432\u0441\u0451 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0445\u0443\u0436\u0435. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0438 \u0432 12, \u0438 \u0432 13 \u0432\u0435\u0440\u0441\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043b\u043e\u0445\u043e:<\/p>\n<pre><code class=\"pgsql\">-- BEGIN; EXPLAIN (ANALYZE, COSTS OFF, TIMING OFF, SUMMARY OFF) DELETE FROM bookings_range WHERE  book_date = to_timestamp('01.08.2016','DD.MM.YYYY'); -- ROLLBACK;<\/code><\/pre>\n<pre><code class=\"plaintext\">                                     QUERY PLAN                                      --------------------------------------------------------------------------  Delete on bookings_range (actual rows=0 loops=1)    Delete on p201607 bookings_range_1    Delete on p201608 bookings_range_2    Delete on p201609 bookings_range_3    -&gt;  Seq Scan on p201607 bookings_range_1 (actual rows=0 loops=1)          Filter: (book_date = to_timestamp('01.08.2016'::text, 'DD.MM.YYYY'::text))          Rows Removed by Filter: 10878    -&gt;  Seq Scan on p201608 bookings_range_2 (actual rows=3 loops=1)          Filter: (book_date = to_timestamp('01.08.2016'::text, 'DD.MM.YYYY'::text))          Rows Removed by Filter: 168326    -&gt;  Seq Scan on p201609 bookings_range_3 (actual rows=0 loops=1)          Filter: (book_date = to_timestamp('01.08.2016'::text, 'DD.MM.YYYY'::text))          Rows Removed by Filter: 165421 <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0441\u0435\u043a\u0446\u0438\u0438.<\/p>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e\u0442 \u0436\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0432 14 \u0432\u0435\u0440\u0441\u0438\u0438:<\/p>\n<pre><code class=\"plaintext\">                                        QUERY PLAN                                         --------------------------------------------------------------------------  Delete on bookings_range (actual rows=0 loops=1)    Delete on p201607 bookings_range    Delete on p201608 bookings_range_1    Delete on p201609 bookings_range    -&gt;  Append (actual rows=3 loops=1)          Subplans Removed: 2          -&gt;  Seq Scan on p201608 bookings_range_1 (actual rows=3 loops=1)                Filter: (book_date = to_timestamp('01.08.2016'::text, 'DD.MM.YYYY'::text))                Rows Removed by Filter: 168326 <\/code><\/pre>\n<p>  \u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0443!<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2492\/\">\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0431\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u043e \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/0827e8af\">0827e8af<\/a><\/p>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 ANALYZE \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043a\u0430\u043a \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u0435\u043a\u0446\u0438\u044f\u043c, \u0442\u0430\u043a \u0438 \u0441\u0432\u043e\u0434\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u0441\u0430\u043c\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 (\u0438\u043b\u0438 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439) \u0442\u0430\u0431\u043b\u0438\u0446\u0435. <\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0431\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438 autovacuum, \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0441\u0435\u043a\u0446\u0438\u044f\u0445. \u0418 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0432\u0435\u0434\u044c \u0432 \u043d\u0435\u0439 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u0442 \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0442\u043e \u0441\u0432\u043e\u0434\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0432 pg_statistic \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0434\u0435\u043b.<\/p>\n<p>  \u0412 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0435\u0441\u043b\u0438 autovacuum \u0432\u0438\u0434\u0438\u0442, \u0447\u0442\u043e \u0445\u043e\u0442\u044f \u0431\u044b \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u0435\u043a\u0446\u0438\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0431\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438, \u0442\u043e \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2930\/\">\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043d\u0430 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/c3ffe348\">c3ffe348<\/a><\/p>\n<p>  \u041f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043d\u0430 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. \u0422. \u0435. \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u0441\u044b\u043b\u0430\u0435\u043c\u0441\u044f. <\/p>\n<p>  \u0410 \u0432\u0435\u0434\u044c \u043c\u043e\u0436\u043d\u043e \u044d\u0442\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438. \u042d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u0441\u044f \u043a\u0443\u0447\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0430\u043c\u044f\u0442\u0438. \u0427\u0442\u043e \u0438 \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e.<\/p>\n<h2>\u041a\u043e\u043c\u0430\u043d\u0434\u044b SQL<\/h2>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2570\/\">\u0424\u0440\u0430\u0437\u044b CYCLE \u0438 SEARCH \u0434\u043b\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/3696a600\">3696a600<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/f4adc41c\">f4adc41c<\/a><\/p>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0441\u0435\u0440\u0438\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/541252\/#commit_62f34097\">\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c<\/a> \u043e \u043d\u043e\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 pg_get_catalog_foreign_keys, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430. \u041f\u043e\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0441 \u043d\u0435\u0439.<\/p>\n<p>  \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0441\u0441\u044b\u043b\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043d\u0430 pg_constraint \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u043b\u0438 \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u0435\u043d \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441. \u0412\u043e\u0442 \u043e\u043d:<\/p>\n<pre><code class=\"pgsql\">WITH RECURSIVE r(pktable, fktable, is_cycle, path) AS (     SELECT pktable, fktable, false, ARRAY[pktable]     FROM   pg_get_catalog_foreign_keys()     WHERE  pktable = 'pg_constraint'::regclass   UNION ALL     SELECT f.pktable, f.fktable, f.pktable = ANY(path), r.path||f.pktable     FROM   pg_get_catalog_foreign_keys() f, r     WHERE  f.pktable = r.fktable     AND    NOT r.is_cycle ) SELECT * FROM r WHERE NOT is_cycle;<\/code><\/pre>\n<pre><code class=\"plaintext\">    pktable    |    fktable    | is_cycle |            path             ---------------+---------------+----------+----------------------------  pg_constraint | pg_constraint | f        | {pg_constraint}  pg_constraint | pg_trigger    | f        | {pg_constraint}  pg_trigger    | pg_trigger    | f        | {pg_constraint,pg_trigger} (3 rows) <\/code><\/pre>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0431\u044b\u043b\u043e \u0431\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 pktable \u0438 fktable. \u041d\u043e \u0432 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0435\u0449\u0435 \u0434\u0432\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 is_cycle \u0438 path. \u041e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0435 \u0443\u0448\u043b\u0430 \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b. \u0410 \u044d\u0442\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u044b \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e, \u0432\u0435\u0434\u044c \u043d\u0430 pg_constraint \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e pg_trigger, \u043d\u043e \u0438 \u0441\u0430\u043c\u0430 pg_constraint. \u041a\u0441\u0442\u0430\u0442\u0438 \u0438 pg_trigger \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0430 \u043d\u0430 \u0441\u0435\u0431\u044f. <\/p>\n<p>  \u0412 14 \u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d \u0442\u0430\u043a:<\/p>\n<pre><code class=\"pgsql\">WITH RECURSIVE r(pktable, fktable) AS (     SELECT pktable, fktable     FROM   pg_get_catalog_foreign_keys()     WHERE  pktable = 'pg_constraint'::regclass   UNION ALL     SELECT f.pktable, f.fktable     FROM   pg_get_catalog_foreign_keys() f, r     WHERE  f.pktable = r.fktable )   CYCLE pktable SET is_cycle USING path SELECT * FROM r;<\/code><\/pre>\n<pre><code class=\"plaintext\">    pktable    |    fktable    | is_cycle |              path                      ---------------+---------------+----------+-------------------------------  pg_constraint | pg_constraint | f        | {(pg_constraint)}  pg_constraint | pg_trigger    | f        | {(pg_constraint)}  pg_constraint | pg_constraint | t        | {(pg_constraint),(pg_constraint)}  pg_trigger    | pg_trigger    | f        | {(pg_constraint),(pg_trigger)}  pg_constraint | pg_trigger    | t        | {(pg_constraint),(pg_constraint)}  pg_trigger    | pg_trigger    | t        | {(pg_constraint),(pg_trigger),(pg_trigger)} (6 rows) <\/code><\/pre>\n<p>  \u0427\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c?<\/p>\n<ul>\n<li>\u041f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043d\u043e\u0432\u0430\u044f \u0444\u0440\u0430\u0437\u0430 CYCLE, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u043e\u043b\u0431\u0435\u0446, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u044c\u0441\u044f. \u0417\u0434\u0435\u0441\u044c \u0436\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0443\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445 \u043f\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u043c \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0432\u0430\u043d\u0438\u044f (SET) \u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 (USING).<\/li>\n<li>\u0421\u0442\u043e\u043b\u0431\u0446\u044b, \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0432 SET \u0438 USING, \u043d\u0435\u044f\u0432\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f (rewrite) \u0438 \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435.<\/li>\n<li>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0441 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u043c \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043e \u0444\u0440\u0430\u0437\u0435 WHERE \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u0417\u0434\u0435\u0441\u044c \u043e\u043d\u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0447\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b.<\/li>\n<\/ul>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u041f\u043e\u0432\u0442\u043e\u0440\u0438\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b pg_attribute. \u0412 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0430, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0440\u0430\u0442\u044c \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 pg_constraint \u0434\u0432\u0430\u0436\u0434\u044b \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 pg_attribute). \u0410 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0443 sort_by, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u0432 \u0435\u0449\u0435 \u043e\u0434\u043d\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u0444\u0440\u0430\u0437\u0435 SEARCH:<\/p>\n<pre><code class=\"pgsql\">WITH RECURSIVE r(pktable, fktable) AS (     SELECT pktable, fktable     FROM   pg_get_catalog_foreign_keys()     WHERE  pktable = 'pg_attribute'::regclass     GROUP BY pktable, fktable   UNION ALL     SELECT f.pktable, f.fktable     FROM   pg_get_catalog_foreign_keys() f, r     WHERE  f.pktable = r.fktable     GROUP BY f.pktable, f.fktable ) SEARCH DEPTH FIRST BY pktable SET sort_by   CYCLE pktable SET is_cycle USING path SELECT pktable, fktable, sort_by FROM r WHERE NOT is_cycle ORDER BY sort_by;<\/code><\/pre>\n<pre><code class=\"plaintext\">     pktable      |        fktable        |                    sort_by                     ------------------+-----------------------+-----------------------------------------------  pg_attribute     | pg_attrdef            | {(pg_attribute)}  pg_attribute     | pg_constraint         | {(pg_attribute)}  pg_attribute     | pg_index              | {(pg_attribute)}  pg_attribute     | pg_statistic          | {(pg_attribute)}  pg_attribute     | pg_trigger            | {(pg_attribute)}  pg_attribute     | pg_partitioned_table  | {(pg_attribute)}  pg_attribute     | pg_statistic_ext      | {(pg_attribute)}  pg_constraint    | pg_constraint         | {(pg_attribute),(pg_constraint)}  pg_constraint    | pg_trigger            | {(pg_attribute),(pg_constraint)}  pg_trigger       | pg_trigger            | {(pg_attribute),(pg_constraint),(pg_trigger)}  pg_trigger       | pg_trigger            | {(pg_attribute),(pg_trigger)}  pg_statistic_ext | pg_statistic_ext_data | {(pg_attribute),(pg_statistic_ext)} <\/code><\/pre>\n<p>  \u0424\u0440\u0430\u0437\u0430 SEARCH DEPTH FIRST BY pktable SET sort_by \u043d\u0435\u044f\u0432\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 sort_by, \u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u042d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u0433\u043b\u044f\u0434\u0435\u0442\u044c\u0441\u044f, \u0442\u043e \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0441\u0442\u043e\u043b\u0431\u0435\u0446 sort_by \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432, \u043a\u0430\u043a \u0438 path. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u043f\u0438\u0441\u0430\u0442\u044c SEARCH, \u0430 \u0441\u0440\u0430\u0437\u0443 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0443 path.<\/p>\n<p>  \u0414\u0440\u0443\u0433\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 SEARCH BREADTH FIRST BY pktable SET sort_by. <\/p>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 sort_by \u0431\u0443\u0434\u0435\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443. \u0412 \u043d\u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e \u0443\u0440\u043e\u0432\u043d\u044e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u044b. <\/p>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0442\u0440\u0435\u0442\u044c\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0441\u043d\u0438\u0437\u0443 \u0438\u043c\u0435\u0435\u0442 \u0442\u0440\u0435\u0442\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f. \u0418\u0437\u043c\u0435\u043d\u0438\u0432 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u043c\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043c \u0435\u0451 \u043d\u0430 \u0441\u0432\u043e\u0451, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043c\u0435\u0441\u0442\u043e:<\/p>\n<pre><code class=\"pgsql\">WITH RECURSIVE r(pktable, fktable) AS (     SELECT pktable, fktable     FROM   pg_get_catalog_foreign_keys()     WHERE  pktable = 'pg_attribute'::regclass     GROUP BY pktable, fktable   UNION ALL     SELECT f.pktable, f.fktable     FROM   pg_get_catalog_foreign_keys() f, r     WHERE  f.pktable = r.fktable     GROUP BY f.pktable, f.fktable ) SEARCH BREADTH FIRST BY pktable SET sort_by   CYCLE pktable SET is_cycle USING path SELECT pktable, fktable, sort_by FROM r WHERE NOT is_cycle ORDER BY sort_by;<\/code><\/pre>\n<pre><code class=\"plaintext\">     pktable      |        fktable        |       sort_by         ------------------+-----------------------+----------------------  pg_attribute     | pg_attrdef            | (0,pg_attribute)  pg_attribute     | pg_constraint         | (0,pg_attribute)  pg_attribute     | pg_index              | (0,pg_attribute)  pg_attribute     | pg_statistic          | (0,pg_attribute)  pg_attribute     | pg_trigger            | (0,pg_attribute)  pg_attribute     | pg_partitioned_table  | (0,pg_attribute)  pg_attribute     | pg_statistic_ext      | (0,pg_attribute)  pg_constraint    | pg_constraint         | (1,pg_constraint)  pg_constraint    | pg_trigger            | (1,pg_constraint)  pg_trigger       | pg_trigger            | (1,pg_trigger)  pg_statistic_ext | pg_statistic_ext_data | (1,pg_statistic_ext)  pg_trigger       | pg_trigger            | (2,pg_trigger) <\/code><\/pre>\n<p>  \u0421\u0442\u043e\u043b\u0431\u0435\u0446 sort_by \u0432 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0431\u0435\u0437 SEARCH BREADTH FIRST. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u0442\u043e\u043b\u0431\u0435\u0446, \u0447\u0430\u0441\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 level, \u0434\u043b\u044f \u0443\u0440\u043e\u0432\u043d\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0432 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u041d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.<\/p>\n<p>  \u041f\u043e\u0434\u0432\u043e\u0434\u044f \u0438\u0442\u043e\u0433\u0438. \u0424\u0440\u0430\u0437\u044b CYCLE \u0438 SEARCH \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u043e\u0432\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u041d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442 \u0438\u0445 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0438 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c. \u042d\u0442\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435, \u043d\u043e \u0438 \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<p>  \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u044d\u0442\u0438 \u0444\u0440\u0430\u0437\u044b \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 SQL, \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0442\u0430\u043b\u0438 \u0447\u0430\u0441\u0442\u044c\u044e PostgreSQL.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2998\/\">GROUP BY DISTINCT<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/be45be9c\">be45be9c<\/a><\/p>\n<p>  \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0437\u0430\u0447\u0435\u043c DISTINCT \u0432 GROUP BY? \u0413\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0430 \u043d\u0430 \u0442\u043e \u0438 \u043d\u0443\u0436\u043d\u0430, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0441\u0435\u0447\u044c \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b. <\/p>\n<p>  \u041d\u043e \u0443 GROUP BY \u0435\u0441\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438: GROUPING SETS, ROLLUP, CUBE. \u041f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u044d\u0442\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0435\u0449\u0435 \u0438 \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438. <\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u043e\u0442 \u0440\u0430\u0437\u0431\u0438\u0432\u043a\u0430 \u0440\u0435\u0439\u0441\u043e\u0432 \u043f\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u043c \u0438 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u043c \u0432\u044b\u043b\u0435\u0442\u0430 (\u0432\u044b\u0431\u043e\u0440\u043a\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430 \u0432\u044b\u043b\u0435\u0442\u0430\u043c\u0438 \u0438\u0437 \u0423\u0441\u0442\u044c-\u041a\u0443\u0442\u0430):<\/p>\n<pre><code class=\"pgsql\">SELECT status, departure_airport, count(*) FROM   flights_v WHERE  departure_city = '\u0423\u0441\u0442\u044c-\u041a\u0443\u0442' GROUP BY ROLLUP(status, departure_airport);<\/code><\/pre>\n<pre><code class=\"plaintext\">  status   | departure_airport | count -----------+-------------------+-------            |                   |   396  Arrived   | UKX               |   366  On Time   | UKX               |     1  Scheduled | UKX               |    28  Cancelled | UKX               |     1  Arrived   |                   |   366  On Time   |                   |     1  Cancelled |                   |     1  Scheduled |                   |    28 <\/code><\/pre>\n<p>  \u041f\u043e\u043c\u0438\u043c\u043e \u0441\u0442\u0440\u043e\u043a \u0441 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u043c\u0438, \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0435\u0449\u0435 \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0438 \u043e\u0431\u0449\u0430\u044f \u0438\u0442\u043e\u0433\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430.<\/p>\n<p>  \u041d\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u0432 \u044d\u0442\u043e\u0442 \u0436\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0435 \u0438 \u0434\u0440\u0443\u0433\u0443\u044e \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u043c \u043f\u0440\u0438\u043b\u0435\u0442\u0430, \u0442\u043e \u043b\u0435\u0433\u043a\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f:<\/p>\n<pre><code class=\"pgsql\">GROUP BY ROLLUP(status,departure_airport), ROLLUP(status,arrival_airport); <\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u044d\u0442\u0438\u0445 \u0434\u0443\u0431\u043b\u0435\u0439 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 DISTINCT:<\/p>\n<pre><code class=\"pgsql\">GROUP BY DISTINCT ROLLUP(status,departure_airport), ROLLUP(status,arrival_airport); <\/code><\/pre>\n<p>  \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u044c DISTINCT \u0432 GROUP BY \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 SQL.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2158\/\">\u041f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c \u0434\u043b\u044f \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/055fee7e\">055fee7e<\/a><\/p>\n<p>  \u0412 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 SQL:2016, \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0438 \u0432 PostgreSQL, \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c \u0434\u043b\u044f \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \u041a \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u043c, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u0443:<\/p>\n<pre><code class=\"pgsql\">SELECT x.* FROM   ticket_flights JOIN boarding_passes USING (ticket_no, flight_id) AS x          LIMIT 1;<\/code><\/pre>\n<pre><code class=\"plaintext\">   ticket_no   | flight_id ---------------+-----------  0005435189093 |    198393 <\/code><\/pre>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2630\/\">\u041f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 SQL<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/e717a9a1\">e717a9a1<\/a><\/p>\n<p>  \u0422\u0435\u043a\u0441\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0432 PostgreSQL \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u043e\u043a\u0438. \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0435\u0451 \u0442\u0435\u043a\u0441\u0442 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u042d\u0442\u0438 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 SQL \u0432 14 \u0432\u0435\u0440\u0441\u0438\u0438.<\/p>\n<p>  \u0414\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 \u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0421\u0423\u0411\u0414 \u0442\u0435\u043b\u043e \u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 SQL \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"pgsql\">CREATE FUNCTION maximum(a integer, b integer) RETURNS integer LANGUAGE SQL     RETURN CASE WHEN a &gt; b THEN a ELSE b END;  SELECT maximum(10,12);<\/code><\/pre>\n<pre><code class=\"plaintext\"> maximum ---------       12 <\/code><\/pre>\n<p>  \u0427\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c?   <\/p>\n<ul>\n<li>\u041d\u0435\u0442 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 AS $$ \u0442\u0435\u043a\u0441\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 $$.<\/li>\n<li>\u041d\u043e\u0432\u043e\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e RETURN \u0434\u043b\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/li>\n<li>\u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 pg_proc.prosqlbody.<\/li>\n<li>\u0422\u0435\u043a\u0441\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 pg_proc.prosrc.<\/li>\n<\/ul>\n<p>  \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0435\u0451 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0437\u0430\u043d\u043e\u0432\u043e \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f!<\/p>\n<p>  \u041e\u0442\u0441\u044e\u0434\u0430 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435. \u041d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<pre><code class=\"pgsql\">CREATE FUNCTION maximum(a anyelement, b anyelement) RETURNS anyelement LANGUAGE SQL      RETURN CASE WHEN a &gt; b THEN a ELSE b END;<\/code><\/pre>\n<pre><code class=\"plaintext\">ERROR:  SQL function with unquoted function body cannot have polymorphic arguments <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043d\u0443\u0436\u043d\u0430, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u00ab\u043f\u043e-\u0441\u0442\u0430\u0440\u0438\u043d\u043a\u0435\u00bb:<\/p>\n<pre><code class=\"pgsql\">CREATE FUNCTION maximum(a anyelement, b anyelement) RETURNS anyelement LANGUAGE SQL     AS $$SELECT CASE WHEN a &gt; b THEN a ELSE b END$$;<\/code><\/pre>\n<pre><code class=\"plaintext\">CREATE FUNCTION <\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 SQL \u0432 \u043d\u043e\u0432\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE t (id int);  CREATE FUNCTION add_and_count (p int) RETURNS bigint LANGUAGE SQL BEGIN ATOMIC     INSERT INTO t VALUES(p);     SELECT count(*) FROM t; END;  SELECT add_and_count(100);<\/code><\/pre>\n<pre><code class=\"plaintext\"> add_and_count ---------------              1 <\/code><\/pre>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u044b \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 BEGIN ATOMIC\u2026 END, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.<\/p>\n<p>  \u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u00ab\u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u043c\u00bb \u0432\u0438\u0434\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438. \u0422\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u0443\u043d\u043a\u0446\u0438\u044f add_and_count \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b t. \u0422\u043e\u0447\u043d\u0435\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0435\u0435 \u0438\u043c\u044f \u043c\u043e\u0436\u043d\u043e \u0438 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c:<\/p>\n<pre><code class=\"pgsql\">ALTER TABLE t RENAME TO t_new; SELECT add_and_count(101);<\/code><\/pre>\n<pre><code class=\"plaintext\"> add_and_count ---------------              2 <\/code><\/pre>\n<p>  \u0410 \u0432\u043e\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f:<\/p>\n<pre><code class=\"pgsql\">DROP TABLE t_new;<\/code><\/pre>\n<pre><code class=\"plaintext\">ERROR:  cannot drop table t_new because other objects depend on it DETAIL:  function add_and_count(integer) depends on table t_new HINT:  Use DROP ... CASCADE to drop the dependent objects too. <\/code><\/pre>\n<p>  \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u0436\u0435 \u0441 \u043d\u043e\u0432\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b:<\/p>\n<pre><code class=\"pgsql\">\\sf add_and_count<\/code><\/pre>\n<pre><code class=\"plaintext\">CREATE OR REPLACE FUNCTION public.add_and_count(p integer)  RETURNS bigint  LANGUAGE sql BEGIN ATOMIC  INSERT INTO t_new (id)    VALUES (add_and_count.p);  SELECT count(*) AS count     FROM t_new; END <\/code><\/pre>\n<p>  <\/p>\n<h2>\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0435 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h2>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2670\/\">pg_amcheck \u2015 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/866e24d4\">866e24d4<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/97060928\">97060928<\/a><\/p>\n<p>  \u041c\u043e\u0434\u0443\u043b\u044c <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/amcheck.html\">amcheck<\/a> \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0445, \u043d\u043e \u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 (\u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043c\u043c\u0438\u0442). <\/p>\n<p>  \u0410 \u043d\u043e\u0432\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/app-pgamcheck.html\">pg_amcheck<\/a> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2806\/\">\u041c\u043e\u0434\u0443\u043b\u044c pg_standby \u0443\u0434\u0430\u043b\u0435\u043d<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/514b411a\">514b411a<\/a><\/p>\n<p>  \u0412 \u044d\u043f\u043e\u0445\u0443 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b pg_standby, \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u0438 restore_command, \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0442\u0435\u043f\u043b\u043e\u0433\u043e \u0440\u0435\u0437\u0435\u0440\u0432\u0430 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u043d\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2956\/\">pg_dump &#8212;extension<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/6568cef2\">6568cef2<\/a><\/p>\n<p>  \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0441\u0430\u043c\u043e \u0437\u0430 \u0441\u0435\u0431\u044f. \u0423 pg_dump \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c. <\/p>\n<p>  \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 demo \u0435\u0441\u0442\u044c \u0441\u0445\u0435\u043c\u0430 \u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0438\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f ltree. <\/p>\n<pre><code class=\"pgsql\">CREATE SCHEMA app; CREATE EXTENSION ltree SCHEMA app; CREATE TABLE t (id int, data app.ltree); <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u0442\u043e \u0432 \u043d\u0435\u0451 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432\u0441\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0438 \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043e\u0431\u044b\u0447\u043d\u043e \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442:<\/p>\n<pre><code class=\"bash\">$ pg_dump -d demo | grep 'CREATE EXTENSION' CREATE EXTENSION IF NOT EXISTS ltree WITH SCHEMA app; <\/code><\/pre>\n<p>  \u041d\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0445\u0435\u043c\u0443 app, \u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0432 \u043d\u0435\u0439, \u0432 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u0437 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f:<\/p>\n<pre><code class=\"bash\">$ pg_dump -d demo -n app | grep 'CREATE EXTENSION' $  <\/code><\/pre>\n<p>  \u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212;extension \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c:<\/p>\n<pre><code class=\"bash\">$ pg_dump -d demo -n app --extension ltree | grep 'CREATE EXTENSION' CREATE EXTENSION IF NOT EXISTS ltree WITH SCHEMA app; <\/code><\/pre>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2822\/\">\u0424\u0443\u043d\u043a\u0446\u0438\u0438 pg_terminate_backend \u0438 pg_wait_for_backend_termination<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/aaf04325\">aaf04325<\/a><\/p>\n<p>  \u0418\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f pg_terminate_backend \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0441\u0438\u0433\u043d\u0430\u043b SIGTERM \u0441 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f. \u041d\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0435 \u0441\u0440\u0430\u0437\u0443, \u0430 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 pg_terminate_backend \u043c\u043e\u0436\u043d\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u0442\u044c \u0434\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u0415\u0441\u043b\u0438 \u0437\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0442\u043e pg_terminate_backend \u0432\u0435\u0440\u043d\u0435\u0442 \u0438\u0441\u0442\u0438\u043d\u0443, \u0438\u043d\u0430\u0447\u0435 false. <\/p>\n<p>  \u0410 \u0435\u0441\u043b\u0438 \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c (\u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435), \u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u0442\u0438\u043d\u0430 \u043a\u0430\u043a \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b SIGTERM \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043b\u044f \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f, \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 pg_wait_for_backend_termination, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u043e\u0436\u0434\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 5 \u0441\u0435\u043a\u0443\u043d\u0434.<\/p>\n<h2>\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h2>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/1677\/\">libpq: \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0440\u0435\u043f\u043b\u0438\u043a\u0435<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/ee28cacf\">ee28cacf<\/a><\/p>\n<p>  \u0412 \u0441\u0442\u0440\u043e\u043a\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f libpq \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0437\u043b\u043e\u0432. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0434\u043b\u044f \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0447\u0438\u0442\u0430\u044e\u0449\u0435\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043c\u0435\u0436\u0434\u0443 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0438 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u043c\u0438. \u041f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0443\u0437\u043b\u044b \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443, \u043f\u043e\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u0442\u0438\u043f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f <i>target_session_attrs<\/i> \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041a\u0440\u043e\u043c\u0435 any \u0438 read-write \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c:  <\/p>\n<ul>\n<li>read-only \u2015 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043b\u0438\u0431\u043e \u043a \u0440\u0435\u043f\u043b\u0438\u043a\u0435, \u043b\u0438\u0431\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <i>default_transaction_read_only<\/i>;<\/li>\n<li>primary \u2015 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0443;<\/li>\n<li>standby \u2015 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u043f\u043b\u0438\u043a\u0435;<\/li>\n<li>prefer-standby \u2015 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0440\u0435\u043f\u043b\u0438\u043a\u0443 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043d\u0435\u0439; \u0435\u0441\u043b\u0438 \u0440\u0435\u043f\u043b\u0438\u043a\u0438 \u0442\u0430\u043a \u0438 \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c, \u0442\u043e \u043f\u043e\u0439\u0442\u0438 \u043f\u043e \u0432\u0442\u043e\u0440\u043e\u043c\u0443 \u043a\u0440\u0443\u0433\u0443 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043b\u044e\u0431\u043e\u043c\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0443.<\/li>\n<\/ul>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2889\/\">\u0422\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u0432 libpq<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/198b3716\">198b3716<\/a><\/p>\n<p>  \u0414\u043b\u044f \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 libpq \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f PQtrace. \u041f\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u043d\u0438\u044e \u0441\u0430\u043c\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0435\u0451 \u0432\u044b\u0432\u043e\u0434 \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0431\u044b\u043b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u0435\u043d. \u0412 14 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f \u0432 \u043b\u0443\u0447\u0448\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443. <\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2788\/\">psql: \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \\df<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/a3027e1e\">a3027e1e<\/a><\/p>\n<p>  \u041f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c, \u043d\u043e \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0432\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 \\df \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041d\u043e \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0438\u0445 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e, \u0430 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c\u0438 \u0432\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438?<\/p>\n<p>  \u0412 \\df \u043f\u043e\u0441\u043b\u0435 \u0438\u043c\u0435\u043d\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f min \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u0430 21 \u0440\u0430\u0437. \u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043b\u044f \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0430\u043a:<\/p>\n<pre><code class=\"pgsql\">\\df min int<\/code><\/pre>\n<pre><code class=\"plaintext\">                         List of functions    Schema   | Name | Result data type | Argument data types | Type ------------+------+------------------+---------------------+------  pg_catalog | min  | integer          | integer             | agg (1 row) <\/code><\/pre>\n<p>  \u0418\u043c\u0435\u043d\u0430 \u0442\u0438\u043f\u043e\u0432 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c, \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \\dT.<\/p>\n<p>  \u0417\u0430\u043e\u0434\u043d\u043e \u0432 \\dT \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432\u044b (bookings[]) \u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0435 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f (int \u0432\u043c\u0435\u0441\u0442\u043e integer).<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2879\/\">psql: \u0432\u044b\u0445\u043e\u0434 \u0438\u0437 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0431\u0435\u0437 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/55873a00\">55873a00<\/a><\/p>\n<p>  psql \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432 \u0431\u0443\u0444\u0435\u0440 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0443\u044e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 SQL. \u041a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432 \u0431\u0443\u0444\u0435\u0440\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0432\u044b\u0437\u0432\u0430\u0432 \\\u0435. \u041d\u043e \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438, \u043d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435, \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0443\u043c\u0430\u043b\u0438 \u0438 \u0440\u0435\u0448\u0438\u043b\u0438 \u0432\u044b\u0439\u0442\u0438 \u0431\u0435\u0437 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f? \u0410 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0442 \u0447\u0442\u043e. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432 \u0431\u0443\u0444\u0435\u0440\u0435 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0436\u043d\u0435\u0439, \u043d\u043e \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430! \u0410 \u0440\u0430\u0437 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0443\u043c\u0430\u043b\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0435\u0451 \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0438\u0441\u044c.<\/p>\n<p>  \u041d\u043e\u0432\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043e\u0447\u0438\u0449\u0430\u0442\u044c \u0431\u0443\u0444\u0435\u0440 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0431\u0435\u0437 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e.<\/p>\n<p>  \u0422\u0430\u043a\u0438\u0435 \u0436\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \\e file, \\ev, \\ef.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2096\/\">psql: \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u0441\u0435\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/3a513067\">3a513067<\/a><\/p>\n<p>  \u0412 psql \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438\u0445 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438 \\;<\/p>\n<pre><code class=\"pgsql\">select 1\\; select 2;<\/code><\/pre>\n<pre><code class=\"plaintext\"> ?column? ----------         2 <\/code><\/pre>\n<p>  \u041d\u0430 \u044d\u043a\u0440\u0430\u043d \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0445\u043e\u0442\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0438\u0441\u044c \u043e\u0431\u0435.<\/p>\n<p>  \u0412 14 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u0430\u043d\u0434:<\/p>\n<pre><code class=\"pgsql\">select 1\\; select 2;<\/code><\/pre>\n<pre><code class=\"plaintext\"> ?column? ----------         1 (1 row)   ?column? ----------         2 <\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0436\u043d\u0435\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c, \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0432 \u043d\u043e\u0432\u0443\u044e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e SHOW_ALL_RESULTS.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/3001\/\">psql: \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u043e \u0442\u0430\u0431\u0443\u043b\u044f\u0446\u0438\u0438 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043e \u0434\u043b\u044f TRUNCATE<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/6b40d9bd\">6b40d9bd<\/a><\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2557\/\">pgbench: \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/aeb57af8\">aeb57af8<\/a><\/p>\n<p>  \u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 pgbench \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u043d\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0418\u043d\u0430\u0447\u0435 \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0436\u0435 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u0432\u0448\u0438\u043c\u0438 \u0441\u0435\u0430\u043d\u0441\u0430\u043c\u0438.<\/p>\n<p>  \u0421 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0410\u043d\u0434\u0440\u0435\u0441 \u0424\u0440\u043e\u0439\u043d\u0434 \u043f\u0440\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/522428\/#commit_dc7420c2\">\u0441\u0435\u0440\u0438\u0438 \u043f\u0430\u0442\u0447\u0435\u0439<\/a>, \u043f\u043e\u0432\u044b\u0448\u0430\u044e\u0449\u0438\u0445 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/1736\/\">pgbench: \u0444\u0443\u043d\u043a\u0446\u0438\u044f permute \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/6b258e3d\">6b258e3d<\/a><\/p>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0440\u0438 \u043d\u0435\u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u043c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0445\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"pgsql\">\\set r random_zipfian(0, 100000000, 1.07) \\set k abs(hash(:r)) % 1000000 <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 permute:<\/p>\n<pre><code class=\"pgsql\">\\set size 1000000 \\set r random_zipfian(1, :size, 1.07) \\set k 1 + permute(:r, :size) <\/code><\/pre>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2334\/\">ECPG: \u043d\u043e\u0432\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 DECLARE STATEMENT<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/ad8305a4\">ad8305a4<\/a><\/p>\n<p>  \u0412\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0439 SQL \u043e\u0431\u0437\u0430\u0432\u0435\u043b\u0441\u044f \u043d\u043e\u0432\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/ecpg-sql-declare-statement.html\">DECLARE STATEMENT<\/a>.<\/p>\n<h2>\u0420\u0430\u0437\u043d\u043e\u0435<\/h2>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/31\/2009\/\">\u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0430 \u0441 COPY WITH FREEZE<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/7db0cd21\">7db0cd21<\/a><\/p>\n<p>  COPY WITH FREEZE \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043c\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0437\u0430\u043c\u043e\u0440\u043e\u0436\u0435\u043d\u043d\u044b\u0435. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043d\u0435\u0442 \u043c\u0435\u0440\u0442\u0432\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u0438 \u043d\u0435\u0447\u0435\u0433\u043e \u0437\u0430\u043c\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u0442\u044c. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u0447\u0438\u0441\u0442\u043a\u0435 \u043d\u0435\u0447\u0435\u0433\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u043a\u043e\u043f\u044f\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. <\/p>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u0434\u0435\u043b\u0435 \u043d\u0430 13 \u0432\u0435\u0440\u0441\u0438\u0438. \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u043a\u043e\u043f\u0438\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u044b bookings \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 COPY WITH FREEZE.<\/p>\n<pre><code class=\"pgsql\">COPY bookings TO '\/home\/pluzanov\/pg13\/bookings.txt';  BEGIN; CREATE TABLE bookings_copy (LIKE bookings) WITH (autovacuum_enabled=off); COPY bookings_copy FROM '\/home\/pluzanov\/pg13\/bookings.txt' WITH FREEZE; COMMIT; <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0447\u0438\u0441\u0442\u043e\u0442\u044b \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0438 \u0441\u0431\u0440\u043e\u0441\u0438\u043c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443:<\/p>\n<pre><code class=\"pgsql\">CHECKPOINT; SELECT pg_stat_reset_shared('bgwriter'); <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u043e\u0447\u0438\u0441\u0442\u043a\u0443:<\/p>\n<pre><code class=\"pgsql\">VACUUM VERBOSE bookings_copy;<\/code><\/pre>\n<pre><code class=\"plaintext\">INFO:  vacuuming &quot;bookings.bookings_copy&quot; INFO:  &quot;bookings_copy&quot;: found 0 removable, 2111110 nonremovable row versions in 13447 out of 13447 pages DETAIL:  0 dead row versions cannot be removed yet, oldest xmin: 1197 There were 0 unused item identifiers. Skipped 0 pages due to buffer pins, 0 frozen pages. 0 pages are entirely empty. CPU: user: 0.49 s, system: 0.26 s, elapsed: 5.01 s. <\/code><\/pre>\n<p>  \u0421\u0443\u0434\u044f \u043f\u043e \u043e\u0442\u0447\u0435\u0442\u0443, \u043e\u0447\u0438\u0441\u0442\u043a\u0435 \u043d\u0435\u0447\u0435\u0433\u043e \u0431\u044b\u043b\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u043e \u0432\u0441\u0435\u0445 13447 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u041d\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438?<\/p>\n<p>  \u0415\u0449\u0435 \u0440\u0430\u0437 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u0431\u044b\u043b\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0441\u0431\u0440\u043e\u0441\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 (\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0435\u0439 \u043d\u0435\u0442):<\/p>\n<pre><code class=\"pgsql\">CHECKPOINT; SELECT buffers_checkpoint + buffers_clean + buffers_backend FROM   pg_stat_bgwriter;<\/code><\/pre>\n<pre><code class=\"plaintext\"> ?column? ----------     13460 <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u044d\u0442\u043e \u043d\u043e\u043c\u0435\u0440! \u0415\u0441\u0442\u044c \u0441\u0442\u043e\u0439\u043a\u043e\u0435 \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b\u0430 \u0432\u0441\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0435\u0439 \u043a\u0430\u043a \u0431\u044b \u043d\u0435\u0447\u0435\u0433\u043e \u0434\u0435\u043b\u0430\u0442\u044c. <\/p>\n<p>  \u0418 \u044d\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0412 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 COPY WITH FREEZE \u0431\u044b\u043b\u0438 \u0443\u043f\u0443\u0449\u0435\u043d\u044b \u0432\u0430\u0436\u043d\u0435\u0439\u0448\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b:  <\/p>\n<ul>\n<li>\u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0441\u0432\u043e\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u043f\u043e\u043b\u043d\u043e\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u043e\u043a \u043d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435. \u0418 \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0441\u044f, \u0445\u043e\u0442\u044f \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0437\u0430\u043c\u043e\u0440\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u0438\u0434\u0438\u043c\u044b\u043c\u0438 \u0432\u0441\u0435\u043c. \u0410 \u044d\u0442\u043e \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435.<\/li>\n<li>\u041d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u043b\u0430\u0441\u044c \u043a\u0430\u0440\u0442\u0430 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u042d\u0442\u043e \u043e\u043f\u044f\u0442\u044c \u0436\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u0447\u0438\u0441\u0442\u043a\u0435. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043a\u0430\u0440\u0442\u0430 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u0438\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445 \u0447\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u043e \u043e\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443.<\/li>\n<\/ul>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b, \u0438 \u0432 14 \u0432\u0435\u0440\u0441\u0438\u0438 COPY \u0447\u0435\u0441\u0442\u043d\u0435\u0435 \u0437\u0430\u043c\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<p>  \u0421\u0442\u043e\u043b\u044c \u0432\u0430\u0436\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043d\u0435\u0437\u0430\u0441\u043b\u0443\u0436\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u043e \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0441\u0435\u0440\u0438\u0438, \u0432\u0435\u0434\u044c \u043f\u0430\u0442\u0447 \u043f\u0440\u0438\u043d\u044f\u043b\u0438 \u0435\u0449\u0435 \u0432 \u044f\u043d\u0432\u0430\u0440\u0441\u043a\u043e\u043c \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0435.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2880\/\">COPY FROM: \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/f82de5c4\">f82de5c4<\/a><\/p>\n<p>  \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 COPY FROM \u043c\u043e\u0436\u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e, \u0430 \u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0443\u043f\u043d\u044b\u043c\u0438 \u0447\u0430\u0441\u0442\u044f\u043c\u0438. \u0427\u0442\u043e \u0438 \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e. <\/p>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043f\u0440\u0435\u0440\u0435\u043a\u0432\u0438\u0437\u0438\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b: \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f COPY FROM \u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2709\/\">\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 ssl_crl_dir \u2015 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043e\u0442\u0437\u044b\u0432\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432 (CRL, Certificate Revocation List) \u0434\u043b\u044f SSL-\u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/f5465fad\">f5465fad<\/a><\/p>\n<p>  \u0420\u0430\u043d\u044c\u0448\u0435 \u0444\u0430\u0439\u043b \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043e\u0442\u0437\u044b\u0432\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432 \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <i>ssl_crl_file<\/i> \u0438\u043b\u0438 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 <i>sslcrl<\/i> \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f libpq. \u0422\u0435\u043f\u0435\u0440\u044c, \u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u044d\u0442\u043e\u043c\u0443 \u0441\u043f\u043e\u0441\u043e\u0431\u0443, \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u0449\u0435 \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 <i>ssl_crl_dir<\/i> \u0438\u043b\u0438 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 <i>sslcrldir<\/i> \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/3003\/\">pg_upgrade: \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 \u0443\u0442\u0438\u043b\u0438\u0442 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/f06b1c59\">f06b1c59<\/a><\/p>\n<p>  \u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 pg_upgrade \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u0430\u043c\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b pg_upgrade \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u0435\u0440\u0441\u0438\u044f pg_upgrade \u0441\u0432\u0435\u0440\u044f\u043b\u0430\u0441\u044c \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 pg_ctl. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u043b\u0438 \u0438 \u0441\u0442\u0430\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u044e pg_ctl, \u043d\u043e \u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438: initdb, pg_dump, pg_dumpall, pg_restore, psql, vacuumdb, pg_controldata, postgres.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/3021\/\">\u0421\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a \u0432 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/4aea704a\">4aea704a<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/0c3405cf\">0c3405cf<\/a><\/p>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0422\u043e\u043c \u041b\u0435\u0439\u043d \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0442\u0430\u043a\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435:<\/p>\n<pre><code class=\"pgsql\">SELECT regexp_match('foof', '(^f)o*\\1'); <\/code><\/pre>\n<p>  \u0412 13 \u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438 \\1 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 (^f), \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c ^, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0439\u0434\u0435\u043d \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0432 POSIX \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u0441\u044f \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043a\u0430\u0445, \u0438 \u0432 14 \u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430\u0439\u0434\u0435\u0442 \u0432\u0442\u043e\u0440\u0443\u044e f:<\/p>\n<pre><code class=\"pgsql\">SELECT regexp_match('foof', '(^f)o*\\1');<\/code><\/pre>\n<pre><code class=\"plaintext\"> regexp_match  --------------  {f} <\/code><\/pre>\n<p>  \u0410 \u0437\u0430\u043e\u0434\u043d\u043e (\u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u043c\u043c\u0438\u0442) \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u0430 \u0443\u043b\u0443\u0447\u0448\u0438\u043b\u0438.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/32\/2984\/\">\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/08c0d6ad\">08c0d6ad<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/824bf719\">824bf719<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/cebc1d34\">cebc1d34<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/58104308\">58104308<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/ea1268f6\">ea1268f6<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/2a0af7fe\">2a0af7fe<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/0fc1af17\">0fc1af17<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/4604f83f\">4604f83f<\/a><\/p>\n<p>  \u0422\u043e\u043c \u041b\u0435\u0439\u043d \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043b\u0441\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c \u043f\u0430\u0442\u0447\u0435\u043c \u0438 \u0440\u0435\u0448\u0438\u043b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0420\u0430\u0431\u043e\u0442\u0430 \u0432\u044b\u043b\u0438\u043b\u0430\u0441\u044c \u0432 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0441\u0435\u0440\u0438\u044e \u043f\u0430\u0442\u0447\u0435\u0439.<\/p>\n<hr>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0451. \u0412\u044b\u0445\u043e\u0434 PostgreSQL 14 \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0441\u0435\u043d\u044c\u044e, \u043d\u0443 \u0430 \u0432 \u0438\u044e\u043b\u0435 \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0435\u043c \u043f\u0430\u0442\u0447\u0435\u0439 \u0432 15 \u0432\u0435\u0440\u0441\u0438\u044e. \u0416\u0434\u0435\u043c \u0441 \u043d\u0435\u0442\u0435\u0440\u043f\u0435\u043d\u0438\u0435\u043c!<\/p><\/div>\n<p> \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\/company\/postgrespro\/blog\/550632\/\"> https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/550632\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">8 \u0430\u043f\u0440\u0435\u043b\u044f 2021 \u0433. \u0432 15:00 \u043f\u043e \u043c\u043e\u0441\u043a\u043e\u0432\u0441\u043a\u043e\u043c\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f \u043c\u0430\u0440\u0442\u043e\u0432\u0441\u043a\u0438\u0439 \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442, \u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0438\u043c \u0438 \u043f\u0440\u0438\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 PostgreSQL 14. <\/p>\n<p>  \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0432\u0441\u0451 \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043e \u043f\u0435\u0440\u0432\u044b\u0445 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u0441\u0435\u0440\u0438\u0438: <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/510124\/\">\u0438\u044e\u043b\u044c\u0441\u043a\u0438\u0439<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/522428\/\">\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c\u0441\u043a\u0438\u0439<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/533058\/\">\u043d\u043e\u044f\u0431\u0440\u044c\u0441\u043a\u0438\u0439<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/541252\/\">\u044f\u043d\u0432\u0430\u0440\u0441\u043a\u0438\u0439<\/a>.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u043f\u043e\u0439\u0434\u0435\u0442 \u0440\u0435\u0447\u044c \u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c, \u043c\u0430\u0440\u0442\u043e\u0432\u0441\u043a\u043e\u043c. \u0417\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e, \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u0430\u044f. \u041d\u043e \u043f\u043b\u043e\u0445\u043e \u043b\u0438 \u044d\u0442\u043e? \u0427\u0435\u043c \u0434\u043b\u0438\u043d\u043d\u0435\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u043e\u0432\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439, \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435 PostgreSQL 14! \u042d\u0442\u043e \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u0410 \u0441 \u0434\u0440\u0443\u0433\u043e\u0439, \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0441\u0451 \u043f\u043e\u0434\u0440\u044f\u0434 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u0434\u043e \u043a\u043e\u043d\u0446\u0430. \u0422\u0435\u043a\u0441\u0442 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0430\u0442\u0447\u0435\u0439. \u0412 \u043b\u044e\u0431\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f, \u0441 \u043b\u044e\u0431\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0447\u0430\u0442\u044c.<\/p>\n<p>  \u0410 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0441\u0442\u044c \u043e \u0447\u0435\u043c. \u041d\u0435 \u0432\u0435\u0440\u0438\u0442\u0435? \u0412\u043e\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u0437\u0430\u0441\u044b\u043f\u043a\u0443:<\/p>\n<ul>\n<li>\u041c\u043e\u0436\u0435\u0442 \u043b\u0438 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445?<\/li>\n<li>\u041a\u0430\u043a \u043d\u0430\u0439\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438\u0437 pg_stat_activity \u0432 pg_stat_statements?<\/li>\n<li>\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0438 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0441\u0435\u043a\u0446\u0438\u0438 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435?<\/li>\n<li>\u041a\u0430\u043a \u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0430 \u043f\u0440\u043e\u0434 \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043c\u043e\u0433\u043b\u0438 \u0432\u0441\u0451 \u0432\u0438\u0434\u0435\u0442\u044c, \u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u043e\u0433\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c?<\/li>\n<li>\u041f\u043e\u0447\u0435\u043c\u0443 VACUUM \u043f\u043e\u0441\u043b\u0435 COPY FREEZE \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u0447\u0442\u043e \u0441 \u044d\u0442\u0438\u043c \u0434\u0435\u043b\u0430\u0442\u044c?<\/li>\n<li>\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0441\u0436\u0438\u043c\u0430\u0442\u044c TOAST \u0447\u0435\u043c-\u0442\u043e \u043a\u0440\u043e\u043c\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0433\u043e zlib?<\/li>\n<li>\u041a\u0430\u043a \u043f\u043e\u043d\u044f\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043b\u0438\u0442\u0441\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u0430\u044f \u0432 pg_locks?<\/li>\n<li>\u0414\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0443\u0436\u043d\u044b CYCLE \u0438 SEARCH \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443?<\/li>\n<li>\u0422\u0435\u043a\u0441\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0430 \u043a\u0430\u043a\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 (\u043a\u0440\u043e\u043c\u0435 C) \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435?<\/li>\n<\/ul>\n<p>  \u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c.  <\/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-321520","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/321520","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=321520"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/321520\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=321520"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=321520"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=321520"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}