{"id":384856,"date":"2024-06-29T05:46:09","date_gmt":"2024-06-29T05:46:09","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=384856"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-06-29T05:46:09","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=384856","title":{"rendered":"<span>PostgreSQL 15: \u0427\u0430\u0441\u0442\u044c 1 \u0438\u043b\u0438 \u041a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442 2021-07<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\u0417\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f \u0438\u044e\u043b\u044c, \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u044b\u0439 \u0436\u0430\u0440\u043a\u0438\u0439 \u043c\u0435\u0441\u044f\u0446 \u0433\u043e\u0434\u0430, \u043d\u043e \u0438 \u043c\u0435\u0441\u044f\u0446 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 PostgreSQL. \u0421\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u0432\u0435\u0436\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"pgsql\">SELECT version();<\/code><\/pre>\n<pre><code class=\"plaintext\">                          version                            ------------------------------------------------------------  PostgreSQL 15devel on x86_64-pc-linux-gnu, compiled by gcc  (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, 64-bit <\/code><\/pre>\n<p>  \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043e 14 \u0432\u0435\u0440\u0441\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445: <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/510124\/\">2020-07<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/522428\/\">2020-09<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/533058\/\">2020-11<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/541252\/\">2021-01<\/a> \u0438 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/550632\/\">2021-03<\/a>.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>PostgreSQL 14<\/h2>\n<p>  \u0410 \u043d\u0430\u0447\u0430\u0442\u044c \u0441\u0442\u043e\u0438\u0442 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0430\u0442\u0447\u0435\u0439 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0432 14 \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0438 \u043a\u043e\u0434\u0430 8 \u0430\u043f\u0440\u0435\u043b\u044f (\u043b\u0438\u0431\u043e \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0445 \u043c\u043d\u043e\u044e \u0440\u0430\u043d\u044c\u0448\u0435). \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0438 \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u0442\u0447\u0438.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/33\/3039\/\">\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 recovery_init_sync_method<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/61752afb\">61752afb<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/34a8b64b\">34a8b64b<\/a><\/p>\n<p>  \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u044f \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0444\u0430\u0439\u043b \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u0434\u0438\u0441\u043a\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c fsync. \u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u043c\u043d\u043e\u0433\u043e, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. <\/p>\n<p>  \u0414\u043b\u044f linux \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0442\u044c \u0432 \u043d\u043e\u0432\u043e\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 <a href=\"https:\/\/www.postgresql.org\/docs\/14\/runtime-config-error-handling.html#GUC-RECOVERY-INIT-SYNC-METHOD\">recovery_init_sync_method<\/a> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 syncfs. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>  <b>\u0422\u0435\u043b\u0430 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 SQL \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043a \u0444\u043e\u0440\u043c\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 SQL<\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/767982e3\">767982e3<\/a><\/p>\n<p>  <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/550632#commit_e717a9a1\">\u0412\u0430\u0436\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435<\/a> 14 \u0432\u0435\u0440\u0441\u0438\u0438 \u2015 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0442\u0435\u043b\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 SQL \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c SQL. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u043c\u043c\u0438\u0442\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0443.<\/p>\n<p>  \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 age:<\/p>\n<pre><code class=\"pgsql\">\\sf age(timestamptz)<\/code><\/pre>\n<pre><code class=\"plaintext\">CREATE OR REPLACE FUNCTION pg_catalog.age(timestamp with time zone)  RETURNS interval  LANGUAGE sql  STABLE PARALLEL SAFE STRICT COST 1 RETURN age((CURRENT_DATE)::timestamp with time zone, $1) <\/code><\/pre>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/33\/3153\/\">\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0441 OUT-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/e56bce5d\">e56bce5d<\/a><\/p>\n<p>  \u0412 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/533058#commit_2453ea14\">\u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/a> OUT-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c, \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u0432\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u043d\u043e \u0440\u0430\u0437\u043d\u044b\u043c\u0438 OUT-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438:<\/p>\n<pre><code class=\"pgsql\">CREATE PROCEDURE p (a out int) LANGUAGE SQL AS 'SELECT 42'; CREATE PROCEDURE p (a out int, b out int) LANGUAGE SQL AS 'SELECT 42,42'; <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0442\u043e\u0440\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u044b\u0434\u0430\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0443:<\/p>\n<pre><code class=\"plaintext\">ERROR:  function \"p\" already exists with same argument types <\/code><\/pre>\n<p>  \u041c\u0438\u0440 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043f\u0440\u0435\u0436\u043d\u0438\u043c, \u0430 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u0445\u0440\u0430\u043d\u0438\u043c\u044b\u0445 \u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0432\u0441\u0451 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0442\u0438\u043f\u043e\u0432 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.<\/p>\n<p>  <b>\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 Result Cache -> Memoize<\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/83f4fcc6\">83f4fcc6<\/a><\/p>\n<p>  \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0432 14 \u0432\u0435\u0440\u0441\u0438\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/550632#commit_9eacee2e\">\u0443\u0437\u043b\u0430 \u043f\u043b\u0430\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u00abResult Cache\u00bb<\/a> \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u00abenable_resultcache\u00bb \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u043c\u0438. \u041f\u043e\u043a\u0430 14 \u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0435 \u0432\u044b\u0448\u043b\u0430 \u0440\u0435\u0448\u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c: \u0443\u0437\u0435\u043b \u00abMemoize\u00bb \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u00abenable_memoize\u00bb.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/33\/3061\/\">\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 force_parallel_mode \u00ab\u0441\u043f\u0440\u044f\u0442\u0430\u043b\u0438\u00bb<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/ac725ee0\">ac725ee0<\/a><\/p>\n<p>  \u041d\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 PostgreSQL \u043f\u0440\u0438 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 postgresql.conf:<\/p>\n<pre><code class=\"plaintext\">#force_parallel_mode = off <\/code><\/pre>\n<p>  \u0438\u043d\u043e\u0439 \u0440\u0430\u0437 \u0443\u0431\u0438\u0440\u0430\u044e\u0442 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u0432\u0435\u0434\u044c \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u044d\u0442\u043e \u0437\u0434\u043e\u0440\u043e\u0432\u043e. \u041d\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 force_parallel_mode \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0441\u0438\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u0430\u0434\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u044a\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e \u0434\u043b\u044f OLTP \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441 \u0431\u044b\u0441\u0442\u0440\u044b\u043c\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0440\u0435\u0434\u043d\u0430. <\/p>\n<p>  \u041d\u043e \u0434\u0435\u043b\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0432 \u044d\u0442\u043e\u043c. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <a href=\"https:\/\/www.postgresql.org\/docs\/14\/runtime-config-developer.html#GUC-FORCE-PARALLEL-MODE\">force_parallel_mode<\/a> \u043d\u0443\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0430 \u043c\u043e\u0436\u0435\u0442 \u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0438 \u043a\u0430\u043a\u043e\u0439 \u043f\u043b\u0430\u043d \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u0412 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d.<\/p>\n<p>  \u0412\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u0435 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0443\u0431\u0440\u0430\u043b\u0438 \u0438\u0437 postgresql.conf, \u0430 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u043b\u0438 \u0432 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e <a href=\"https:\/\/www.postgresql.org\/docs\/14\/runtime-config-developer.html\">Developer Options<\/a>.<\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 pg_stat_replication_slots<\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/98681675\">98681675<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/8e90ec55\">8e90ec55<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/f5fc2f5b\">f5fc2f5b<\/a><\/p>\n<p>  \u041d\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0441\u043b\u043e\u0442\u043e\u0432 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u2015 <a href=\"https:\/\/www.postgresql.org\/docs\/14\/monitoring-stats.html#MONITORING-PG-STAT-REPLICATION-SLOTS-VIEW\">pg_stat_replication_slots<\/a> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043b\u043e\u0442. \u041d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u043c\u0443\u044e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043a\u0430\u043a \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0442\u0430, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0440\u0430\u0437\u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 pg_stat_reset_replication_slot.<\/p>\n<p>  <b>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439: expr [NOT] IN (list)<\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/50e17ad2\">50e17ad2<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/29f45e29\">29f45e29<\/a><\/p>\n<p>  \u041f\u043e\u0438\u0441\u043a \u043f\u043e \u0434\u043b\u0438\u043d\u043d\u043e\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c\u0438 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u043b\u0433\u043e. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043f\u043e\u0438\u0449\u0435\u043c \u0431\u0438\u043b\u0435\u0442\u044b \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u043a\u043e\u0434\u043e\u0432 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412 \u0441\u043f\u0438\u0441\u043a\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u043a\u043e\u043b\u043e \u0442\u044b\u0441\u044f\u0447\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<pre><code class=\"pgsql\">13=# SELECT count(*) FROM bookings WHERE total_amount > 500000; <\/code><\/pre>\n<pre><code class=\"plaintext\"> count -------    998 <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0438\u0448\u0435\u043c \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e psql:<\/p>\n<pre><code class=\"pgsql\">SELECT string_agg(format('%L',book_ref), ',') AS book_ref_list FROM bookings WHERE total_amount > 500000\\gset <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u0430 \u043a\u0435\u0448\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043c\u0435\u0440:<\/p>\n<pre><code class=\"pgsql\">13=# SELECT count(*) FROM tickets WHERE book_ref IN (:book_ref_list); <\/code><\/pre>\n<pre><code class=\"plaintext\"> count -------   2679 (1 row)  Time: 3321,698 ms (00:03,322) <\/code><\/pre>\n<p>  \u041d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443, \u0430 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u0430 \u0437\u0430\u0442\u0435\u043c \u0438\u0441\u043a\u0430\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0432 \u044d\u0442\u043e\u0439 \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0435. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u0442\u0441\u044f. \u0422\u043e\u0442 \u0436\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 14 \u0432\u0435\u0440\u0441\u0438\u0438:<\/p>\n<pre><code class=\"pgsql\">14=# SELECT count(*) FROM tickets WHERE book_ref IN (:book_ref_list); <\/code><\/pre>\n<pre><code class=\"plaintext\"> count -------   2679 (1 row)  Time: 27,357 ms <\/code><\/pre>\n<p>  \u041f\u043b\u0430\u043d\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430, \u043e\u043d\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0432 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u043c\u043c\u0438\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u044d\u0442\u0443 \u0436\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0441 \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044e NOT IN(list), \u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0443\u0436\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 15 \u0432\u0435\u0440\u0441\u0438\u0438.<\/p>\n<p>  <b>\u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043e\u0442\u043a\u0430\u0442\u0438\u043b\u0438 \u00ab\u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0430 \u0441 COPY WITH FREEZE\u00bb<\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/8e03eb92\">8e03eb92<\/a><\/p>\n<p>  \u0420\u0430\u0431\u043e\u0442\u0430 \u00ab<a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/550632#commit_7db0cd21\">\u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0430 \u0441 COPY WITH FREEZE\u00bb<\/a> \u0438\u0437 \u043c\u0430\u0440\u0442\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0430 \u0431\u044b\u043b\u0430 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u0430. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0437\u0430\u043c\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 COPY WITH FREEZE \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e, \u0442\u043e \u0432\u043e\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f TOAST-\u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<p>  <b>\u041e\u0442\u043a\u0430\u0442\u0438\u043b\u0438 \u00ab\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0439 \u043f\u0440\u0430\u0432\u0438\u043b \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432\u00bb<\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/ec483147\">ec483147<\/a><\/p>\n<p>  \u0420\u0430\u0431\u043e\u0442\u0430 \u00ab<a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/533058#commit_ec483147\">\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0439 \u043f\u0440\u0430\u0432\u0438\u043b \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432<\/a>\u00bb \u0438\u0437 \u043d\u043e\u044f\u0431\u0440\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0430 \u0431\u044b\u043b\u0430 \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u0430.<\/p>\n<p>  <b>\u041e\u0442\u043a\u0430\u0442\u0438\u043b\u0438 \u00ab\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\u00bb<\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/c2dc1934\">c2dc1934<\/a><\/p>\n<p>  \u0420\u0430\u0431\u043e\u0442\u0430 \u00ab<a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/550632#commit_c2dc1934\">\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>\u00bb \u0438\u0437 \u043c\u0430\u0440\u0442\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0430 \u0431\u044b\u043b\u0430 \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u0430.<\/p>\n<p>  <b>\u041e\u0442\u043a\u0430\u0442\u0438\u043b\u0438 \u00abpsql: \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\u00bb<\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/fae65629ce\">fae65629ce<\/a><\/p>\n<p>  \u0420\u0430\u0431\u043e\u0442\u0430 \u00ab<a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/550632#commit_fae65629\">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>\u00bb \u0438\u0437 \u043c\u0430\u0440\u0442\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0430 \u0431\u044b\u043b\u0430 \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u0430.<\/p>\n<h2>PostgreSQL 15<\/h2>\n<p>  \u0421 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u043c\u0438 \u0434\u043b\u044f 14 \u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438, \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0432 15 \u0432\u0435\u0440\u0441\u0438\u0438.<\/p>\n<h3>\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h3>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/33\/2539\/\">psql: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u0438\u043a\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \\watch<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/7c09d279\">7c09d279<\/a><\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u2014 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c psql. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f PSQL_PAGER (\u0438\u043b\u0438 PAGER). <\/p>\n<p>  \u041a \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0449\u0438\u043a\u0430\u043c \u0432 UNIX \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f less \u0438 \u0435\u0451 \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u0446\u0430 more. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0433\u043e\u0434\u044b \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 psql \u043d\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u0430 <a href=\"https:\/\/github.com.cnpmjs.org\/okbob\/pspg\">pspg<\/a> \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0447\u0435\u0448\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u041f\u0430\u0432\u043b\u0430 \u0421\u0442\u0435\u0445\u0443\u043b\u0435.<\/p>\n<p>  pspg \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e (\\?, \\help), \u043d\u043e \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435. \u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043d\u043e\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f PSQL_WATCH_PAGER \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \\watch.<\/p>\n<p>  \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 pspg \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432 \u0434\u0435\u043b\u0435 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430:<\/p>\n<pre><code class=\"pgsql\">\\setenv PSQL_WATCH_PAGER 'pspg --stream' \\x SELECT * FROM pg_stat_database WHERE datname = current_database()\\watch 1 <\/code><\/pre>\n<p>  \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f Unix.<\/p>\n<h3>\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/h3>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/33\/3190\/\">\u041d\u043e\u0432\u0430\u044f \u0433\u043b\u0430\u0432\u0430 \u043e \u0445\u0435\u0448-\u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0445<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/e360aa05\">e360aa05<\/a><\/p>\n<p>  \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 10 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0445\u0435\u0448-\u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0440\u0435\u043b\u0438\u0437\u0430 \u043a \u0440\u0435\u043b\u0438\u0437\u0443. \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0445\u043e\u0442\u044c \u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u043d\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/hash-index.html\">\u0433\u043b\u0430\u0432\u0430<\/a> \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438.<\/p>\n<h3>\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433<\/h3>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/33\/3104\/\">EXPLAIN: pg_temp \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0445\u0435\u043c\u044b \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441\u0435\u0430\u043d\u0441\u0430<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/48c5c906\">48c5c906<\/a><\/p>\n<p>  EXPLAIN \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c VERBOSE \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u0447\u043d\u043e\u0435 \u0438\u043c\u044f \u0441\u0445\u0435\u043c\u044b \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441\u0435\u0430\u043d\u0441\u0430:<\/p>\n<pre><code class=\"pgsql\">14=# CREATE TEMP TABLE t (id int); 14=# EXPLAIN(VERBOSE) SELECT * FROM t; <\/code><\/pre>\n<pre><code class=\"plaintext\">                          QUERY PLAN                            ---------------------------------------------------------------  Seq Scan on pg_temp_4.t  (cost=0.00..35.50 rows=2550 width=4)    Output: id <\/code><\/pre>\n<p>  \u041d\u043e \u0438\u0437-\u0437\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0442\u0440\u0443\u0434\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u044b, \u0432\u0435\u0434\u044c \u0438\u043c\u044f \u0441\u0445\u0435\u043c\u044b \u043c\u043e\u0436\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u043e\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e pg_temp:<\/p>\n<pre><code class=\"pgsql\">15=# EXPLAIN(VERBOSE) SELECT * FROM t; <\/code><\/pre>\n<pre><code class=\"plaintext\">                         QUERY PLAN                           -------------------------------------------------------------  Seq Scan on pg_temp.t  (cost=0.00..35.50 rows=2550 width=4)    Output: id <\/code><\/pre>\n<p>  \u0414\u0430 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0441\u043c\u0443\u0449\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0441\u0445\u0435\u043c\u0443 \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u0435\u0430\u043d\u0441\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c:<\/p>\n<pre><code class=\"pgsql\">SELECT pg_my_temp_schema()::regnamespace; <\/code><\/pre>\n<pre><code class=\"plaintext\"> pg_my_temp_schema -------------------  pg_temp_4 <\/code><\/pre>\n<p>  <\/p>\n<h3>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/h3>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/33\/2973\/\">psql \\copy from \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u0430\u043a\u0435\u0442\u044b \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/eec57115\">eec57115<\/a><\/p>\n<p>  \u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u0430\u0441\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u0430\u043a\u0435\u0442\u043e\u043c. \u042d\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0437\u0434\u043e\u0440\u043e\u0432\u043e, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u00ab\u0443\u0437\u043a\u0438\u0445\u00bb \u0442\u0430\u0431\u043b\u0438\u0446 \u2015 \u0441 \u043c\u0430\u043b\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. <\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0430\u043a\u0435\u0442\u044b \u043f\u043e 8 \u043a\u0431.<\/p>\n<p>  <a name=\"commit_4035cd5d\"><\/a><b><a href=\"https:\/\/commitfest.postgresql.org\/33\/3015\">wal_compression = lz4<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/4035cd5d\">4035cd5d<\/a><\/p>\n<p>  \u0414\u043b\u044f \u0441\u0436\u0430\u0442\u0438\u044f \u043f\u043e\u043b\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 WAL \u043d\u0443\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 wal_compression:<\/p>\n<pre><code class=\"pgsql\">14=# SELECT name, setting, vartype, enumvals FROM pg_settings WHERE name = 'wal_compression'; <\/code><\/pre>\n<pre><code class=\"plaintext\">      name       | setting | vartype | enumvals -----------------+---------+---------+----------  wal_compression | off     | bool    | <\/code><\/pre>\n<p>  \u041d\u043e \u0434\u043b\u044f \u0441\u0436\u0430\u0442\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f pglz. \u041d\u0435 \u0431\u044b\u043b\u043e \u0432\u044b\u0431\u043e\u0440\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 \u0441\u0436\u0430\u0442\u0438\u044f \u0434\u043e 15 \u0432\u0435\u0440\u0441\u0438\u0438. A \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f:<\/p>\n<pre><code class=\"pgsql\">15=# SELECT name, setting, vartype, enumvals FROM pg_settings WHERE name = 'wal_compression'; <\/code><\/pre>\n<pre><code class=\"plaintext\">      name       | setting | vartype |     enumvals       -----------------+---------+---------+-------------------  wal_compression | off     | enum    | {pglz,lz4,on,off} <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/550632\/#commit_bbe0a81d\">\u0441\u0436\u0430\u0442\u0438\u0435\u043c TOAST<\/a> \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 lz4 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e pglz \u043d\u0435 \u0432 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0441\u0436\u0430\u0442\u0438\u044f, \u0430 \u0432 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440.<\/p>\n<p>  \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 on \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u044b\u0431\u043e\u0440\u0443 pglz.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/33\/3075\/\">\u0421\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 pg_depend, pg_shdepend<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/a49d0812\">a49d0812<\/a><\/p>\n<p>  \u041e\u0434\u043d\u0430 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u2015 pg_depend. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0434\u043b\u044f \u043d\u0435\u0451 \u0442\u0430\u043a \u0438 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/541252#commit_dfb75e47\">\u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c<\/a>. \u0410 \u0435\u0441\u043b\u0438 \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u044c \u043b\u044e\u0431\u043e\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"pgsql\">14=# SELECT count(*) AS total,             count(*) FILTER (WHERE deptype = 'p') AS count_p FROM pg_depend; <\/code><\/pre>\n<pre><code class=\"plaintext\"> total | count_p -------+---------   8903 |    6995 <\/code><\/pre>\n<p>  \u0427\u0442\u043e \u0436\u0435 \u044d\u0442\u043e \u0437\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441 deptype=&#8217;p&#8217;, \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b? \u042d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u0438 \u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0443\u0434\u0430\u043b\u044f\u0442\u044c. \u0422.\u0435. \u044d\u0442\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043c\u0435\u0442\u043a\u0430 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435\u043b\u044c\u0437\u044f \u0443\u0434\u0430\u043b\u044f\u0442\u044c. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e\u043c\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u0438 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u044d\u0442\u043e\u0442 \u0442\u0438\u043f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u0412 15 \u0432\u0435\u0440\u0441\u0438\u0438 \u0440\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e \u043e\u0442 \u0442\u0430\u043a\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u0435\u0433\u043e OID, \u0432\u0435\u0434\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0432\u044b\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0432\u043e \u0432\u0440\u0435\u043c\u044f initdb \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d.<\/p>\n<pre><code class=\"pgsql\">15=# SELECT count(*) AS total,             count(*) FILTER (WHERE deptype = 'p') AS count_p <\/code><\/pre>\n<pre><code class=\"plaintext\"> total | count_p -------+---------   1908 |       0 <\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0432 pg_shdepend. \u041d\u043e \u0442\u0430\u043c \u0438 \u0431\u044b\u043b\u043e-\u0442\u043e \u0432\u0441\u0435\u0433\u043e 12 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438 \u0432\u0441\u0435 \u0441 deptype=&#8217;p&#8217;. \u0421\u0435\u0439\u0447\u0430\u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0443\u0441\u0442\u043e\u0439.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/33\/3082\/\">\u0421\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u043c, \u0441 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/64919aaa\">64919aaa<\/a><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0442\u043e\u0447\u043d\u0435\u0435, \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c \u043e\u0434\u043d\u043e \u0432 \u0434\u0440\u0443\u0433\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u043c \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b\u043e\u0441\u044c \u0441 O(N^3) \u043d\u0430 O(N^2).<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/33\/3137\/\">\u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 pg_checksums &#8212;enable<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/4c9f50d1\">4c9f50d1<\/a><\/p>\n<p>  pg_checksums \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443 \u0431\u043b\u043e\u043a\u0430, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0443\u0436\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0432 \u0431\u043b\u043e\u043a\u0435. \u0420\u0430\u043d\u044c\u0448\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435. \u0412 \u0432\u044b\u0432\u043e\u0434\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u043e\u043a\u043e\u0432 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043e \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e.<\/p>\n<p>  \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u043f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 pg_checksums &#8212;enable, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/33\/3171\/\">postgres_fdw: \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 CASE \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/5d44fff0\">5d44fff0<\/a><\/p>\n<p>  \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 CASE \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 aircrafts_data \u2015 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u044f\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0441\u0442\u043e\u043b\u0431\u0435\u0446 range_type \u2014 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f \u0434\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u0435\u0442\u0430:<\/p>\n<pre><code class=\"pgsql\">ALTER TABLE aircrafts_data     ADD COLUMN range_type text            CHECK (range_type IN ('local', 'short', 'mid', 'long')); <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446:<\/p>\n<pre><code class=\"pgsql\">14=# EXPLAIN (VERBOSE, COSTS OFF) UPDATE aircrafts_data SET body_type = CASE WHEN range &lt;  1000 THEN 'local'                      WHEN range >= 1000 AND range &lt; 2500 THEN 'short'                      WHEN range >= 2500 AND range &lt; 6000 THEN 'mid'                      WHEN range >= 6000 THEN 'long'                 END; <\/code><\/pre>\n<pre><code class=\"plaintext\">                                QUERY PLAN -----------------------------------------------------------------------------------  Update on public.aircrafts_data    Remote SQL: UPDATE bookings.aircrafts_data SET body_type = $2 WHERE ctid = $1    ->  Foreign Scan on public.aircrafts_data          Output: CASE WHEN (range &lt; 1000) THEN 'local'::text                  WHEN ((range >= 1000) AND (range &lt; 2500)) THEN 'short'::text                  WHEN ((range >= 2500) AND (range &lt; 6000)) THEN 'mid'::text                  WHEN (range >= 6000) THEN 'long'::text ELSE NULL::text                  END, ctid, aircrafts_data.*          Remote SQL: SELECT aircraft_code, model, range, body_type, range_type, ctid                       FROM bookings.aircrafts_data FOR UPDATE <\/code><\/pre>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0440\u043e\u0441 (\u0441 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u0441\u0442\u0440\u043e\u043a), \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 CASE \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b UPDATE \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c postgres_fdw \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 CASE \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440. \u041f\u043b\u0430\u043d \u0442\u043e\u0433\u043e \u0436\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430:<\/p>\n<pre><code class=\"pgsql\">15=# EXPLAIN (VERBOSE, COSTS OFF) UPDATE aircrafts_data SET body_type = CASE WHEN range &lt;  1000 THEN 'local'                      WHEN range >= 1000 AND range &lt; 2500 THEN 'short'                      WHEN range >= 2500 AND range &lt; 6000 THEN 'mid'                      WHEN range >= 6000 THEN 'long'                 END; <\/code><\/pre>\n<pre><code class=\"plaintext\">                                QUERY PLAN -----------------------------------------------------------------------------------  Update on public.aircrafts_data    ->  Foreign Update on public.aircrafts_data          Remote SQL: UPDATE bookings.aircrafts_data SET body_type = (                        CASE WHEN (range &lt; 1000) THEN 'local'::text                        WHEN ((range >= 1000) AND (range &lt; 2500)) THEN 'short'::text                        WHEN ((range >= 2500) AND (range &lt; 6000)) THEN 'mid'::text                        WHEN (range >= 6000) THEN 'long'::text ELSE NULL::text END                      ) <\/code><\/pre>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/33\/3225\/\">\u0421\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/475dbd0b\">475dbd0b<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/db632fbc\">db632fbc<\/a><\/p>\n<p>  \u0412\u0440\u0435\u043c\u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u0432 \u0442\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0438\u0437 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0435\u043a\u0446\u0438\u0439 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435, \u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u043e\u0434\u043d\u0443 \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0446\u0438\u0439. \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0437\u0430 \u0441\u0447\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043a\u0430\u0440\u0442 \u0434\u043b\u044f \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u0441\u0435\u043a\u0446\u0438\u0439, \u043f\u043e\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0445 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e. <\/p>\n<p>  \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u043b\u044e\u0441\u043e\u043c \u0441\u0442\u0430\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0435\u043a\u0446\u0438\u0439. \u0420\u0435\u0447\u044c \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 \u0441 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043a\u043e\u0433\u0434\u0430 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0435\u043a\u0446\u0438\u044f\u0445 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439. <\/p>\n<p>  \u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f \u043f\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0443 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/456716#sort_using_index\">\u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c<\/a> \u0435\u0449\u0435 \u0432 12 \u0432\u0435\u0440\u0441\u0438\u0438. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>  \u0421\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e \u043a\u043b\u044e\u0447\u0443 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE seasons (month_num int) PARTITION BY LIST (month_num); CREATE TABLE winter PARTITION OF seasons FOR VALUES IN (12,1,2); CREATE TABLE spring PARTITION OF seasons FOR VALUES IN (3,4,5); CREATE TABLE summer PARTITION OF seasons FOR VALUES IN (6,7,8); CREATE TABLE fall   PARTITION OF seasons FOR VALUES IN (9,10,11); CREATE INDEX ON seasons (month_num); <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0446\u0435\u043b\u0435\u0439 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u0443\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438:<\/p>\n<pre><code class=\"pgsql\">SET enable_bitmapscan=off; SET enable_sort=off; <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0440\u043e\u0441 \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0432\u0442\u043e\u0440\u043e\u0439 \u0438 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0441\u0435\u043a\u0446\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"pgsql\">EXPLAIN (COSTS OFF) SELECT * FROM seasons WHERE month_num IN (4,5,6,7) ORDER BY month_num; <\/code><\/pre>\n<pre><code class=\"plaintext\">                              QUERY PLAN                               ----------------------------------------------------------------------  Append    ->  Index Only Scan using spring_month_num_idx on spring seasons_1          Index Cond: (month_num = ANY ('{4,5,6,7}'::integer[]))    ->  Index Only Scan using summer_month_num_idx on summer seasons_2          Index Cond: (month_num = ANY ('{4,5,6,7}'::integer[])) <\/code><\/pre>\n<p>  \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u0441\u0435\u043a\u0446\u0438\u044f\u0445 \u043d\u0435 \u0447\u0435\u0440\u0435\u0434\u0443\u044e\u0442\u0441\u044f, \u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u0447\u0442\u043e \u0434\u0430\u0435\u0442 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u044e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438.<\/p>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438 \u043d\u0435\u0442, \u0442\u043e \u0434\u043b\u044f \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0437\u0435\u043b Merge Append:<\/p>\n<pre><code class=\"pgsql\">EXPLAIN (COSTS OFF) SELECT * FROM seasons WHERE month_num IN (11,12) ORDER BY month_num; <\/code><\/pre>\n<pre><code class=\"plaintext\">                              QUERY PLAN                               ----------------------------------------------------------------------  Merge Append    Sort Key: seasons.month_num    ->  Index Only Scan using winter_month_num_idx on winter seasons_1          Index Cond: (month_num = ANY ('{11,12}'::integer[]))    ->  Index Only Scan using fall_month_num_idx on fall seasons_2          Index Cond: (month_num = ANY ('{11,12}'::integer[])) <\/code><\/pre>\n<p>  <\/p>\n<h3>\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c<\/h3>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/33\/3016\/\">pg_dump \u0438 \u0441\u0445\u0435\u043c\u0430 public<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/a7a7be1f\">a7a7be1f<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/7ac10f69\">7ac10f69<\/a><\/p>\n<p>  \u041f\u0440\u0430\u0432\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0430 \u0441\u0445\u0435\u043c\u0443 public \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b. \u0420\u0430\u0431\u043e\u0442\u0430 \u043d\u0430\u0434 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0434\u0430\u0432\u043d\u043e <a href=\"https:\/\/commitfest.postgresql.org\/34\/3017\/\">\u0432\u0435\u0434\u0435\u0442\u0441\u044f<\/a>. <\/p>\n<p>  \u041a\u0430\u043a \u0447\u0430\u0441\u0442\u044c \u044d\u0442\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 14 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 pg_dump. <\/p>\n<p>  \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u043e\u043f\u0438\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 pg_dump \u0434\u043e 14 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043b\u044f \u0441\u0445\u0435\u043c\u044b public \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"plaintext\">CREATE SCHEMA public; ALTER SCHEMA public OWNER TO postgres; COMMENT ON SCHEMA public IS 'standard public schema'; <\/code><\/pre>\n<p>  \u0410 \u0432\u043e\u0442 \u0432 14 \u0438 15 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u043d\u0438\u0447\u0435\u0433\u043e \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u041f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u0441\u0445\u0435\u043c\u0443 \u043d\u0435 \u043c\u0435\u043d\u044f\u043b\u0438, \u0438 \u043e\u043d\u0430 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0441\u0443\u043f\u0435\u0440\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e. \u0421\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0441\u0445\u0435\u043c\u0430 \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0435\u0451 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. (\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u0445\u0435\u043c\u044b \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f, \u0440\u0435\u0447\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u0441\u0430\u043c\u043e\u0439 \u0441\u0445\u0435\u043c\u0435.)<\/p>\n<p>  \u041d\u043e \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u043f\u043e \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u043d\u043e\u0432\u044b\u0439 \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u0441\u0445\u0435\u043c\u044b public?<\/p>\n<p>  \u0412 13 \u0432\u0435\u0440\u0441\u0438\u0438:<\/p>\n<pre><code class=\"plaintext\">CREATE SCHEMA public; ALTER SCHEMA public OWNER TO alice; COMMENT ON SCHEMA public IS 'standard public schema'; REVOKE ALL ON SCHEMA public FROM postgres; REVOKE ALL ON SCHEMA public FROM PUBLIC; GRANT ALL ON SCHEMA public TO alice; GRANT ALL ON SCHEMA public TO PUBLIC; <\/code><\/pre>\n<p>  \u0412 14 \u0432\u0435\u0440\u0441\u0438\u0438:<\/p>\n<pre><code class=\"plaintext\">REVOKE ALL ON SCHEMA public FROM postgres; REVOKE ALL ON SCHEMA public FROM PUBLIC; GRANT ALL ON SCHEMA public TO alice; GRANT ALL ON SCHEMA public TO PUBLIC; <\/code><\/pre>\n<p>  \u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0432 15 \u0432\u0435\u0440\u0441\u0438\u0438:<\/p>\n<pre><code class=\"plaintext\">ALTER SCHEMA public OWNER TO alice; <\/code><\/pre>\n<p>  \u0412 15 \u0432\u0435\u0440\u0441\u0438\u0438 \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u043c\u0435\u0442\u043a\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043a \u0441\u0445\u0435\u043c\u0435. \u041f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u043c\u0435\u0442\u043a\u0438 \u0431\u044b\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b, \u0430 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043c\u0435\u043d\u044f\u043b\u0441\u044f.<\/p>\n<h3>\u0420\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f<\/h3>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/34\/2914\/\">\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/a8fd13ca\">a8fd13ca<\/a><\/p>\n<p>  \u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0443\u0445\u0444\u0430\u0437\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438. <\/p>\n<p>  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 <a href=\"https:\/\/www.postgresql.fastware.com\/blog\/logical-decoding-of-two-phase-commits\">\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/a> \u0432 \u0431\u043b\u043e\u0433\u0435 Fujitsu.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/34\/2706\/\">\u0417\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 checkpointer \u0438 bgwriter \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u044f<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/7ff23c6d\">7ff23c6d<\/a><\/p>\n<p>  \u0417\u0430\u043d\u0438\u043c\u0430\u044f\u0441\u044c \u0441\u0432\u043e\u0438\u043c\u0438 \u0434\u0435\u043b\u0430\u043c\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 startup. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0441\u0445\u0435\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043a\u0430\u043a \u0438 \u043d\u0430 \u0440\u0435\u043f\u043b\u0438\u043a\u0435, \u0433\u0434\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b startup, checkpointer \u0438 bgwriter \u0442\u0440\u0443\u0434\u044f\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435.<\/p>\n<h3>\u0421\u0435\u0440\u0432\u0435\u0440<\/h3>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/33\/3215\/\">\u0422\u0438\u043f numeric: \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0438\u043b\u0438 \u0431\u044b\u0442\u044c \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/085f931f\">085f931f<\/a><\/p>\n<p>  \u0422\u0438\u043f NUMERIC(<i>\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c<\/i>, <i>\u043c\u0430\u0441\u0448\u0442\u0430\u0431<\/i>) \u043f\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 SQL \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c <i>\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c<\/i> \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 1\u2026 1000, \u0430 <i>\u043c\u0430\u0441\u0448\u0442\u0430\u0431<\/i> \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b <i>\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438<\/i>.<\/p>\n<p>  \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0440\u0435\u0448\u0438\u043b\u0438 \u043e\u0442\u043e\u0439\u0442\u0438 \u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u043b\u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u043b\u044f <i>\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430<\/i> \u043e\u0442 -1000 \u0434\u043e 1000, \u0431\u0435\u0437 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043a \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438:<\/p>\n<pre><code class=\"pgsql\">SELECT 12345.67::numeric(10,-3), 0.0123::numeric(1,2); <\/code><\/pre>\n<pre><code class=\"plaintext\"> numeric | numeric ---------+---------    12000 |    0.01 <\/code><\/pre>\n<p>  <b>\u0424\u0443\u043d\u043a\u0446\u0438\u044f unnest \u0434\u043b\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u0432<\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/9e3c217b\">9e3c217b<\/a><\/p>\n<p>  <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/541252#commit_6df7a969\">\u041c\u0443\u043b\u044c\u0442\u0438\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/a> \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0432 14 \u0432\u0435\u0440\u0441\u0438\u0438. \u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u044d\u0442\u043e\u0442 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0430\u0441\u044c unnest. \u0421 \u0435\u0451 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u044b, \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432 \u043c\u0443\u043b\u044c\u0442\u0438\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430. <\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u043f\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u0432 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043b\u044f \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u043e\u0432 14 \u0432\u0435\u0440\u0441\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c:<\/p>\n<pre><code class=\"pgsql\">SELECT unnest(working_period) from pg_commitfest WHERE version = '14'; <\/code><\/pre>\n<pre><code class=\"plaintext\">                       unnest                         -----------------------------------------------------  [\"2020-07-01 00:00:00+03\",\"2020-08-01 00:00:00+03\")  [\"2020-09-01 00:00:00+03\",\"2020-10-01 00:00:00+03\")  [\"2020-11-01 00:00:00+03\",\"2020-12-01 00:00:00+03\")  [\"2021-01-01 00:00:00+03\",\"2021-02-01 00:00:00+03\")  [\"2021-03-01 00:00:00+03\",\"2021-04-01 00:00:00+03\") <\/code><\/pre>\n<p>  <a href=\"https:\/\/git.postgresql.org\/pg\/commitdiff\/29854ee8d1ca4a46adb7e84deb17e6fb18e531cc\">\u041f\u0435\u0440\u0432\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430<\/a> \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e unnest \u0434\u043b\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u0432 \u0431\u044b\u043b\u0430 <a href=\"https:\/\/git.postgresql.org\/pg\/commitdiff\/817bb0a7d1e02df4643d37304aed8574cf43f629\">\u043e\u0442\u043c\u0435\u043d\u0435\u043d\u0430<\/a>. \u0414\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043e\u0431 \u044d\u0442\u043e\u043c \u0443\u0441\u043f\u0435\u043b <a href=\"https:\/\/www.depesz.com\/2021\/07\/15\/how-to-get-list-of-elements-from-multiranges\/\">\u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c<\/a> Depesz \u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0441\u044f \u0441\u0432\u043e\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 unnest_multirange \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439.<\/p>\n<h3>\u041a\u043e\u043c\u0430\u043d\u0434\u044b SQL<\/h3>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/33\/2943\/\">\u0421\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: ALTER TRIGGER\u2026 RENAME TO ..<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/80ba4bb3\">80ba4bb3<\/a><\/p>\n<p>  \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430 \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \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 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445-\u0441\u0435\u043a\u0446\u0438\u044f\u0445.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/33\/3110\/\">ALTER TABLE\u2026 SET ACCESS METHOD<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/b0483263\">b0483263<\/a><\/p>\n<p>  \u0414\u0430, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043e\u0441\u0442\u0443\u043f\u0430. \u0416\u0430\u043b\u044c \u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0435\u0442:<\/p>\n<pre><code class=\"pgsql\">SELECT * FROM pg_am WHERE amtype = 't'; <\/code><\/pre>\n<pre><code class=\"plaintext\"> oid | amname |      amhandler       | amtype -----+--------+----------------------+--------    2 | heap   | heap_tableam_handler | t <\/code><\/pre>\n<p>  \u041d\u043e \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0442\u0430\u043a\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f.<\/p>\n<h3>\u0420\u0430\u0437\u043d\u043e\u0435<\/h3>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/33\/3077\/\">\u041f\u0435\u0442\u0430\u0431\u0430\u0439\u0442\u044b \u0432 pg_size_pretty \u0438 pg_size_bytes<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/ca2e4472\">ca2e4472<\/a><\/p>\n<pre><code class=\"pgsql\">14=# SELECT pg_size_pretty(100000000000000000::bigint); <\/code><\/pre>\n<pre><code class=\"plaintext\"> pg_size_pretty ----------------  90949 TB <\/code><\/pre>\n<p>  \u0418 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0439 \u0434\u0430\u043b\u044c\u0448\u0435, \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e pg_size_pretty \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0432 \u0442\u0435\u0440\u0430\u0431\u0430\u0439\u0442\u0430\u0445.<\/p>\n<p>  \u041d\u043e \u043d\u0430\u0448\u043b\u0438\u0441\u044c \u043b\u044e\u0434\u0438, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u0430\u043a\u0430\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u043c\u0430\u043b\u043e\u0432\u0430\u0442\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 15 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043f\u0435\u0442\u0430\u0431\u0430\u0439\u0442\u044b:<\/p>\n<pre><code class=\"pgsql\">15=# SELECT pg_size_pretty(100000000000000000::bigint); <\/code><\/pre>\n<pre><code class=\"plaintext\"> pg_size_pretty ----------------  89 PB <\/code><\/pre>\n<p>  \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0435\u0442\u0430\u0431\u0430\u0439\u0442 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0438 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 pg_size_bytes.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/33\/3085\/\">\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u043a\u043e\u0433\u0434\u0430 \u00ab\u043f\u0440\u043e\u043f\u0430\u043b\u00bb postmaster<\/a><\/b><br \/>  commit: <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/2aca19f2\">2aca19f2<\/a>, <a href=\"https:\/\/github.com\/postgres\/postgres\/commit\/70685385\">70685385<\/a><\/p>\n<p>  \u041f\u043e \u0441\u0443\u0442\u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/550632\/#commit_4753ef37\">\u043c\u0430\u0440\u0442\u043e\u0432\u0441\u043a\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b<\/a> \u043f\u043e \u0437\u0430\u043c\u0435\u043d\u0435 pg_usleep() \u043d\u0430 WaitLatch(). \u041a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u00ab\u043f\u0440\u043e\u043f\u0430\u0436\u0443\u00bb postmaster \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u0435, \u0447\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (\u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0436\u0438\u0434\u0430\u044e\u0442\u0441\u044f \u0444\u0430\u0439\u043b\u043e\u0432 WAL \u0434\u043b\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043f\u0438\u0438) \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0438\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u0440\u0438 \u0443\u0441\u0435\u0447\u0435\u043d\u0438\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u043a\u043e\u043d\u0446\u0435 \u043e\u0447\u0438\u0441\u0442\u043a\u0438.<\/p>\n<hr\/>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0451. \u0416\u0434\u0435\u043c \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u0430 14 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442 15 \u0432\u0435\u0440\u0441\u0438\u0438, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0431\u0443\u0434\u0435\u0442 \u043e \u0447\u0435\u043c <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/583070\/\">\u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c<\/a>.<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/572782\/\"> https:\/\/habr.com\/ru\/articles\/572782\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\u0417\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f \u0438\u044e\u043b\u044c, \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u044b\u0439 \u0436\u0430\u0440\u043a\u0438\u0439 \u043c\u0435\u0441\u044f\u0446 \u0433\u043e\u0434\u0430, \u043d\u043e \u0438 \u043c\u0435\u0441\u044f\u0446 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 PostgreSQL. \u0421\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u0432\u0435\u0436\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"pgsql\">SELECT version();<\/code><\/pre>\n<pre><code class=\"plaintext\">                          version                            ------------------------------------------------------------  PostgreSQL 15devel on x86_64-pc-linux-gnu, compiled by gcc  (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, 64-bit <\/code><\/pre>\n<p>  \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043e 14 \u0432\u0435\u0440\u0441\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445: <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/510124\/\">2020-07<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/522428\/\">2020-09<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/533058\/\">2020-11<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/541252\/\">2021-01<\/a> \u0438 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/550632\/\">2021-03<\/a>.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-384856","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/384856","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=384856"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/384856\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=384856"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=384856"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=384856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}