{"id":474551,"date":"2025-09-11T09:00:19","date_gmt":"2025-09-11T09:00:19","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=474551"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=474551","title":{"rendered":"<span>PostgreSQL 18: \u0427\u0430\u0441\u0442\u044c 5 \u0438\u043b\u0438 \u041a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442 2025-03<\/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-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/0_\/e5\/ov\/0_e5ovspzibvx35mfrf2maadxro.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/0_\/e5\/ov\/0_e5ovspzibvx35mfrf2maadxro.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/0_\/e5\/ov\/0_e5ovspzibvx35mfrf2maadxro.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>25 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0445\u043e\u0434 PostgreSQL 18. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043e \u043c\u0430\u0440\u0442\u043e\u0432\u0441\u043a\u043e\u043c \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u0432\u0435\u0434\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043c\u0430\u0440\u0442\u043e\u0432\u0441\u043a\u0438\u0439  \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442 \u043f\u043e \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u044a\u0435\u043c\u043d\u044b\u0439 \u0438 \u0431\u043e\u0433\u0430\u0442\u044b\u0439 \u043d\u0430 \u043d\u043e\u0432\u0438\u043d\u043a\u0438.<\/p>\n<p>\u0421\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u043e\u0432 \u0432\u0435\u0440\u0441\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0434\u0435\u0441\u044c:<a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/856498\/\" rel=\"noopener noreferrer nofollow\"> 2024-07<\/a>, <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/769598\/\" rel=\"noopener noreferrer nofollow\">2024-09<\/a>, <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/882578\/\" rel=\"noopener noreferrer nofollow\">2024-11<\/a>, <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/886292\/\" rel=\"noopener noreferrer nofollow\">2025-01<\/a>. <\/p>\n<h4>\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0435 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h4>\n<p><a href=\"#commit_ce207d2a7\" rel=\"noopener noreferrer nofollow\">pg_dump[all]\/pg_restore: \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438<\/a><br \/> <a href=\"#commit_1fd1bd871\" rel=\"noopener noreferrer nofollow\">\u0421\u0431\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/a><br \/> <a href=\"#commit_626d7236b\" rel=\"noopener noreferrer nofollow\">pg_upgrade &#8212;swap: \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u043d\u043e\u0432\u044b\u0439<\/a><br \/> <a href=\"#commit_99aeb8470\" rel=\"noopener noreferrer nofollow\">pg_combinebackup &#8212;link \u0438\u043b\u0438 \u0436\u0435\u0441\u0442\u043a\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432<\/a><br \/> <a href=\"#commit_cd3c45125\" rel=\"noopener noreferrer nofollow\">pg_dump[all], pg_restore: &#8212;no-policies<\/a><br \/> <a href=\"#commit_e117cfb2f\" rel=\"noopener noreferrer nofollow\">pg_createsubscriber: \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 two_phase \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a<\/a><br \/> <a href=\"#commit_e5aeed4b8\" rel=\"noopener noreferrer nofollow\">pg_createsubscriber: \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439 \u043d\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0435<\/a><br \/> <a href=\"#commit_fb2ea12f4\" rel=\"noopener noreferrer nofollow\">pg_createsubscriber: \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/a><br \/> <a href=\"#commit_41625ab8e\" rel=\"noopener noreferrer nofollow\">psql: \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b<\/a><br \/> <a href=\"#commit_bba2fbc62\" rel=\"noopener noreferrer nofollow\">psql: \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438<\/a><br \/> <a href=\"#commit_1a759c832\" rel=\"noopener noreferrer nofollow\">psql: \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \\watch<\/a><br \/> <a href=\"#commit_d696406a9\" rel=\"noopener noreferrer nofollow\">psql: \\dx \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e<\/a><\/p>\n<h4>\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433<\/h4>\n<p><a href=\"#commit_65c298f61\" rel=\"noopener noreferrer nofollow\">NUMA: \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0441\u0438\u0441\u0442\u0435\u043c \u0441 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 \u043d\u0435\u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u0430\u043c\u044f\u0442\u0438<\/a><br \/> <a href=\"#commit_76def4cdd\" rel=\"noopener noreferrer nofollow\">pg_stat_get_backend_wal: \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 WAL \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/a><br \/> <a href=\"#commit_ddb17e387\" rel=\"noopener noreferrer nofollow\">EXPLAIN: \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u0442\u0440\u043e\u043a \u0441 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u043e \u0434\u0432\u0443\u0445 \u0437\u043d\u0430\u043a\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439<\/a><br \/> <a href=\"#commit_c65bc2e1d\" rel=\"noopener noreferrer nofollow\">EXPLAIN: \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u043d\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432<\/a><br \/> <a href=\"#commit_6d376c3b0\" rel=\"noopener noreferrer nofollow\">\u0416\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0437\u0430\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443<\/a><br \/> <a href=\"#commit_9219093ca\" rel=\"noopener noreferrer nofollow\">\u0416\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0430\u043d\u0441\u0430<\/a><br \/> <a href=\"#commit_3516ea768\" rel=\"noopener noreferrer nofollow\">log_line_prefix: IP-\u0430\u0434\u0440\u0435\u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/a><br \/> <a href=\"#commit_62d712ecf\" rel=\"noopener noreferrer nofollow\">pg_stat_statements: \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0432 IN<\/a><br \/> <a href=\"#commit_eaf502747\" rel=\"noopener noreferrer nofollow\">\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u0430 WAL<\/a><br \/> <a href=\"#commit_bb8dff999\" rel=\"noopener noreferrer nofollow\">\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u044f \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430<\/a><\/p>\n<h4>[\u0410\u0432\u0442\u043e]\u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437<\/h4>\n<p><a href=\"#commit_0164a0f9e\" rel=\"noopener noreferrer nofollow\">vacuum_truncate: \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u0438\u0435\u043c \u043f\u0443\u0441\u0442\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/a><br \/> <a href=\"#commit_306dc520b\" rel=\"noopener noreferrer nofollow\">\u0411\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u0430\u044f \u0430\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u00ab\u043c\u0435\u0440\u0442\u0432\u044b\u0445\u00bb \u0441\u0442\u0440\u043e\u043a \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445<\/a><br \/> <a href=\"#commit_99f8f3fbb\" rel=\"noopener noreferrer nofollow\">\u0411\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u0430\u044f \u0430\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u043e\u043a<\/a><br \/> <a href=\"#commit_052026c9b\" rel=\"noopener noreferrer nofollow\">\u041d\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u0430\u044f \u0437\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0430 \u0432 \u043f\u043e\u043c\u043e\u0449\u044c \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u043e\u0439 \u043e\u0447\u0438\u0441\u0442\u043a\u0435<\/a><\/p>\n<h4>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/h4>\n<p><a href=\"#commit_fdd146a8e\" rel=\"noopener noreferrer nofollow\">\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0432\u0432\u043e\u0434\/\u0432\u044b\u0432\u043e\u0434<\/a><br \/> <a href=\"#commit_10f664684\" rel=\"noopener noreferrer nofollow\">io_combine_limit: \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d \u0434\u043e 1\u041c\u0411<\/a><br \/> <a href=\"#commit_32acad7d1\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f<\/a><br \/> <a href=\"#commit_9a2e2a285\" rel=\"noopener noreferrer nofollow\">\u0418\u043d\u0434\u0435\u043a\u0441\u044b BTree: \u043f\u0440\u043e\u043f\u0443\u0441\u043a \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u043e \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0435\u043c\u0443 \u0441\u0442\u043e\u043b\u0431\u0446\u0443 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0435<\/a><br \/> <a href=\"#commit_e4309f73f\" rel=\"noopener noreferrer nofollow\">\u0418\u043d\u0434\u0435\u043a\u0441\u044b GiST: \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 <\/a><br \/> <a href=\"#commit_c0962a113\" rel=\"noopener noreferrer nofollow\">\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a: \u0437\u0430\u043c\u0435\u043d\u0430 IN (VALUES..) \u043d\u0430 \u043f\u043e\u0438\u0441\u043a \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435<\/a><br \/> <a href=\"#commit_fc069a3a6\" rel=\"noopener noreferrer nofollow\">\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a: \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0430\u043c\u043e\u0439 \u0441 \u0441\u043e\u0431\u043e\u0439<\/a><\/p>\n<h4>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438<\/h4>\n<p><a href=\"#commit_246dedc5d\" rel=\"noopener noreferrer nofollow\">PL\/pgSQL: \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c =&gt;<\/a><\/p>\n<h4>\u0420\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f<\/h4>\n<p><a href=\"#commit_73eba5004\" rel=\"noopener noreferrer nofollow\">multiple_unique_conflicts: \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/a><br \/> <a href=\"#commit_ac0e33136\" rel=\"noopener noreferrer nofollow\">idle_replication_slot_timeout: \u0430\u043d\u043d\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u043b\u043e\u0442\u043e\u0432 \u043f\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0443<\/a><br \/> <a href=\"#commit_04ff636cb\" rel=\"noopener noreferrer nofollow\">max_active_replication_origins: \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/a><\/p>\n<h4>\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c<\/h4>\n<p><a href=\"#commit_b3f0be788\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 OAuth 2.0<\/a><br \/> <a href=\"#commit_3642df265\" rel=\"noopener noreferrer nofollow\">dblink: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043a\u0432\u043e\u0437\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 SCRAM<\/a><br \/> <a href=\"#commit_749a9e20c\" rel=\"noopener noreferrer nofollow\">pgcrypto: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 sha256crypt \u0438 sha512crypt \u0434\u043b\u044f \u0445\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u0435\u0439<\/a><br \/> <a href=\"#commit_9ad1b3d01\" rel=\"noopener noreferrer nofollow\">pgcrypto: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 CFB \u0434\u043b\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f AES<\/a><br \/> <a href=\"#commit_0d6c47766\" rel=\"noopener noreferrer nofollow\">ALTER DEFAULT PRIVILEGES \u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b<\/a><br \/> <a href=\"#commit_2da74d8d6\" rel=\"noopener noreferrer nofollow\">libpq: \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 sslkeylogfile<\/a><\/p>\n<h4>\u0421\u0435\u0440\u0432\u0435\u0440<\/h4>\n<p><a href=\"#commit_fc0438b4e\" rel=\"noopener noreferrer nofollow\">\u0422\u0435\u043c\u043f\u043e\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0435, \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0438<\/a><br \/> <a href=\"#commit_83ea6c540\" rel=\"noopener noreferrer nofollow\">\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b<\/a><br \/> <a href=\"#commit_a379061a2\" rel=\"noopener noreferrer nofollow\">\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 NOT NULL: \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\/\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f<\/a><br \/> <a href=\"#commit_ca87c415e\" rel=\"noopener noreferrer nofollow\">\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438: NOT ENFORCED<\/a><br \/> <a href=\"#commit_f78ca6f3e\" rel=\"noopener noreferrer nofollow\">file_copy_method: \u0441\u043f\u043e\u0441\u043e\u0431 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/a><br \/> <a href=\"#commit_4f7f7b037\" rel=\"noopener noreferrer nofollow\">extension_control_path: \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439<\/a><br \/> <a href=\"#commit_329304c90\" rel=\"noopener noreferrer nofollow\">\u041d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438<\/a><br \/> <a href=\"#commit_a3b6dfd41\" rel=\"noopener noreferrer nofollow\">\u0424\u0443\u043d\u043a\u0446\u0438\u0438 gamma \u0438 lgamma<\/a><br \/> <a href=\"#commit_6da469bad\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0432 bytea \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e<\/a><br \/> <a href=\"#commit_9324c8c58\" rel=\"noopener noreferrer nofollow\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f pg_get_loaded_modules: \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0432 \u043e\u0431\u0449\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445<\/a><br \/> <a href=\"#commit_dcf7e1697\" rel=\"noopener noreferrer nofollow\">pg_buffercache: \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u043b\u0438 \u0432\u0441\u0435\u0433\u043e \u043a\u0435\u0448\u0430<\/a><br \/> <a href=\"#commit_14ffaece0\" rel=\"noopener noreferrer nofollow\">amcheck: \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 GIN<\/a><\/p>\n<h4>\u041a\u043e\u043c\u0430\u043d\u0434\u044b SQL \u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/h4>\n<p><a href=\"#commit_302cf1575\" rel=\"noopener noreferrer nofollow\">CREATE FOREIGN TABLE LIKE<\/a><br \/> <a href=\"#commit_534874fac\" rel=\"noopener noreferrer nofollow\">COPY .. TO: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439<\/a><br \/> <a href=\"#commit_4603903d2\" rel=\"noopener noreferrer nofollow\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f json_strip_nulls \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u043f\u0443\u0441\u0442\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445<\/a><br \/> <a href=\"#commit_6c12ae09f\" rel=\"noopener noreferrer nofollow\">\u041d\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f array_sort<\/a><\/p>\n<p><a class=\"anchor\" name=\"commit_ce207d2a7\" id=\"commit_ce207d2a7\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/4538\/\" rel=\"noopener noreferrer nofollow\"><strong>pg_dump[all]\/pg_restore: \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=ce207d2a7\" rel=\"noopener noreferrer nofollow\">ce207d2a7<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=dbe6bd434\" rel=\"noopener noreferrer nofollow\">dbe6bd434<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=779972e53\" rel=\"noopener noreferrer nofollow\">779972e53<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=b391d882f\" rel=\"noopener noreferrer nofollow\">b391d882f<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=bde2fb797\" rel=\"noopener noreferrer nofollow\">bde2fb797<\/a>,<a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=650ab8aaf\" rel=\"noopener noreferrer nofollow\">650ab8aaf<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=1fd1bd871\" rel=\"noopener noreferrer nofollow\">1fd1bd871<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=34eb2a80d\" rel=\"noopener noreferrer nofollow\">34eb2a80d<\/a><\/p>\n<p>\u0423\u0442\u0438\u043b\u0438\u0442\u044b pg_dump \u0438 pg_dumpall \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0442\u0430\u0431\u043b\u0438\u0446, \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432  \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432. \u0410 pg_restore, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0430\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0435\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c. \u041f\u043e\u0434 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u043e\u0439 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430, \u0445\u0440\u0430\u043d\u044f\u0449\u0430\u044f\u0441\u044f \u0432 pg_statistic. \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 CREATE STATISTICS \u0438 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u043e\u0432\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438.<\/p>\n<p>\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 pg_dump\/pg_dumpall \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u0442\u0440\u0435\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432:<\/p>\n<pre><code class=\"bash\">$ pg_dump --with-statistics | --no-statistics | --statistics-only <\/code><\/pre>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043d\u0435 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\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>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0442\u0430\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE tab (id int PRIMARY KEY); INSERT INTO tab VALUES (1),(2),(3); ANALYZE tab; <\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c pg_dump \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c &#8212;statistics-only \u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0432 \u0432\u044b\u0432\u043e\u0434\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a\u0438 \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0435:<\/p>\n<pre><code class=\"bash\">$ pg_dump -t tab --statistics-only |egrep -v '^($|--|SET|.*set_config)' <\/code><\/pre>\n<pre><code>SELECT * FROM pg_catalog.pg_restore_relation_stats(     'version', '190000'::integer,     'schemaname', 'public',     'relname', 'tab',     'relpages', '1'::integer,     'reltuples', '3'::real,     'relallvisible', '0'::integer,     'relallfrozen', '0'::integer ); SELECT * FROM pg_catalog.pg_restore_attribute_stats(     'version', '190000'::integer,     'schemaname', 'public',     'relname', 'tab',     'attname', 'id',     'inherited', 'f'::boolean,     'null_frac', '0'::real,     'avg_width', '4'::integer,     'n_distinct', '-1'::real,     'histogram_bounds', '{1,2,3}'::text,     'correlation', '1'::real ); SELECT * FROM pg_catalog.pg_restore_relation_stats(     'version', '190000'::integer,     'schemaname', 'public',     'relname', 'tab_pkey',     'relpages', '2'::integer,     'reltuples', '3'::real,     'relallvisible', '0'::integer,     'relallfrozen', '0'::integer ); <\/code><\/pre>\n<p>\u0414\u043b\u044f \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 (\u0442\u0430\u0431\u043b\u0438\u0446 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432) \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d \u0432\u044b\u0437\u043e\u0432 \u043d\u043e\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 pg_restore_relation_stats, \u0430 \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432  \u2014 pg_restore_attribute_stats.<\/p>\n<p>\u041f\u0440\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 pg_restore \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u0435 \u0436\u0435 \u0442\u0440\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430:<\/p>\n<pre><code class=\"bash\">$ pg_restore --with-statistics | --no-statistics | --statistics-only <\/code><\/pre>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 &#8212;with-statistics. \u0417\u0434\u0435\u0441\u044c \u0438\u0434\u0435\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u0451 \u0447\u0442\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0432 \u043a\u043e\u043f\u0438\u044e, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c.<\/p>\n<p><a class=\"anchor\" name=\"commit_1fd1bd871\" id=\"commit_1fd1bd871\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5523\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0421\u0431\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=1fd1bd871\" rel=\"noopener noreferrer nofollow\">1fd1bd871<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=9c03c8d18\" rel=\"noopener noreferrer nofollow\">9c03c8d18<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=edba754f0\" rel=\"noopener noreferrer nofollow\">edba754f0<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=d5f1b6a75\" rel=\"noopener noreferrer nofollow\">d5f1b6a75<\/a><\/p>\n<p>\u0423\u0442\u0438\u043b\u0438\u0442\u0430 pg_upgrade \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 pg_dump\/pg_restore \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0441\u0445\u0435\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440. \u0412 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 pg_upgrade \u0431\u0443\u0434\u0435\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c pg_dump c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c &#8212;with-statistics, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440.<\/p>\n<p>\u042d\u0442\u043e \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043f\u043e \u0432\u0441\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043d\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u043a\u0440\u043e\u043c\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438, \u0432 \u0441\u0442\u0430\u0440\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043c\u043e\u0433\u043b\u0430 \u0431\u044b\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430, \u0432\u043e\u0442 \u0435\u0435 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>\u041f\u0443\u043d\u043a\u0442 15 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/pgupgrade.html\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 pg_upgrade<\/a> \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443:<\/p>\n<pre><code class=\"bash\">$ vacuumdb --all --analyze-in-stages --missing-stats-only <\/code><\/pre>\n<p>\u0413\u0434\u0435 &#8212;missing-stats-only \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0433\u0434\u0435 \u043d\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438.<\/p>\n<p>\u0410 \u0443\u0436\u0435 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c:<\/p>\n<pre><code class=\"bash\">$ vacuumdb --all --analyze-only <\/code><\/pre>\n<p>\u0421 \u0446\u0435\u043b\u044c\u044e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438, \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0430.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435  \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c, \u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 pg_upgrade \u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212;no-statistics.<\/p>\n<p><a class=\"anchor\" name=\"commit_626d7236b\" id=\"commit_626d7236b\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5369\/\" rel=\"noopener noreferrer nofollow\"><strong>pg_upgrade &#8212;swap: \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u043d\u043e\u0432\u044b\u0439<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=626d7236b\" rel=\"noopener noreferrer nofollow\">626d7236b<\/a><\/p>\n<p>\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 pg_upgrade \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u043d\u043e\u0432\u044b\u0439: &#8212;copy, &#8212;copy-file-range, &#8212;clone, &#8212;link.<\/p>\n<p>\u041a \u043d\u0438\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212;swap, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430. \u0421\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442 \u0446\u0435\u043b\u044b\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u043d\u043e\u0432\u044b\u0439, \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0436\u0435\u0441\u0442\u043a\u0438\u0445 \u0441\u0441\u044b\u043b\u043e\u043a. \u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043d\u0438\u0445 (\u0430 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u0444\u0430\u0439\u043b\u043e\u0432), \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u0432 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430.<\/p>\n<p>\u0412\u0430\u0436\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435. \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432, \u0441\u0442\u0430\u0440\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u043d\u0435\u043f\u0440\u0438\u0433\u043e\u0434\u0435\u043d \u043a \u0440\u0430\u0431\u043e\u0442\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u043f\u0430\u0441\u043d\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043e\u0442\u043c\u0435\u043d\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438\u0437 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438.<\/p>\n<p>\u042d\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0441\u0435\u0440\u0438\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 \u0432 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u0441 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043d\u0438\u0445. \u041e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/856498\/#commit_6e16b1e4\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a> \u0438 <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/877752\/#commit_40e2e5e92\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p><a class=\"anchor\" name=\"commit_99aeb8470\" id=\"commit_99aeb8470\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5508\/\" rel=\"noopener noreferrer nofollow\"><strong>pg_combinebackup &#8212;link \u0438\u043b\u0438 \u0436\u0435\u0441\u0442\u043a\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=99aeb8470\" rel=\"noopener noreferrer nofollow\">99aeb8470<\/a><\/p>\n<p>\u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212;link \u0443\u0442\u0438\u043b\u0438\u0442\u044b pg_combinebackup \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432. \u0424\u0430\u0439\u043b\u044b \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u043b\u043d\u043e\u0439 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u043a\u0430\u043a \u0436\u0435\u0441\u0442\u043a\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0444\u0430\u0439\u043b\u044b \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u0439.<\/p>\n<p>\u042d\u0442\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e. \u041b\u044e\u0431\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430) \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0444\u0430\u0439\u043b\u044b \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u044f\u0445. \u0418 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u044f\u0445 \u043f\u043e\u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u043b\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e.<\/p>\n<p><a class=\"anchor\" name=\"commit_cd3c45125\" id=\"commit_cd3c45125\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5499\/\" rel=\"noopener noreferrer nofollow\"><strong>pg_dump[all], pg_restore: &#8212;no-policies<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=cd3c45125\" rel=\"noopener noreferrer nofollow\">cd3c45125<\/a><\/p>\n<p>\u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212;no-policies \u0443\u0442\u0438\u043b\u0438\u0442 pg_dump \u0438 pg_dumpall \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0435 \u043a\u043e\u043f\u0438\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a \u0437\u0430\u0449\u0438\u0442\u044b \u0441\u0442\u0440\u043e\u043a. \u0423\u0442\u0438\u043b\u0438\u0442\u0430 pg_restore \u0441 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u044d\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.<\/p>\n<p><a class=\"anchor\" name=\"commit_e117cfb2f\" id=\"commit_e117cfb2f\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5433\/\" rel=\"noopener noreferrer nofollow\"><strong>pg_createsubscriber: \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 two_phase \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=e117cfb2f\" rel=\"noopener noreferrer nofollow\">e117cfb2f<\/a><\/p>\n<p>\u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212;enable-two-phase \u0443\u0442\u0438\u043b\u0438\u0442\u044b pg_createsubscriber \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 two_phase \u0443 \u0432\u0441\u0435\u0445 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a.<\/p>\n<p>\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043c\u043e\u0436\u043d\u043e \u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a pg_createsubscriber \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438, \u0447\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u043e.<\/p>\n<p><a class=\"anchor\" name=\"commit_e5aeed4b8\" id=\"commit_e5aeed4b8\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5541\/\" rel=\"noopener noreferrer nofollow\"><strong>pg_createsubscriber: \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439 \u043d\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0435<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=e5aeed4b8\" rel=\"noopener noreferrer nofollow\">e5aeed4b8<\/a><\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b pg_createsubscriber \u043d\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0435 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043d\u044b \u043d\u0430 \u043d\u0435\u0433\u043e, \u043f\u043e\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440-\u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a \u0435\u0449\u0435 \u0431\u044b\u043b \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u043f\u043b\u0438\u043a\u043e\u0439. \u0415\u0441\u043b\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b, \u0442\u043e \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212;clean=publications \u0443\u0442\u0438\u043b\u0438\u0442\u044b pg_createsubscriber \u0443\u0434\u0430\u043b\u0438\u0442 \u0438\u0445.<\/p>\n<p>\u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c, \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 &#8212;clean \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u0438\u043f\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u043b\u043e\u0442\u044b \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438. \u041f\u043e\u043a\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 publications.<\/p>\n<p><a class=\"anchor\" name=\"commit_fb2ea12f4\" id=\"commit_fb2ea12f4\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5566\/\" rel=\"noopener noreferrer nofollow\"><strong>pg_createsubscriber: \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=fb2ea12f4\" rel=\"noopener noreferrer nofollow\">fb2ea12f4<\/a><\/p>\n<p>\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 pg_createsubscriber, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 -d, \u043c\u043e\u0436\u043d\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u043f\u043b\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212;all, \u0432\u043c\u0435\u0441\u0442\u043e -d. \u0421 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c &#8212;all, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 (\u043a\u0440\u043e\u043c\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0445 \u0438 \u0442\u0435\u0445, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435) \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430.<\/p>\n<p><a class=\"anchor\" name=\"commit_41625ab8e\" id=\"commit_41625ab8e\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5407\/\" rel=\"noopener noreferrer nofollow\"><strong>psql: \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=41625ab8e\" rel=\"noopener noreferrer nofollow\">41625ab8e<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=3ce357584\" rel=\"noopener noreferrer nofollow\">3ce357584<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=17caf6644\" rel=\"noopener noreferrer nofollow\">17caf6644<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=2cce0fe44\" rel=\"noopener noreferrer nofollow\">2cce0fe44<\/a><\/p>\n<p><a href=\"https:\/\/www.postgresql.org\/docs\/devel\/libpq-pipeline-mode.html\" rel=\"noopener noreferrer nofollow\">\u041a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b<\/a> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 libpq, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/550632\/#commit_acb7e4eb\" rel=\"noopener noreferrer nofollow\">14-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438<\/a>. \u0412 \u044d\u0442\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u0430\u043d\u0434 SQL \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u043d\u0435 \u0434\u043e\u0436\u0438\u0434\u0430\u044f\u0441\u044c \u043e\u0442\u0432\u0435\u0442\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u0437\u0436\u0435. \u0415\u0441\u043b\u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435, \u0442\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \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 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<p>\u0412 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0432 psql \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/app-psql.html#APP-PSQL-META-COMMAND-PIPELINE\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/a> \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<p>\u0414\u043b\u044f \u0446\u0435\u043b\u0435\u0439 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435:<\/p>\n<pre><code class=\"bash\">$ sudo tc qdisc add dev lo root netem delay 500ms <\/code><\/pre>\n<p>\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 <code>nopipeline.sql<\/code> \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0442\u0440\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"bash\">$ cat pg18\/nopipeline.sql  <\/code><\/pre>\n<pre><code>BEGIN; SELECT clock_timestamp(); SELECT clock_timestamp(); SELECT clock_timestamp(); COMMIT; <\/code><\/pre>\n<p>\u0417\u0430\u043c\u0435\u0440\u0438\u043c \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"bash\">$ time psql -X -t -h localhost -f pg18\/nopipeline.sql  <\/code><\/pre>\n<pre><code>BEGIN  2025-06-20 15:14:09.353107+03   2025-06-20 15:14:10.353771+03   2025-06-20 15:14:11.35475+03  COMMIT  real    0m7,015s user    0m0,001s sys    0m0,006s <\/code><\/pre>\n<p>\u0414\u0440\u0443\u0433\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 <code>pipeline.sql<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>nopipeline.sql<\/code>, \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u043d\u044b\u0439 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430:<\/p>\n<pre><code class=\"bash\">$ cat pg18\/pipeline.sql  <\/code><\/pre>\n<pre><code>\\startpipeline  \\ir nopipeline.sql  \\flushrequest \\getresults \\endpipeline <\/code><\/pre>\n<p>\u041e\u0431\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f:<\/p>\n<pre><code class=\"bash\">$ time psql -X -t -h localhost -f pg18\/pipeline.sql  <\/code><\/pre>\n<pre><code>BEGIN  2025-06-20 15:14:20.610045+03   2025-06-20 15:14:20.610109+03   2025-06-20 15:14:20.610149+03  COMMIT  real    0m4,014s user    0m0,001s sys    0m0,006s <\/code><\/pre>\n<p>\u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u043b\u043a\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p><a class=\"anchor\" name=\"commit_bba2fbc62\" id=\"commit_bba2fbc62\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/4814\/\" rel=\"noopener noreferrer nofollow\"><strong>psql: \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=bba2fbc62\" rel=\"noopener noreferrer nofollow\">bba2fbc62<\/a><\/p>\n<p>\u0412\u044b\u0432\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \\conninfo \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"pgsql\">\\conninfo      Connection Information       Parameter       |  Value    ----------------------+----------  Database             | demo  Client User          | postgres  Socket Directory     | \/tmp  Server Port          | 5401  Options              |   Protocol Version     | 3.0  Password Used        | false  GSSAPI Authenticated | false  Backend PID          | 28907  TLS Connection       | false  Superuser            | on  Hot Standby          | off (12 rows) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_1a759c832\" id=\"commit_1a759c832\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5353\/\" rel=\"noopener noreferrer nofollow\"><strong>psql: \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \\watch<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=1a759c832\" rel=\"noopener noreferrer nofollow\">1a759c832<\/a><\/p>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \\watch \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \\watch. \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u0435, \u0437\u0430\u0434\u0430\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 psql WATCH_INTERVAL.<\/p>\n<pre><code class=\"pgsql\">\\echo :WATCH_INTERVAL <\/code><\/pre>\n<pre><code>2 <\/code><\/pre>\n<pre><code class=\"pgsql\">\\set WATCH_INTERVAL 1  \\t SELECT to_char(now(), 'SS')\\watch count=3 <\/code><\/pre>\n<pre><code> 17   18   19 <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_d696406a9\" id=\"commit_d696406a9\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5498\/\" rel=\"noopener noreferrer nofollow\"><strong>psql: \\dx \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=d696406a9\" rel=\"noopener noreferrer nofollow\">d696406a9<\/a><\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043d\u0443\u0436\u043d\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c ALTER EXTENSION .. UPDATE. \u041d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u00abDefault version\u00bb \u0432 \u0432\u044b\u0432\u043e\u0434\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \\dx \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0435\u0442, \u0435\u0441\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e:<\/p>\n<pre><code class=\"pgsql\">\\dx <\/code><\/pre>\n<pre><code>                          List of installed extensions   Name   | Version | Default version |   Schema   |         Description           ---------+---------+-----------------+------------+------------------------------  plpgsql | 1.0     | 1.0             | pg_catalog | PL\/pgSQL procedural language (1 row) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_65c298f61\" id=\"commit_65c298f61\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5558\/\" rel=\"noopener noreferrer nofollow\"><strong>NUMA: \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0441\u0438\u0441\u0442\u0435\u043c \u0441 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 \u043d\u0435\u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u0430\u043c\u044f\u0442\u0438<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=65c298f61\" rel=\"noopener noreferrer nofollow\">65c298f61<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=8cc139bec\" rel=\"noopener noreferrer nofollow\">8cc139bec<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=ba2a3c230\" rel=\"noopener noreferrer nofollow\">ba2a3c230<\/a><\/p>\n<p>\u0412 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0441\u0438\u0441\u0442\u0435\u043c, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043d\u0435\u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u0430\u043c\u044f\u0442\u0438 (NUMA). \u041f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u041e\u0421 Linux. \u0421\u0435\u0440\u0432\u0435\u0440 PostgreSQL \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043e\u0431\u0440\u0430\u043d \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c &#8212;with-libnuma.<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439:<\/p>\n<pre><code class=\"pgsql\">SELECT pg_numa_available(); <\/code><\/pre>\n<pre><code> pg_numa_available  -------------------  t (1 row) <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 pg_shmem_allocations_numa \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u0430\u043a \u043e\u0431\u0449\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u043f\u043e \u0443\u0437\u043b\u0430\u043c NUMA:<\/p>\n<pre><code class=\"pgsql\">SELECT * FROM pg_shmem_allocations_numa LIMIT 3; <\/code><\/pre>\n<pre><code>       name       | numa_node |  size   ------------------+-----------+--------  commit_timestamp |         0 | 274432  multixact_member |         0 | 270336  multixact_offset |         0 | 139264 (3 rows) <\/code><\/pre>\n<p>\u0410 \u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 pg_buffercache \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 pg_buffercache_numa, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u043e\u0431\u0449\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e \u0443\u0437\u043b\u0430\u043c NUMA:<\/p>\n<pre><code class=\"pgsql\">CREATE EXTENSION pg_buffercache;  SELECT * FROM pg_buffercache_numa LIMIT 3; <\/code><\/pre>\n<pre><code> bufferid | os_page_num | numa_node  ----------+-------------+-----------         1 |           0 |         0         1 |           1 |         0         2 |           2 |         0 (3 rows) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_76def4cdd\" id=\"commit_76def4cdd\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5492\/\" rel=\"noopener noreferrer nofollow\"><strong>pg_stat_get_backend_wal: \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 WAL \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=76def4cdd\" rel=\"noopener noreferrer nofollow\">76def4cdd<\/a><\/p>\n<p>\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/886292\/#commit_9aea73fc6\" rel=\"noopener noreferrer nofollow\">\u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u043e\u0441\u044c<\/a> \u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 pg_stat_get_backend_io \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0432\u0432\u043e\u0434\u0430\/\u0432\u044b\u0432\u043e\u0434\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0445\u043e\u0436\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f pg_stat_get_backend_wal \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 WAL \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432. \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043a\u0430\u043a \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 pg_stat_wal:<\/p>\n<pre><code class=\"pgsql\">SELECT * FROM pg_stat_get_backend_wal(pg_backend_pid()) \\gx <\/code><\/pre>\n<pre><code>-[ RECORD 1 ]----+------- wal_records      | 161 wal_fpi          | 48 wal_bytes        | 228461 wal_buffers_full | 0 stats_reset      |  <\/code><\/pre>\n<p>\u041e\u0434\u043d\u043e \u0438\u0437 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u2014 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435\u043c pg_stat_activity \u0438 pg_stat_get_backend_wal. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0430\u043c\u044b\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435, \u043f\u0438\u0448\u0443\u0449\u0438\u0435 \u0432 WAL \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b:<\/p>\n<pre><code class=\"pgsql\">SELECT * FROM pg_stat_activity a,      pg_stat_get_backend_wal(a.pid) b WHERE a.backend_type = 'client backend' ORDER BY b.wal_bytes DESC; <\/code><\/pre>\n<p>\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u041d\u043e \u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0436\u0438\u0437\u043d\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 pg_stat_reset_backend_stats.<\/p>\n<p><a class=\"anchor\" name=\"commit_ddb17e387\" id=\"commit_ddb17e387\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5501\/\" rel=\"noopener noreferrer nofollow\"><strong>EXPLAIN: \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u0442\u0440\u043e\u043a \u0441 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u043e \u0434\u0432\u0443\u0445 \u0437\u043d\u0430\u043a\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=ddb17e387\" rel=\"noopener noreferrer nofollow\">ddb17e387<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=95dbd827f\" rel=\"noopener noreferrer nofollow\">95dbd827f<\/a><\/p>\n<p>\u041f\u0440\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u043f\u043b\u0430\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \u043f\u043b\u0430\u043d\u0430. \u0414\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0443\u0436\u043d\u043e \u0443\u043c\u043d\u043e\u0436\u0430\u0442\u044c \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a (actual rows) \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 (loops).<\/p>\n<p>\u0412\u044b\u0432\u043e\u0434 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0442\u0440\u043e\u043a \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 EXPLAIN ANALYZE \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0431\u0440\u0435\u0437\u0430\u043b\u0441\u044f \u0434\u043e \u0446\u0435\u043b\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430. \u0412 \u0440\u044f\u0434\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0440\u0430\u0441\u0447\u0435\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0435\u0441\u043b\u0438 0,5 \u043e\u0431\u0440\u0435\u0437\u0430\u0435\u0442\u0441\u044f \u0434\u043e 0. \u0421\u0430\u043c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u043e\u0447\u043d\u043e\u0435 \u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043d\u043e \u0432 \u043f\u043b\u0430\u043d\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0431\u044b\u043b\u043e \u0432\u0438\u0434\u043d\u043e.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0432\u043e\u0434 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0442\u0440\u043e\u043a \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u043e\u0432 \u043f\u043b\u0430\u043d\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0434\u0432\u0430 \u0437\u043d\u0430\u043a\u0430 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439:<\/p>\n<pre><code class=\"pgsql\">EXPLAIN (analyze, costs off, buffers off, summary off, timing off) SELECT count(*) FROM tickets; <\/code><\/pre>\n<pre><code>                                   QUERY PLAN                                    --------------------------------------------------------------------------------  Finalize Aggregate (actual rows=1.00 loops=1)    -&gt;  Gather (actual rows=3.00 loops=1)          Workers Planned: 2          Workers Launched: 2          -&gt;  Partial Aggregate (actual rows=1.00 loops=3)                -&gt;  Parallel Seq Scan on tickets (actual rows=983285.67 loops=3) (6 rows) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_c65bc2e1d\" id=\"commit_c65bc2e1d\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5613\/\" rel=\"noopener noreferrer nofollow\"><strong>EXPLAIN: \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u043d\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=c65bc2e1d\" rel=\"noopener noreferrer nofollow\">c65bc2e1d<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=50ba65e73\" rel=\"noopener noreferrer nofollow\">50ba65e73<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=8d5ceb113\" rel=\"noopener noreferrer nofollow\">8d5ceb113<\/a><\/p>\n<p>\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u044b EXPLAIN \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u043b\u0430\u043d\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u041d\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0432 \u0442\u0435\u0445 \u0438\u043b\u0438 \u0438\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 EXPLAIN \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u043b\u0430\u043d\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0432 contrib \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/pgoverexplain.html\" rel=\"noopener noreferrer nofollow\">pg_overexplain<\/a>. \u042d\u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0432 EXPLAIN: debug \u0438 range_table. \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c CREATE EXTENSION \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c pg_overexplain, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0441\u0435\u0430\u043d\u0441\u0435:<\/p>\n<pre><code class=\"pgsql\">LOAD 'pg_overexplain'; <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b EXPLAIN:<\/p>\n<pre><code class=\"pgsql\">EXPLAIN (debug) SELECT * FROM bookings; <\/code><\/pre>\n<pre><code>                            QUERY PLAN                              -------------------------------------------------------------------  Seq Scan on bookings  (cost=0.00..34558.10 rows=2111110 width=21)    Disabled Nodes: 0    Parallel Safe: true    Plan Node ID: 0  PlannedStmt:    Command Type: select    Flags: canSetTag    Subplans Needing Rewind: none    Relation OIDs: 16422    Executor Parameter Types: none    Parse Location: 0 to end (11 rows) <\/code><\/pre>\n<pre><code class=\"pgsql\">EXPLAIN (range_table) SELECT * FROM bookings; <\/code><\/pre>\n<pre><code>                            QUERY PLAN                              -------------------------------------------------------------------  Seq Scan on bookings  (cost=0.00..34558.10 rows=2111110 width=21)    Scan RTI: 1  RTI 1 (relation, in-from-clause):    Eref: bookings (book_ref, book_date, total_amount)    Relation: bookings    Relation Kind: relation    Relation Lock Mode: AccessShareLock    Permission Info Index: 1  Unprunable RTIs: 1 (9 rows) <\/code><\/pre>\n<p>\u041a\u0430\u043a\u0443\u044e \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432\u044b\u0432\u043e\u0434\u044f\u0442 \u044d\u0442\u0438 \u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/pgoverexplain.html\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a> \u043a \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044e \u0438\/\u0438\u043b\u0438 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435.<\/p>\n<p><a class=\"anchor\" name=\"commit_6d376c3b0\" id=\"commit_6d376c3b0\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5294\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0416\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0437\u0430\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=6d376c3b0\" rel=\"noopener noreferrer nofollow\">6d376c3b0<\/a><\/p>\n<p>\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/runtime-config-logging.html#GUC-LOG-LOCK-FAILURES\" rel=\"noopener noreferrer nofollow\"><em>log_lock_failures<\/em><\/a> \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432 \u0436\u0443\u0440\u043d\u0430\u043b \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 SELECT .. NOWAIT.<\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u0435\u0430\u043d\u0441\u0435 \u0437\u0430\u0445\u0432\u0430\u0442\u0438\u043c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<pre><code class=\"pgsql\">BEGIN; SELECT pg_current_xact_id(), pg_backend_pid(); <\/code><\/pre>\n<pre><code> pg_current_xact_id | pg_backend_pid  --------------------+----------------                 981 |         112875 (1 row) <\/code><\/pre>\n<pre><code class=\"pgsql\">SELECT * FROM bookings WHERE book_ref = '000004' FOR UPDATE NOWAIT; <\/code><\/pre>\n<pre><code> book_ref |       book_date        | total_amount  ----------+------------------------+--------------  000004   | 2016-08-13 15:40:00+03 |     55800.00 (1 row) <\/code><\/pre>\n<p>\u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u0435\u0430\u043d\u0441\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u044d\u0442\u043e\u0439 \u0436\u0435 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<pre><code class=\"pgsql\">SET log_lock_failures = on;  BEGIN; SELECT pg_current_xact_id(), pg_backend_pid(); <\/code><\/pre>\n<pre><code> pg_current_xact_id | pg_backend_pid  --------------------+----------------                 982 |         113146 (1 row) <\/code><\/pre>\n<pre><code class=\"pgsql\">SELECT * FROM bookings WHERE book_ref = '000004' FOR UPDATE NOWAIT; <\/code><\/pre>\n<pre><code>ERROR:  could not obtain lock on row in relation \"bookings\" ROLLBACK; <\/code><\/pre>\n<p>\u0414\u0435\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u0430  \u0432 \u0436\u0443\u0440\u043d\u0430\u043b \u0441\u0435\u0440\u0432\u0435\u0440\u0430:<\/p>\n<pre><code class=\"bash\">\\! tail -5 logfile <\/code><\/pre>\n<pre><code>2025-08-07 11:06:16.882 MSK [113146] LOG:  process 113146 could not obtain ShareLock on transaction 981 2025-08-07 11:06:16.882 MSK [113146] DETAIL:  Process holding the lock: 112875, Wait queue: . 2025-08-07 11:06:16.882 MSK [113146] STATEMENT:  SELECT * FROM bookings WHERE book_ref = '000004' FOR UPDATE NOWAIT; 2025-08-07 11:06:16.882 MSK [113146] ERROR:  could not obtain lock on row in relation \"bookings\" 2025-08-07 11:06:16.882 MSK [113146] STATEMENT:  SELECT * FROM bookings WHERE book_ref = '000004' FOR UPDATE NOWAIT; <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_9219093ca\" id=\"commit_9219093ca\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5442\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0416\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0430\u043d\u0441\u0430<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=9219093ca\" rel=\"noopener noreferrer nofollow\">9219093ca<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=18cd15e70\" rel=\"noopener noreferrer nofollow\">18cd15e70<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=cb1456423\" rel=\"noopener noreferrer nofollow\">cb1456423<\/a><\/p>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/runtime-config-logging.html#GUC-LOG-CONNECTIONS\" rel=\"noopener noreferrer nofollow\"><em>log_connections<\/em><\/a> \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432. \u0420\u0430\u043d\u044c\u0448\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0431\u044b\u043b\u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 (\u0432\u043a\u043b\/\u0432\u044b\u043a\u043b). \u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f: receipt, authentication, authorization, setup_durations \u0438\u043b\u0438 all.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439. \u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u043f\u0435\u0440\u0432\u044b\u0445 \u0442\u0440\u0435\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 (receipt, authentication, authorization) \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445.<\/p>\n<p>\u0421 \u043d\u043e\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c setup_durations \u0432 \u0436\u0443\u0440\u043d\u0430\u043b \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0437\u0430\u043f\u0443\u0441\u043a \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u042d\u0442\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u043b\u0433\u0438\u0445 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f (<code>log_connections = 'all'<\/code>):<\/p>\n<pre><code>2025-08-07 12:13:05.100 MSK [115446] LOG:  connection received: host=[local] 2025-08-07 12:13:05.101 MSK [115446] LOG:  connection authenticated: user=\"postgres\" method=trust (\/home\/pal\/master\/data\/pg_hba.conf:117) 2025-08-07 12:13:05.101 MSK [115446] LOG:  connection authorized: user=postgres database=demo application_name=psql 2025-08-07 12:13:05.102 MSK [115446] LOG:  connection ready: setup total=2.234 ms, fork=0.413 ms, authentication=0.208 ms <\/code><\/pre>\n<p>\u0414\u043b\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f on, off, true, false, yes, no, 1, 0 \u043f\u043e\u043a\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u043d\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u043a\u0430\u043a \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435.<\/p>\n<p><a class=\"anchor\" name=\"commit_3516ea768\" id=\"commit_3516ea768\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/4907\/\" rel=\"noopener noreferrer nofollow\"><strong>log_line_prefix: IP-\u0430\u0434\u0440\u0435\u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=3516ea768\" rel=\"noopener noreferrer nofollow\">3516ea768<\/a><\/p>\n<p>\u0412 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 <em>listen_addresses<\/em> \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430\u0434\u0440\u0435\u0441\u043e\u0432, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442, \u0442\u043e \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 <em>log_line_prefix<\/em> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0441\u043f\u0435\u0446\u0441\u0438\u043c\u0432\u043e\u043b <code>%L<\/code>.<\/p>\n<p><a class=\"anchor\" name=\"commit_62d712ecf\" id=\"commit_62d712ecf\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/2837\/\" rel=\"noopener noreferrer nofollow\"><strong>pg_stat_statements: \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0432 IN<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=62d712ecf\" rel=\"noopener noreferrer nofollow\">62d712ecf<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=9fbd53dea\" rel=\"noopener noreferrer nofollow\">9fbd53dea<\/a><\/p>\n<p>\u0414\u043e 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0438 \u0442\u0440\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 pg_stat_statements. \u0425\u043e\u0442\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u043d\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0438\u0441\u043b\u043e\u043c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 IN.<\/p>\n<pre><code class=\"pgsql\">SELECT pg_stat_statements_reset();  SELECT * FROM flights WHERE flight_id IN (1,2); SELECT * FROM flights WHERE flight_id IN (1,2,3); SELECT * FROM flights WHERE flight_id IN (1,2,3,4); <\/code><\/pre>\n<p>\u0412 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043e\u0434\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u0434\u043e \u043e\u0434\u043d\u043e\u0439, \u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u043c\u043e\u0433\u043b\u043e \u0431\u044b\u0442\u044c \u0438 \u0431\u043e\u043b\u044c\u0448\u0435:<\/p>\n<pre><code class=\"pgsql\">SELECT queryid, query, calls FROM pg_stat_statements WHERE query ~ 'flights'\\gx <\/code><\/pre>\n<pre><code>-[ RECORD 1 ]----------------------------------------------------- queryid | 7334393817289890276 query   | SELECT * FROM flights WHERE flight_id IN ($1 \/*, ... *\/) calls   | 3 <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_eaf502747\" id=\"commit_eaf502747\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5551\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u0430 WAL<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=eaf502747\" rel=\"noopener noreferrer nofollow\">eaf502747<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=ce5bcc4a9\" rel=\"noopener noreferrer nofollow\">ce5bcc4a9<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=320545bfc\" rel=\"noopener noreferrer nofollow\">320545bfc<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=6a8a7ce47\" rel=\"noopener noreferrer nofollow\">6a8a7ce47<\/a><\/p>\n<p>\u0415\u0449\u0435 \u0432 14-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/533058#commit_8d9a9359\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c<\/a> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 pg_stat_wal \u0441\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u043c wal_buffers_full. \u0421\u0442\u043e\u043b\u0431\u0435\u0446 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043d\u0430 \u0434\u0438\u0441\u043a \u0438\u0437-\u0437\u0430 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u0430 WAL, \u0447\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 <em>wal_buffers<\/em>.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0447\u0435\u0442\u0447\u0438\u043a wal_buffers_full \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0437\u043a\u0438\u0445 \u0443\u0440\u043e\u0432\u043d\u044f\u0445. \u041e\u043d \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0432 pg_stat_statements, \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445 VACUUM\/ANALYZE \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c verbose, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 EXPLAIN \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c wal:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE bookings_copy (LIKE bookings);  EXPLAIN (wal, analyze, summary off, buffers off, timing off, costs off) INSERT INTO bookings_copy SELECT * FROM bookings; <\/code><\/pre>\n<pre><code>                         QUERY PLAN                           -------------------------------------------------------------  Insert on bookings_copy (actual rows=0.00 loops=1)    WAL: records=2111110 bytes=164490318 buffers full=18464    -&gt;  Seq Scan on bookings (actual rows=2111110.00 loops=1) (3 rows) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_bb8dff999\" id=\"commit_bb8dff999\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5027\/\" rel=\"noopener noreferrer nofollow\"><strong>\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u044f \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=bb8dff999\" rel=\"noopener noreferrer nofollow\">bb8dff999<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=7720082ae\" rel=\"noopener noreferrer nofollow\">7720082ae<\/a><\/p>\n<p>\u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u044f \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430:<\/p>\n<pre><code class=\"pgsql\">\\dconfig+ track_cost_delay_timing  <\/code><\/pre>\n<pre><code>                    List of configuration parameters         Parameter        | Value | Type |  Context  | Access privileges  -------------------------+-------+------+-----------+-------------------  track_cost_delay_timing | off   | bool | superuser |  (1 row) <\/code><\/pre>\n<p>\u0421 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043a\u043e\u043c\u0430\u043d\u0434\u044b VACUUM \u0438 ANALYZE \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0431\u0435\u0437 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a. \u0410 \u0432\u043e\u0442 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u044f \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e.<\/p>\n<pre><code class=\"pgsql\">\\dconfig *vacuum_cost_(delay|limit) <\/code><\/pre>\n<pre><code>   List of configuration parameters           Parameter           | Value  ------------------------------+-------  autovacuum_vacuum_cost_delay | 2ms  autovacuum_vacuum_cost_limit | -1  vacuum_cost_delay            | 0  vacuum_cost_limit            | 200 (4 rows) <\/code><\/pre>\n<p>\u041f\u043e\u0434\u0431\u0438\u0440\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 *cost_limit \u0438 *cost_delay \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u044f.<\/p>\n<p>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u0445:<\/p>\n<ul>\n<li>\n<p>\u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445 pg_stat_progress_vacuum \u0438 pg_stat_progress_analyze \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 delay_time;<\/p>\n<\/li>\n<li>\n<p>\u043a\u043e\u043c\u0430\u043d\u0434\u044b VACUUM \u0438 ANALYZE \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c verbose \u0432\u044b\u0432\u043e\u0434\u044f\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 <code>delay time<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0441\u0442\u0440\u043e\u043a\u0430 <code>delay time<\/code> \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0436\u0443\u0440\u043d\u0430\u043b\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u043a\u043b\u044e\u0447\u0438\u043c \u0441\u0431\u043e\u0440 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u044f \u0438 \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0430\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0438:<\/p>\n<pre><code class=\"pgsql\">ALTER SYSTEM SET track_cost_delay_timing = on; ALTER SYSTEM SET log_autovacuum_min_duration = 0; SELECT pg_reload_conf(); <\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u043d\u0435\u043f\u0443\u0441\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0430\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0435\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE tickets_copy AS SELECT * FROM tickets; <\/code><\/pre>\n<pre><code>SELECT 2949857 <\/code><\/pre>\n<p>\u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432 \u0436\u0443\u0440\u043d\u0430\u043b\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0441\u0442\u0440\u043e\u043a\u0438 <code>delay time<\/code> \u0434\u043b\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043d\u043e\u0432\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b:<\/p>\n<pre><code>2025-06-30 16:47:54.144 MSK [211678] LOG:  automatic vacuum of table \"demo.bookings.tickets_copy\": index scans: 0 \u2026     delay time: 11564.377 ms \u2026 2025-06-30 16:47:55.488 MSK [211678] LOG:  automatic analyze of table \"demo.bookings.tickets_copy\"     delay time: 622.403 ms \u2026 <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_0164a0f9e\" id=\"commit_0164a0f9e\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5605\/\" rel=\"noopener noreferrer nofollow\"><strong>vacuum_truncate: \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u0438\u0435\u043c \u043f\u0443\u0441\u0442\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=0164a0f9e\" rel=\"noopener noreferrer nofollow\">0164a0f9e<\/a><\/p>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043e\u0431\u0440\u0435\u0437\u0430\u0435\u0442 \u043f\u0443\u0441\u0442\u044b\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432 \u043a\u043e\u043d\u0446\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u044f \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u043e\u0432. \u042d\u0442\u043e\u0442 \u0444\u0430\u043a\u0442 \u0434\u0430\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 <a href=\"https:\/\/www.google.com\/search?q=pgcompacttable\" rel=\"noopener noreferrer nofollow\">\u0443\u0442\u0438\u043b\u0438\u0442\u0430\u0445<\/a> \u0434\u043b\u044f \u0431\u043e\u0440\u044c\u0431\u044b \u0441 \u0440\u0430\u0441\u043f\u0443\u0445\u0430\u043d\u0438\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446. \u041d\u043e \u0435\u0441\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430. \u0414\u043b\u044f \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u0438\u044f \u043f\u0443\u0441\u0442\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u0443\u044e \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0443. \u041f\u0440\u0438 \u0447\u0430\u0441\u0442\u044b\u0445 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439), \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0435  \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0445.<\/p>\n<p>\u0412 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <a href=\"https:\/\/www.postgresql.org\/docs\/18\/runtime-config-vacuum.html#GUC-VACUUM-TRUNCATE\" rel=\"noopener noreferrer nofollow\"><em>vacuum_truncate<\/em><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e) \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u0438\u0435 \u043f\u0443\u0441\u0442\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0430\u0431\u043b\u0438\u0446. \u0415\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0430 \u0440\u0443\u0447\u043d\u0443\u044e \u043e\u0447\u0438\u0441\u0442\u043a\u0443, \u0442\u0430\u043a \u0438 \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e.<\/p>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043d\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u043e 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u044b\u043b\u043e \u0434\u0432\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u0438\u0435 \u043f\u0443\u0441\u0442\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446. \u041c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0441 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c truncate:<\/p>\n<pre><code class=\"pgsql\">VACUUM(truncate off); <\/code><\/pre>\n<p>\u0418\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 truncate \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446:<\/p>\n<pre><code class=\"pgsql\">ALTER TABLE \u0442\u0430\u0431\u043b\u0438\u0446\u0430 SET (vacuum_truncate=off); <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_306dc520b\" id=\"commit_306dc520b\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5046\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0411\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u0430\u044f \u0430\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u00ab\u043c\u0435\u0440\u0442\u0432\u044b\u0445\u00bb \u0441\u0442\u0440\u043e\u043a \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=306dc520b\" rel=\"noopener noreferrer nofollow\">306dc520b<\/a><\/p>\n<p>\u0410\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u00ab\u043c\u0435\u0440\u0442\u0432\u044b\u0445\u00bb \u0441\u0442\u0440\u043e\u043a \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0435 \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0435:<\/p>\n<pre><code>autovacuum_vacuum_threshold + autovacuum_vacuum_scale_factor \u00d7 \u0447\u0438\u0441\u043b\u043e_\u0441\u0442\u0440\u043e\u043a_\u0432_\u0442\u0430\u0431\u043b\u0438\u0446\u0435 <\/code><\/pre>\n<p>\u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0438 \u0441\u0440\u0435\u0434\u043d\u0438\u0445 \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0442\u0430\u0431\u043b\u0438\u0446. \u041d\u043e \u0434\u043b\u044f \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u043f\u0430\u0443\u0437\u0430 \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438 \u0430\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439. \u0427\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0430\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0447\u0430\u0449\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <a href=\"https:\/\/www.postgresql.org\/docs\/18\/runtime-config-vacuum.html#GUC-AUTOVACUUM-VACUUM-MAX-THRESHOLD\" rel=\"noopener noreferrer nofollow\"><em>autovacuum_vacuum_max_threshold<\/em><\/a>, \u0430 \u0440\u0430\u0441\u0447\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code>least(   autovacuum_vacuum_threshold + autovacuum_vacuum_scale_factor \u00d7 \u0447\u0438\u0441\u043b\u043e_\u0441\u0442\u0440\u043e\u043a_\u0432_\u0442\u0430\u0431\u043b\u0438\u0446\u0435,   autovacuum_vacuum_max_threshold ) <\/code><\/pre>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u043e \u043f\u0440\u0435\u0436\u043d\u0435\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043e\u043d\u043e \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <em>autovacuum_vacuum_max_threshold<\/em>. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u0442 \u2015 \u043d\u0430\u0447\u043d\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <em>autovacuum_vacuum_max_threshold<\/em>.<\/p>\n<pre><code class=\"pgsql\">\\dconfig+ autovacuum_vacuum_[m|s|t]* <\/code><\/pre>\n<pre><code>                          List of configuration parameters             Parameter            |   Value   |  Type   | Context | Access privileges  ---------------------------------+-----------+---------+---------+-------------------  autovacuum_vacuum_max_threshold | 100000000 | integer | sighup  |   autovacuum_vacuum_scale_factor  | 0.2       | real    | sighup  |   autovacuum_vacuum_threshold     | 50        | integer | sighup  |  (3 rows) <\/code><\/pre>\n<p>\u0421 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c, \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 500 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0441\u0442\u0440\u043e\u043a.<\/p>\n<p><a class=\"anchor\" name=\"commit_99f8f3fbb\" id=\"commit_99f8f3fbb\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5320\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0411\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u0430\u044f \u0430\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u043e\u043a<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=99f8f3fbb\" rel=\"noopener noreferrer nofollow\">99f8f3fbb<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=06eae9e62\" rel=\"noopener noreferrer nofollow\">06eae9e62<\/a><\/p>\n<p>\u0410\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0440\u043e\u0441\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u00ab\u043c\u0435\u0440\u0442\u0432\u044b\u0445\u00bb \u0441\u0442\u0440\u043e\u043a, \u043d\u043e \u0438 \u043d\u0430 \u0432\u0441\u0442\u0430\u0432\u043a\u0443 \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u043e\u043a. \u0422\u0430\u0431\u043b\u0438\u0446\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u043e\u0439 \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0430\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u0442\u044c:<\/p>\n<pre><code>autovacuum_vacuum_insert_threshold + autovacuum_vacuum_insert_scale_factor \u00d7 \u0447\u0438\u0441\u043b\u043e_\u0441\u0442\u0440\u043e\u043a_\u0432_\u0442\u0430\u0431\u043b\u0438\u0446\u0435 <\/code><\/pre>\n<p>\u0421 \u0440\u043e\u0441\u0442\u043e\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0430\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c \u0432\u0441\u0435 \u0440\u0435\u0436\u0435 \u0438 \u0440\u0435\u0436\u0435. \u0427\u0442\u043e\u0431\u044b \u0430\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u0442\u0430\u043a\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0447\u0430\u0449\u0435, \u0432 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0440\u0430\u0441\u0447\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f. \u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u0444\u043e\u0440\u043c\u0443\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u043b\u044f (<em>autovacuum_vacuum_insert_scale_factor<\/em>) \u043d\u0435 \u043e\u0442 \u043e\u0431\u0449\u0435\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0441\u0442\u0440\u043e\u043a \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0430 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043d\u0435\u0437\u0430\u043c\u043e\u0440\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435. \u0422\u043e\u0447\u043d\u0435\u0435 \u0434\u043e\u043b\u044f \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043d\u0435\u0437\u0430\u043c\u043e\u0440\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446.<\/p>\n<pre><code>autovacuum_vacuum_insert_threshold + autovacuum_vacuum_insert_scale_factor \u00d7 \u0447\u0438\u0441\u043b\u043e_\u043d\u0435\u0437\u0430\u043c\u043e\u0440\u043e\u0436\u0435\u043d\u043d\u044b\u0445_\u0441\u0442\u0440\u0430\u043d\u0438\u0446_\u0432_\u0442\u0430\u0431\u043b\u0438\u0446\u0435 <\/code><\/pre>\n<p>\u0414\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u044d\u0442\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 pg_class, \u043a \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0435\u043c\u0443\u0441\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u0443 relpages, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0441\u0442\u043e\u043b\u0431\u0435\u0446 relallfrozen.<\/p>\n<p><a class=\"anchor\" name=\"commit_052026c9b\" id=\"commit_052026c9b\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5366\/\" rel=\"noopener noreferrer nofollow\"><strong>\u041d\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u0430\u044f \u0437\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0430 \u0432 \u043f\u043e\u043c\u043e\u0449\u044c \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u043e\u0439 \u043e\u0447\u0438\u0441\u0442\u043a\u0435<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=052026c9b\" rel=\"noopener noreferrer nofollow\">052026c9b<\/a><\/p>\n<p>\u041e\u0431\u044b\u0447\u043d\u0430\u044f, \u043d\u0435 \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u0430\u044f, \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 (\u043f\u0440\u0438\u0437\u043d\u0430\u043a all_visible \u0432 \u043a\u0430\u0440\u0442\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438), \u043d\u043e \u043d\u0435 \u0437\u0430\u043c\u043e\u0440\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u0441\u0442\u0440\u043e\u043a (\u0431\u0435\u0437 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430 all_frozen). \u0414\u043b\u044f \u0432\u0438\u0434\u043e\u0432 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441 \u043c\u0430\u043b\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f) \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0442\u0430\u043a\u0438\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u044c\u0441\u044f \u043c\u043d\u043e\u0433\u043e. \u0418 \u0434\u043b\u044f \u0438\u0445 \u0437\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0438 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0436\u0434\u0430\u0442\u044c \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u0432 \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 (\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <em>vacuum_freeze_table_age<\/em>).<\/p>\n<p>\u0410\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u0430\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u0435 \u0437\u0430\u043c\u043e\u0440\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0412\u044b\u0441\u043e\u043a\u0430 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u0435\u0448\u0430, \u043d\u043e \u0438 \u0438\u0437 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u043a\u0435\u0448\u0430 \u041e\u0421. \u0410 \u0437\u043d\u0430\u0447\u0438\u0442 \u0438\u0445 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0447\u0438\u0442\u0430\u0442\u044c \u0441 \u0434\u0438\u0441\u043a\u0430, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>\u0414\u043b\u044f \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u0431\u0443\u0434\u0443\u0449\u0435\u0439 \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u043e\u0439 \u043e\u0447\u0438\u0441\u0442\u043a\u0435, \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u043a\u0430\u043a all_visible \u0441 \u0446\u0435\u043b\u044c\u044e \u0437\u0430\u043c\u043e\u0440\u043e\u0437\u0438\u0442\u044c \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u0437\u043d\u0430\u043a all_frozen. \u0422\u0430\u043a\u0430\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0441 \u0446\u0435\u043b\u044c\u044e \u0437\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0441 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u043c all_visible \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u00ab<a href=\"https:\/\/www.postgresql.org\/docs\/devel\/routine-vacuuming.html#VACUUM-FOR-WRAPAROUND:~:text=eagerly%20scanned%20pages\" rel=\"noopener noreferrer nofollow\">\u043d\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u0430\u044f (eagerly) \u043e\u0447\u0438\u0441\u0442\u043a\u0430<\/a>\u00bb.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u0437\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0435 \u0437\u0430 \u0440\u0430\u0437, \u043d\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u0430\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 c \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u043c all_visible \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u043c\u043e\u0440\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0435\u0442 20% (\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 \u0432 \u043a\u043e\u0434\u0435) \u043e\u0442 \u043e\u0431\u0449\u0435\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 all_visible, \u043d\u043e \u043d\u0435 all_frozen \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435.<\/p>\n<p>\u041d\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u0430\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 all_visible \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u0435\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c \u043f\u0440\u0438\u0437\u043d\u0430\u043a all_frozen \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <a href=\"https:\/\/www.postgresql.org\/docs\/18\/runtime-config-vacuum.html#GUC-VACUUM-MAX-EAGER-FREEZE-FAILURE-RATE\" rel=\"noopener noreferrer nofollow\"><em>vacuum_max_eager_freeze_failure_rate<\/em><\/a>. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e 3% \u043e\u0442 \u043e\u0431\u0449\u0435\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435:<\/p>\n<pre><code class=\"pgsql\">\\dconfig+ vacuum_max_eager_freeze_failure_rate <\/code><\/pre>\n<pre><code>                         List of configuration parameters               Parameter               | Value | Type | Context | Access privileges  --------------------------------------+-------+------+---------+-------------------  vacuum_max_eager_freeze_failure_rate | 0.03  | real | user    |  (1 row) <\/code><\/pre>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043d\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0447\u0438\u0441\u0442\u043a\u0438.<\/p>\n<p>\u042d\u0442\u0438 \u043c\u0435\u0440\u044b \u043f\u0440\u0438\u0437\u0432\u0430\u043d\u044b \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u043e\u0439 \u043e\u0447\u0438\u0441\u0442\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0443\u0436\u0435 \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u043c all_frozen.<\/p>\n<p><a class=\"anchor\" name=\"commit_fdd146a8e\" id=\"commit_fdd146a8e\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5227\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0432\u0432\u043e\u0434\/\u0432\u044b\u0432\u043e\u0434<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=fdd146a8e\" rel=\"noopener noreferrer nofollow\">fdd146a8e<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=93bc3d75d\" rel=\"noopener noreferrer nofollow\">93bc3d75d<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=46250cdcb\" rel=\"noopener noreferrer nofollow\">46250cdcb<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=60f566b4f\" rel=\"noopener noreferrer nofollow\">60f566b4f<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=2a5e709e7\" rel=\"noopener noreferrer nofollow\">2a5e709e7<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=ae3df4b34\" rel=\"noopener noreferrer nofollow\">ae3df4b34<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=f4d0730bb\" rel=\"noopener noreferrer nofollow\">f4d0730bb<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=b27f8637e\" rel=\"noopener noreferrer nofollow\">b27f8637e<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=12ce89fd0\" rel=\"noopener noreferrer nofollow\">12ce89fd0<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=047cba7fa\" rel=\"noopener noreferrer nofollow\">047cba7fa<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=50cb7505b\" rel=\"noopener noreferrer nofollow\">50cb7505b<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=c325a7633\" rel=\"noopener noreferrer nofollow\">c325a7633<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=247ce06b8\" rel=\"noopener noreferrer nofollow\">247ce06b8<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=55b454d0e\" rel=\"noopener noreferrer nofollow\">55b454d0e<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=da7226993\" rel=\"noopener noreferrer nofollow\">da7226993<\/a>, \u2026<\/p>\n<p>\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0432\u0432\u043e\u0434\/\u0432\u044b\u0432\u043e\u0434 \u0432 PostgreSQL \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041c\u0435\u0442\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/runtime-config-resource.html#GUC-IO-METHOD\" rel=\"noopener noreferrer nofollow\"><em>io_method<\/em><\/a>:<\/p>\n<pre><code class=\"pgsql\">\\dconfig+ io_method  <\/code><\/pre>\n<pre><code>              List of configuration parameters  Parameter | Value  | Type |  Context   | Access privileges  -----------+--------+------+------------+-------------------  io_method | worker | enum | postmaster |  (1 row) <\/code><\/pre>\n<p>\u0412\u0441\u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0442\u0440\u0438 \u043c\u0435\u0442\u043e\u0434\u0430.<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u2014 worker \u2014 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043d\u0430 \u0432\u0441\u0435\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/runtime-config-resource.html#GUC-IO-WORKERS\" rel=\"noopener noreferrer nofollow\"><em>io_workers<\/em><\/a>, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 3:<\/p>\n<pre><code class=\"pgsql\">SELECT pid  FROM pg_stat_activity  WHERE backend_type = 'io worker'; <\/code><\/pre>\n<pre><code>  pid   -------  17630  17631  17632 (3 rows) <\/code><\/pre>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 \u2014 io_uring \u2014 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 Linux, \u0433\u0434\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c. \u0414\u043b\u044f \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043e\u0431\u0440\u0430\u043d \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c &#8212;with-liburing.<\/p>\n<p>\u0422\u0440\u0435\u0442\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 \u2014 sync \u2014 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435. \u042d\u0442\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041e\u0446\u0435\u043d\u0438\u0442\u044c \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e. \u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0433\u0434\u0430  \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0432\u0432\u043e\u0434\/\u0432\u044b\u0432\u043e\u0434 \u043d\u0430\u0447\u043d\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445.<\/p>\n<p>\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <a href=\"https:\/\/github.com\/postgres\/postgres\/blob\/master\/src\/backend\/storage\/aio\/README.md\" rel=\"noopener noreferrer nofollow\">README.md<\/a>.<\/p>\n<p><a class=\"anchor\" name=\"commit_10f664684\" id=\"commit_10f664684\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5618\/\" rel=\"noopener noreferrer nofollow\"><strong>io_combine_limit: \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d \u0434\u043e 1\u041c\u0411<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=10f664684\" rel=\"noopener noreferrer nofollow\">10f664684<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=06fb5612c\" rel=\"noopener noreferrer nofollow\">06fb5612c<\/a><\/p>\n<p>\u041f\u043e\u044f\u0432\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u0432 17-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/runtime-config-resource.html#GUC-IO-COMBINE-LIMIT\" rel=\"noopener noreferrer nofollow\"><em>io_combine_limit<\/em><\/a>. \u0415\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u2014 128\u041a\u0411. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0434\u043e 256\u041a\u0411.<\/p>\n<p>\u0412 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0435\u0436\u043d\u0438\u043c, \u043d\u043e \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0434\u043e 1\u041c\u0411. \u0422\u0430\u043a\u0436\u0435 \u043e\u043d\u043e \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/runtime-config-resource.html#GUC-IO-MAX-COMBINE-LIMIT\" rel=\"noopener noreferrer nofollow\"><em>io_max_combine_limit<\/em><\/a>, \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<pre><code class=\"pgsql\">\\dconfig+ io_*combine_limit <\/code><\/pre>\n<pre><code>                    List of configuration parameters       Parameter       | Value |  Type   |  Context   | Access privileges  ----------------------+-------+---------+------------+-------------------  io_combine_limit     | 128kB | integer | user       |   io_max_combine_limit | 128kB | integer | postmaster |  (2 rows) <\/code><\/pre>\n<p>\u0424\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e <em>io_combine_limit<\/em> \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c <em>io_max_combine_limit<\/em>, \u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p><a class=\"anchor\" name=\"commit_32acad7d1\" id=\"commit_32acad7d1\"><\/a><\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f<\/strong><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=32acad7d1\" rel=\"noopener noreferrer nofollow\">32acad7d1<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=925682260\" rel=\"noopener noreferrer nofollow\">925682260<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=c3e775e60\" rel=\"noopener noreferrer nofollow\">c3e775e60<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=c5c239e26\" rel=\"noopener noreferrer nofollow\">c5c239e26<\/a>,  <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=69273b818\" rel=\"noopener noreferrer nofollow\">69273b818<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=e215166c9\" rel=\"noopener noreferrer nofollow\">e215166c9<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=2b73a8cd3\" rel=\"noopener noreferrer nofollow\">2b73a8cd3<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=d9c7911e1\" rel=\"noopener noreferrer nofollow\">d9c7911e1<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=043799fa0\" rel=\"noopener noreferrer nofollow\">043799fa0<\/a><\/p>\n<p>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u0442\u0430\u0431\u043b\u0438\u0446 (\u0441 17-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438), \u043d\u043e \u0438 \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439:<\/p>\n<ul>\n<li>\n<p>\u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 (Btree, GiST, SP-GiST);<\/p>\n<\/li>\n<li>\n<p>\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u0435 (Bitmap Heap Scan);<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0433\u0440\u0435\u0432 \u0431\u0443\u0444\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u0435\u0448\u0430 (pg_prewarm);<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 (\u0444\u0443\u043d\u043a\u0446\u0438\u044f verify_heapam \u043c\u043e\u0434\u0443\u043b\u044f amcheck).<\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"commit_9a2e2a285\" id=\"commit_9a2e2a285\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5081\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0418\u043d\u0434\u0435\u043a\u0441\u044b BTree: \u043f\u0440\u043e\u043f\u0443\u0441\u043a \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u043e \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0435\u043c\u0443 \u0441\u0442\u043e\u043b\u0431\u0446\u0443 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0435<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=9a2e2a285\" rel=\"noopener noreferrer nofollow\">9a2e2a285<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=92fe23d93\" rel=\"noopener noreferrer nofollow\">92fe23d93<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=0fbceae84\" rel=\"noopener noreferrer nofollow\">0fbceae84<\/a><\/p>\n<p>\u042d\u0442\u0443 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u043b\u0443\u0447\u0448\u0435 \u0441\u0440\u0430\u0437\u0443 \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0435\u043c \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0442\u044c.<\/p>\n<p>\u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043f\u0440\u043e\u0434\u0430\u0436 \u043c\u043e\u0436\u043d\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0434\u0432\u0443\u0445 \u0440\u0430\u0437\u0440\u0435\u0437\u0430\u0445: \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u0430\u043c (deptno_id) \u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u043c (product_id):<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE sales (    deptno_id int,    product_id int,    amount numeric(20,2) );  INSERT INTO sales SELECT random(1,100)  AS deptno_id,        random(1,1000) AS product_id,        random (0.01, 10_000.00) AS amount FROM generate_series(1, 10_000_000); <\/code><\/pre>\n<p>\u0414\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u043d \u043c\u043d\u043e\u0433\u043e\u043a\u043e\u043b\u043e\u043d\u043e\u0447\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u043c\u0435\u0441\u0442\u0435 deptno_id:<\/p>\n<pre><code class=\"pgsql\">CREATE INDEX idx ON sales (deptno_id, product_id); VACUUM ANALYZE sales; <\/code><\/pre>\n<p>\u0422\u0430\u043a\u043e\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0433\u0434\u0435 \u043d\u0443\u0436\u043d\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u0430\u043c \u0438 \u043f\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u043c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u0430\u043c.<\/p>\n<p>\u041d\u043e \u0431\u0443\u0434\u0435\u0442 \u043b\u0438 \u0438\u043d\u0434\u0435\u043a\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u043c? \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c:<\/p>\n<pre><code class=\"pgsql\">EXPLAIN (analyze, costs off, summary off, timing off) SELECT COUNT(*) FROM sales WHERE product_id = 42; <\/code><\/pre>\n<pre><code>                               QUERY PLAN                                   ------------------------------------------------------------------------  Aggregate (actual rows=1.00 loops=1)    Buffers: shared hit=506    -&gt;  Index Only Scan using idx on sales (actual rows=9887.00 loops=1)          Index Cond: (product_id = 42)          Heap Fetches: 0          Index Searches: 102          Buffers: shared hit=506 <\/code><\/pre>\n<p>\u0418\u043d\u0434\u0435\u043a\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f! \u041d\u043e \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e?<\/p>\n<p>\u0414\u043b\u044f \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u043e \u0444\u0440\u0430\u0437\u0443 WHERE \u043d\u0435\u044f\u0432\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0435\u0449\u0435 \u043e\u0434\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435:<\/p>\n<pre><code class=\"pgsql\">WHERE product_id = 42 AND deptno_id = ANY(&lt;\u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439&gt;) <\/code><\/pre>\n<p>\u0412 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 PostgreSQL \u0435\u0449\u0435 \u0441 17-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u0430 deptno_id.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 deptno_id. \u042d\u0442\u043e \u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0445\u043e\u0434\u043e\u043c \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443, \u0432\u0435\u0434\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u043c\u0435\u0441\u0442\u0435. \u0417\u0430\u0442\u0435\u043c \u0431\u0435\u0440\u0435\u043c \u043f\u0435\u0440\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u0438\u0449\u0435\u043c \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0435 \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u0433\u0434\u0435 product_id = 42. \u0417\u0430\u0442\u0435\u043c \u0431\u0435\u0440\u0435\u043c \u0432\u0442\u043e\u0440\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0438 \u043e\u043f\u044f\u0442\u044c \u0438\u0449\u0435\u043c \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u043c. \u0418 \u0442\u0430\u043a \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043e\u0442\u0434\u0435\u043b\u043e\u0432.<\/p>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0438\u043d\u0434\u0435\u043a\u0441 \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e. \u0422\u043e\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u043e\u0432 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043b\u0430\u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 Index Searched. \u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044d\u0442\u043e 102: 100 \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u0434\u0435\u043b\u043e\u0432 \u0438 \u0435\u0449\u0435 2 \u0432\u0438\u0434\u0438\u043c\u043e \u043d\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u043e\u0442\u0434\u0435\u043b\u043e\u0432.<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u043b\u0438 \u0431\u044b \u0438\u043d\u0434\u0435\u043a\u0441 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0441\u044f \u0441\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430 product_id \u043e\u043d \u0431\u044b \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0438 \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435. \u041d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0439 \u0438\u043d\u0434\u0435\u043a\u0441, \u0430 \u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u0430\u0436\u0435 \u0441 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u044b\u043c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u0432\u0441\u0435\u0433\u043e 506 \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u0430 \u0431\u0435\u0437 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0441\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u0447\u0442\u043e \u043d\u0430 \u0434\u0432\u0430 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u0435:<\/p>\n<pre><code class=\"pgsql\">SELECT relpages FROM pg_class WHERE oid = 'sales'::regclass; <\/code><\/pre>\n<pre><code> relpages  ----------     54055 (1 row) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_e4309f73f\" id=\"commit_e4309f73f\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5325\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0418\u043d\u0434\u0435\u043a\u0441\u044b GiST: \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 <\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=e4309f73f\" rel=\"noopener noreferrer nofollow\">e4309f73f<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=e9e7b6604\" rel=\"noopener noreferrer nofollow\">e9e7b6604<\/a><\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 GiST <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/gist.html#GIST-BUFFERING-BUILD\" rel=\"noopener noreferrer nofollow\">\u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438<\/a> (sortsupport) \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432 14-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u043f\u043e\u0440\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432. \u0412 14-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0442\u0430\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 point_ops, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u0438 \u0440\u0435\u0437\u043a\u043e <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/522428#commit_16fa9b2b\" rel=\"noopener noreferrer nofollow\">\u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c<\/a> \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0434\u043b\u044f \u0442\u0438\u043f\u0430 point.<\/p>\n<p>\u0412 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043e\u043f\u043e\u0440\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 btree_gist, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f range_ops. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u0435\u0442\u043e\u0434 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439, \u0442\u043e \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE t AS SELECT g.id,        format('[%s,%s]', -1*random(0,1000000), random(0,1000000))::int4range AS r FROM generate_series(1,1_000_000) AS g(id);  CREATE INDEX ON t USING gist(id, r); <\/code><\/pre>\n<pre><code>Time: 762,247 ms <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0441\u0442\u0430\u043b\u043e \u0445\u0443\u0436\u0435, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441, \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0432 \u0435\u0433\u043e \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u0430:<\/p>\n<pre><code class=\"pgsql\">CREATE INDEX ON t USING gist(id, r) WITH (buffering=on); <\/code><\/pre>\n<pre><code>Time: 17579,742 ms (00:17,580) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_c0962a113\" id=\"commit_c0962a113\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5283\/\" rel=\"noopener noreferrer nofollow\"><strong>\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a: \u0437\u0430\u043c\u0435\u043d\u0430 IN (VALUES..) \u043d\u0430 \u043f\u043e\u0438\u0441\u043a \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=c0962a113\" rel=\"noopener noreferrer nofollow\">c0962a113<\/a><\/p>\n<p>\u041f\u043b\u0430\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 17-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438:<\/p>\n<pre><code class=\"pgsql\">EXPLAIN (costs off) SELECT * FROM flights WHERE flight_id IN (VALUES(1),(2),(3)); <\/code><\/pre>\n<pre><code>                      QUERY PLAN                       ------------------------------------------------------  Nested Loop    -&gt;  HashAggregate          Group Key: \"*VALUES*\".column1          -&gt;  Values Scan on \"*VALUES*\"    -&gt;  Index Scan using flights_pkey on flights          Index Cond: (flight_id = \"*VALUES*\".column1) (6 rows) <\/code><\/pre>\n<p>\u0412 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f IN (VALUES ..) \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u0430 \u043d\u0430 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0443, \u0447\u0442\u043e \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435:<\/p>\n<pre><code>                       QUERY PLAN                        --------------------------------------------------------  Index Scan using flights_pkey on flights    Index Cond: (flight_id = ANY ('{1,2,3}'::integer[])) (2 rows) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_fc069a3a6\" id=\"commit_fc069a3a6\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5043\/\" rel=\"noopener noreferrer nofollow\"><strong>\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a: \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0430\u043c\u043e\u0439 \u0441 \u0441\u043e\u0431\u043e\u0439<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=fc069a3a6\" rel=\"noopener noreferrer nofollow\">fc069a3a6<\/a><\/p>\n<p>\u041d\u043e\u0432\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0443 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0435\u0441\u043b\u0438 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0430\u043c\u043e\u0439 \u0441 \u0441\u043e\u0431\u043e\u0439 \u043f\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044e \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438. \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE t (id int PRIMARY KEY);  EXPLAIN (costs off) SELECT * FROM t a1 JOIN t a2 USING (id) WHERE a1.id &gt; 0 OR a2.id &lt; 1000; <\/code><\/pre>\n<pre><code>             QUERY PLAN               -------------------------------------  Seq Scan on t a2    Filter: ((id &gt; 0) OR (id &lt; 1000)) (2 rows) <\/code><\/pre>\n<p>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/runtime-config-query.html#GUC-ENABLE-SELF-JOIN-ELIMINATION\" rel=\"noopener noreferrer nofollow\"><em>enable_self_join_elimination<\/em><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e:<\/p>\n<pre><code class=\"pgsql\">\\dconfig enable_self_join_elimination <\/code><\/pre>\n<pre><code>   List of configuration parameters           Parameter           | Value  ------------------------------+-------  enable_self_join_elimination | on (1 row) <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u043b\u0430\u043d \u0441 \u0434\u0432\u0443\u043c\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b:<\/p>\n<pre><code>                   QUERY PLAN                    ------------------------------------------------  Hash Join    Hash Cond: (a1.id = a2.id)    Join Filter: ((a1.id &gt; 0) OR (a2.id &lt; 1000))    -&gt;  Seq Scan on t a1    -&gt;  Hash          -&gt;  Seq Scan on t a2 (6 rows) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_246dedc5d\" id=\"commit_246dedc5d\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5565\/\" rel=\"noopener noreferrer nofollow\"><strong>PL\/pgSQL: \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c =&gt;<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=246dedc5d\" rel=\"noopener noreferrer nofollow\">246dedc5d<\/a><\/p>\n<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u0443\u0440\u0441\u043e\u0440\u0430 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u043b\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 <code>\u0438\u043c\u044f := \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/code>, \u0445\u043e\u0442\u044f \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0434\u0432\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f \u0438\u043c\u0435\u043d\u0438 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>:=<\/code> \u0438\u043b\u0438 <code>=&gt;<\/code>.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0438 \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u0432:<\/p>\n<pre><code class=\"pgsql\">DO $$ DECLARE     cur CURSOR(x int) FOR         SELECT g.x         FROM generate_series(1,100) AS g(x)         WHERE g.x = cur.x; BEGIN     OPEN cur (x =&gt; 42); CLOSE cur;     OPEN cur (x := 42); CLOSE cur; END; $$; <\/code><\/pre>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 <code>=&gt;<\/code> \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e \u0441 Oracle PL\/SQL, \u0433\u0434\u0435 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c.<\/p>\n<p><a class=\"anchor\" name=\"commit_73eba5004\" id=\"commit_73eba5004\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5591\/\" rel=\"noopener noreferrer nofollow\"><strong>multiple_unique_conflicts: \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=73eba5004\" rel=\"noopener noreferrer nofollow\">73eba5004<\/a><\/p>\n<p>\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u043e \u0447\u0435\u043c <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/877752\/\" rel=\"noopener noreferrer nofollow\">\u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e<\/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. \u041a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/logical-replication-conflicts.html\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>, \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 pg_stat_subscription_stats \u0435\u0441\u0442\u044c \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0438 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432, \u0432 \u0436\u0443\u0440\u043d\u0430\u043b \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e \u0441\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430\u0445.<\/p>\n<p>\u0410 \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u043f\u043e\u043b\u043d\u0438\u043b\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432. \u041d\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u2014 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/logical-replication-conflicts.html#CONFLICT-MULTIPLE-UNIQUE-CONFLICTS\" rel=\"noopener noreferrer nofollow\">multiple_unique_conflicts<\/a>.<\/p>\n<p>\u041e\u043d \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u043e \u043d\u0435 \u043e\u0434\u043d\u043e, \u0430 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439. \u041f\u043e\u043b\u0443\u0447\u0438\u0432 \u0442\u0430\u043a\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u043f\u0440\u043e\u0449\u0435 \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u0437\u0430 \u043e\u0434\u0438\u043d \u0440\u0430\u0437.<\/p>\n<p><a class=\"anchor\" name=\"commit_ac0e33136\" id=\"commit_ac0e33136\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/4770\/\" rel=\"noopener noreferrer nofollow\"><strong>idle_replication_slot_timeout: \u0430\u043d\u043d\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u043b\u043e\u0442\u043e\u0432 \u043f\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0443<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=ac0e33136\" rel=\"noopener noreferrer nofollow\">ac0e33136<\/a><\/p>\n<p>\u0414\u043b\u044f \u0430\u043d\u043d\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u043b\u043e\u0442\u043e\u0432 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/runtime-config-replication.html#GUC-IDLE-REPLICATION-SLOT-TIMEOUT\" rel=\"noopener noreferrer nofollow\"><em>idle_replication_slot_timeout<\/em><\/a>. \u041f\u043e\u0441\u043b\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430, \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0430\u043d\u043d\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u043b\u043e\u0442\u044b.<\/p>\n<p><a class=\"anchor\" name=\"commit_04ff636cb\" id=\"commit_04ff636cb\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5441\/\" rel=\"noopener noreferrer nofollow\"><strong>max_active_replication_origins: \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=04ff636cb\" rel=\"noopener noreferrer nofollow\">04ff636cb<\/a><\/p>\n<p>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 (replication origins) \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b\u043e\u0441\u044c \u0442\u0435\u043c \u0436\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c, \u0447\u0442\u043e \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0442\u043e\u0432 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u2014 <em>max_replication_slots<\/em>. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u043b\u043e\u0442\u044b \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439, \u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0438 \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0435.<\/p>\n<p>\u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/runtime-config-replication.html#GUC-MAX-ACTIVE-REPLICATION-ORIGINS\" rel=\"noopener noreferrer nofollow\"><em>max_active_replication_origins<\/em><\/a> \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a <em>max_replication_slots<\/em> \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0442\u043e\u0432 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438.<\/p>\n<pre><code class=\"pgsql\">\\dconfig+ max_active_replication_origins <\/code><\/pre>\n<pre><code>                         List of configuration parameters            Parameter            | Value |  Type   |  Context   | Access privileges  --------------------------------+-------+---------+------------+-------------------  max_active_replication_origins | 10    | integer | postmaster |  (1 row) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_b3f0be788\" id=\"commit_b3f0be788\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/4412\/\" rel=\"noopener noreferrer nofollow\"><strong>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 OAuth 2.0<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=b3f0be788\" rel=\"noopener noreferrer nofollow\">b3f0be788<\/a><\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc6749\" rel=\"noopener noreferrer nofollow\">OAuth \u0432\u0435\u0440\u0441\u0438\u0438 2.0<\/a>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 pg_hba.conf \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438\/\u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/auth-oauth.html#AUTH-OAUTH\" rel=\"noopener noreferrer nofollow\"><code>oauth<\/code><\/a>.<\/p>\n<p>\u0422\u0430\u043a\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u043b\u0443\u0436\u0431\u0435, \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u0438 \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438.<\/p>\n<p>\u041a\u043b\u0438\u0435\u043d\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 libpq, \u0441\u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/libpq-oauth.html#LIBPQ-OAUTH\" rel=\"noopener noreferrer nofollow\">\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b<\/a> \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 OAuth. \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 (\u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/runtime-config-connection.html#GUC-OAUTH-VALIDATOR-LIBRARIES\" rel=\"noopener noreferrer nofollow\"><em>oauth_validator_libraries<\/em><\/a>). \u041c\u043e\u0434\u0443\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c PostgreSQL, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0445 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c\u0443 \u0432 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/oauth-validators.html\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a> \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443, \u0438\u043b\u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p><a class=\"anchor\" name=\"commit_3642df265\" id=\"commit_3642df265\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5534\/\" rel=\"noopener noreferrer nofollow\"><strong>dblink: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043a\u0432\u043e\u0437\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 SCRAM<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=3642df265\" rel=\"noopener noreferrer nofollow\">3642df265<\/a><\/p>\n<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0443\u0436\u0435 <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/886292\/#commit_761c79508\" rel=\"noopener noreferrer nofollow\">\u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u043e\u0441\u044c<\/a> \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 use_scram_passthrough \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0431\u0430\u0437\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 postgres_fdw \u0431\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u044f \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 USER MAPPING.<\/p>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0438 \u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 dblink. \u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u043a\u0432\u043e\u0437\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 SCRAM \u0432 dblink_fdw \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 use_scram_passthrough. \u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0432\u044b\u0448\u0435.<\/p>\n<p><a class=\"anchor\" name=\"commit_749a9e20c\" id=\"commit_749a9e20c\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5481\/\" rel=\"noopener noreferrer nofollow\"><strong>pgcrypto: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 sha256crypt \u0438 sha512crypt \u0434\u043b\u044f \u0445\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u0435\u0439<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=749a9e20c\" rel=\"noopener noreferrer nofollow\">749a9e20c<\/a><\/p>\n<p>\u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 crypt \u0438 get_salt \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f pgcrypto \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 SHA-2 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b sha256crypt \u0438 sha512crypt:<\/p>\n<pre><code class=\"pgsql\">WITH cte AS (   SELECT crypt('Hello, World!', gen_salt('sha256crypt')) AS passwd ) SELECT cte.passwd,        crypt('Hello, World!', cte.passwd) = cte.passwd AS match FROM cte\\gx <\/code><\/pre>\n<pre><code>-[ RECORD 1 ]----------------------------------------------------------------------- passwd | $5$rounds=5000$O57oLxAqYK9wqn9m$qgCp3qJAoeS7ufx9cmX5ZYqfk2x5cO3\/FtRCpQYa6D\/ match  | t <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_9ad1b3d01\" id=\"commit_9ad1b3d01\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5529\/\" rel=\"noopener noreferrer nofollow\"><strong>pgcrypto: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 CFB \u0434\u043b\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f AES<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=9ad1b3d01\" rel=\"noopener noreferrer nofollow\">9ad1b3d01<\/a><\/p>\n<p>\u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 encrypt\/decrypt \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f pgcrypto \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0436\u0438\u043c CFB (Cipher Feedback Mode):<\/p>\n<pre><code class=\"pgsql\">WITH cte AS (   SELECT encrypt('Hello, World!', '0123456789', 'aes-cfb') AS encrypted_str ) SELECT encode(          decrypt(cte.encrypted_str, '0123456789', 'aes-cfb'),          'escape'        ) FROM cte; <\/code><\/pre>\n<pre><code>    encode      ---------------  Hello, World! (1 row) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_0d6c47766\" id=\"commit_0d6c47766\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/4945\/\" rel=\"noopener noreferrer nofollow\"><strong>ALTER DEFAULT PRIVILEGES \u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=0d6c47766\" rel=\"noopener noreferrer nofollow\">0d6c47766<\/a><\/p>\n<p>\u041f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 ALTER DEFAULT PRIVILEGES:<\/p>\n<pre><code class=\"pgsql\">ALTER DEFAULT PRIVILEGES GRANT SELECT ON LARGE OBJECTS TO public;  SELECT lo_create(42); <\/code><\/pre>\n<pre><code> lo_create  -----------         42 (1 row) <\/code><\/pre>\n<pre><code class=\"pgsql\">\\lo_list+ <\/code><\/pre>\n<pre><code>                   Large objects  ID |  Owner   |  Access privileges   | Description  ----+----------+----------------------+-------------  42 | postgres | =r\/postgres         +|      |          | postgres=rw\/postgres |  (1 row) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_2da74d8d6\" id=\"commit_2da74d8d6\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5500\/\" rel=\"noopener noreferrer nofollow\"><strong>libpq: \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 sslkeylogfile<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=2da74d8d6\" rel=\"noopener noreferrer nofollow\">2da74d8d6<\/a><\/p>\n<p>\u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/libpq-connect.html#LIBPQ-CONNECT-SSLKEYLOGFILE\" rel=\"noopener noreferrer nofollow\">sslkeylogfile<\/a> \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 libpq \u0437\u0430\u0434\u0430\u0435\u0442 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430, \u043a\u0443\u0434\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u0445 TLS-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0432 <a href=\"https:\/\/www.ietf.org\/archive\/id\/draft-thomson-tls-keylogfile-00.html\" rel=\"noopener noreferrer nofollow\">\u0444\u043e\u0440\u043c\u0430\u0442\u0435 NSS<\/a>.<\/p>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c.<\/p>\n<p><a class=\"anchor\" name=\"commit_fc0438b4e\" id=\"commit_fc0438b4e\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/4308\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0422\u0435\u043c\u043f\u043e\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0435, \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0438<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=fc0438b4e\" rel=\"noopener noreferrer nofollow\">fc0438b4e<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=89f908a6d\" rel=\"noopener noreferrer nofollow\">89f908a6d<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=34768ee36\" rel=\"noopener noreferrer nofollow\">34768ee36<\/a><\/p>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0442\u0435\u043c\u043f\u043e\u0440\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 SQL. \u0412 17-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u044b\u043b\u0430 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u044f\u0442\u0430 \u043f\u0435\u0440\u0432\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043c\u043f\u043e\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438. \u041d\u043e \u043d\u0435\u0437\u0430\u0434\u043e\u043b\u0433\u043e \u0434\u043e \u0432\u044b\u043f\u0443\u0441\u043a\u0430, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0445, \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u043e\u0442\u043c\u0435\u043d\u0438\u043b\u0438. \u0421\u0435\u0439\u0447\u0430\u0441 \u0432\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430.<\/p>\n<p>\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0435\u043c\u043f\u043e\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0432 \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u0430\u0432 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0441 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 WITHOUT OVERLAPS:<\/p>\n<pre><code class=\"pgsql\">CREATE EXTENSION btree_gist;  CREATE TABLE prices(     product_id int,     price numeric,     during daterange,     PRIMARY KEY (product_id, during WITHOUT OVERLAPS) ); <\/code><\/pre>\n<p>\u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 prices \u043a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 product_id \u0438 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u0434\u0430\u0442 \u0432 during. \u042d\u0442\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0446\u0435\u043d\u044b \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<pre><code class=\"pgsql\">INSERT INTO prices VALUES     (1, 42, '[2024-01-01, 2025-01-01)'),     (1, 43, '[2025-01-01, 2026-01-01)'); <\/code><\/pre>\n<pre><code>INSERT 0 2 <\/code><\/pre>\n<pre><code class=\"pgsql\">INSERT INTO prices VALUES     (1, 44, '[2025-09-01, 2026-01-01)'); <\/code><\/pre>\n<pre><code>ERROR:  conflicting key value violates exclusion constraint \"prices_pkey\" DETAIL:  Key (product_id, during)=(1, [2025-09-01,2026-01-01)) conflicts with existing key (product_id, during)=(1, [2025-01-01,2026-01-01)). <\/code><\/pre>\n<p>\u041f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0431\u0435\u0437 \u0442\u0435\u043c\u043f\u043e\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 EXCLUDE. \u0410 \u0447\u0442\u043e\u0431\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 btree_gist. \u0414\u043b\u044f \u0442\u0435\u043c\u043f\u043e\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u0442\u0430\u043a\u0436\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 btree_gist, \u0430 \u00ab\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c\u00bb \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 EXCLUDE, \u0447\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u0438\u0434\u043d\u043e \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443 \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<p>\u041d\u0430 \u0442\u0435\u043c\u043f\u043e\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0438\u043b\u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u043c\u043e\u0436\u0435\u0442 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u0442\u0435\u043c\u043f\u043e\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043a\u043b\u044e\u0447. \u0412 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e PERIOD. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442, \u0435\u0441\u043b\u0438 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0434\u0430\u0442 \u0432 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0434\u0430\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0446\u0435\u043d.<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE offers(     offer_id int,     product_id int,     during daterange,     PRIMARY KEY (offer_id, product_id),     FOREIGN KEY (product_id, PERIOD during)         REFERENCES prices (product_id, PERIOD during) );      INSERT INTO offers VALUES     (1, 1, '[2025-09-01, 2026-03-01)'); <\/code><\/pre>\n<pre><code>ERROR:  insert or update on table \"offers\" violates foreign key constraint \"offers_product_id_during_fkey\" DETAIL:  Key (product_id, during)=(1, [2025-09-01,2026-03-01)) is not present in table \"prices\". <\/code><\/pre>\n<p>\u041f\u043e\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043d\u0435 \u043f\u043e\u043b\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 SQL \u0434\u043b\u044f \u0442\u0435\u043c\u043f\u043e\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439. \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p><a class=\"anchor\" name=\"commit_83ea6c540\" id=\"commit_83ea6c540\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/4972\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=83ea6c540\" rel=\"noopener noreferrer nofollow\">83ea6c540<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=cdc168ad4\" rel=\"noopener noreferrer nofollow\">cdc168ad4<\/a><\/p>\n<p>\u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0435\u0449\u0435 \u0432 12-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u0414\u043b\u044f \u0438\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f:<\/p>\n<pre><code class=\"pgsql\">GENERATED ALWAYS AS (expr) STORED <\/code><\/pre>\n<p>\u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e STORED \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0435\/\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u0438\u0441\u043a.<\/p>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c SQL \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u2014 VIRTUAL, \u043a\u043e\u0433\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u0441\u0442\u043e\u043b\u0431\u0446\u0430. \u042d\u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446, \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u044e\u0449\u0438\u0439 \u043c\u0435\u0442\u043a\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE t (   id uuid PRIMARY KEY,   creation_date timestamptz      GENERATED ALWAYS AS (uuid_extract_timestamp(id)) VIRTUAL ); <\/code><\/pre>\n<p>\u0412\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438:<\/p>\n<pre><code class=\"pgsql\">INSERT INTO t SELECT uuidv7() FROM generate_series(1,3);  SELECT * FROM t; <\/code><\/pre>\n<pre><code>                  id                  |       creation_date         --------------------------------------+----------------------------  01990953-f898-7c70-926e-2812a5972378 | 2025-09-02 10:28:42.136+03  01990953-f899-7177-9035-ceeff8f87ea5 | 2025-09-02 10:28:42.137+03  01990953-f899-71f6-8bde-52e6b1c7df39 | 2025-09-02 10:28:42.137+03 (3 rows) <\/code><\/pre>\n<p>\u0421\u0442\u043e\u043b\u0431\u0435\u0446 creation_date \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0423 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0435\u0441\u0442\u044c \u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0445 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p><a class=\"anchor\" name=\"commit_a379061a2\" id=\"commit_a379061a2\"><\/a><\/p>\n<p><strong>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 NOT NULL: \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\/\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f<\/strong><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=a379061a2\" rel=\"noopener noreferrer nofollow\">a379061a2<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=f4e53e10b\" rel=\"noopener noreferrer nofollow\">f4e53e10b<\/a><\/p>\n<p>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 NOT NULL \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 pg_constraint. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a \u043d\u0438\u043c \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0438\u043c\u0435\u043d\u0438. \u0427\u0442\u043e \u044d\u0442\u043e \u0434\u0430\u0435\u0442?<\/p>\n<p>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 (\u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043c\u043c\u0438\u0442):<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE t (id int); INSERT INTO t VALUES (null);  ALTER TABLE t ADD CONSTRAINT id_nn NOT NULL id NOT VALID;  \\d+ t <\/code><\/pre>\n<pre><code>                                            Table \"public.t\"  Column |  Type   | Collation | Nullable | Default | Storage | Compression | Stats target | Description  --------+---------+-----------+----------+---------+---------+-------------+--------------+-------------  id     | integer |           | not null |         | plain   |             |              |  Not-null constraints:     \"id_nn\" NOT NULL \"id\" NOT VALID Access method: heap <\/code><\/pre>\n<p>\u0410 \u043f\u043e\u0437\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0432 \u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<pre><code class=\"pgsql\">ALTER TABLE t VALIDATE CONSTRAINT id_nn; <\/code><\/pre>\n<pre><code>ERROR:  column \"id\" of relation \"t\" contains null values <\/code><\/pre>\n<pre><code class=\"pgsql\">UPDATE t SET id = 1; <\/code><\/pre>\n<pre><code>UPDATE 1 <\/code><\/pre>\n<pre><code class=\"pgsql\">ALTER TABLE t VALIDATE CONSTRAINT id_nn; <\/code><\/pre>\n<pre><code>ALTER TABLE <\/code><\/pre>\n<p>\u041c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0438 \u0441\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e INHERIT (\u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u043c\u043c\u0438\u0442). \u041f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0432\u043e \u0432\u0441\u0435 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0435\u0441\u0442\u044c.<\/p>\n<pre><code class=\"pgsql\">ALTER TABLE t ALTER CONSTRAINT id_nn INHERIT; <\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0443 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f, \u043d\u043e \u043a\u0430\u043a \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439.<\/p>\n<pre><code class=\"pgsql\">ALTER TABLE t ALTER CONSTRAINT id_nn NO INHERIT; <\/code><\/pre>\n<p>\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 NOT NULL \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e \u0438\u043c\u0435\u043d\u0438:<\/p>\n<pre><code class=\"pgsql\">ALTER TABLE t DROP CONSTRAINT id_nn; <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_ca87c415e\" id=\"commit_ca87c415e\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5285\/\" rel=\"noopener noreferrer nofollow\"><strong>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438: NOT ENFORCED<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=ca87c415e\" rel=\"noopener noreferrer nofollow\">ca87c415e<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=eec0040c4\" rel=\"noopener noreferrer nofollow\">eec0040c4<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=b663b9436\" rel=\"noopener noreferrer nofollow\">b663b9436<\/a><\/p>\n<p>\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 SQL, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u043a NOT ENFORCED. \u0422\u0430\u043a\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 18-\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0434\u043b\u044f \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 CHECK.<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE t (   id int PRIMARY KEY,   parent_id int REFERENCES t NOT ENFORCED ); <\/code><\/pre>\n<p>\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b, \u0430 \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 (\u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 NOT VALID) \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u043e\u0435, \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0435, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"pgsql\">ALTER TABLE t ADD CONSTRAINT id_check CHECK (id &gt; 0) NOT ENFORCED;  \\d t <\/code><\/pre>\n<pre><code>                   Table \"public.t\"   Column   |  Type   | Collation | Nullable | Default  -----------+---------+-----------+----------+---------  id        | integer |           | not null |   parent_id | integer |           |          |  Indexes:     \"t_pkey\" PRIMARY KEY, btree (id) Check constraints:     \"id_check\" CHECK (id &gt; 0) NOT ENFORCED Foreign-key constraints:     \"t_parent_id_fkey\" FOREIGN KEY (parent_id) REFERENCES t(id) NOT ENFORCED Referenced by:     TABLE \"t\" CONSTRAINT \"t_parent_id_fkey\" FOREIGN KEY (parent_id) REFERENCES t(id) NOT ENFORCED <\/code><\/pre>\n<p>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0447\u043d\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c:<\/p>\n<pre><code class=\"pgsql\">ALTER TABLE t ALTER CONSTRAINT t_parent_id_fkey ENFORCED; <\/code><\/pre>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438 CHECK \u0442\u0430\u043a \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f:<\/p>\n<pre><code class=\"pgsql\">ALTER TABLE t ALTER CONSTRAINT id_check ENFORCED; <\/code><\/pre>\n<pre><code>ERROR:  cannot alter enforceability of constraint \"id_check\" of relation \"t\" <\/code><\/pre>\n<p>\u0414\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0435\u0433\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430\u043d\u043e\u0432\u043e.<\/p>\n<p>\u041f\u043e \u0445\u043e\u0434\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \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. \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u043a NOT ENFORCED, \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u043c\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0438 \u043a\u0430\u043a NOT VALID. \u0410 \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 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0438 \u0441 NOT VALID. \u0427\u0442\u043e \u0438 \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e (\u0442\u0440\u0435\u0442\u0438\u0439 \u043a\u043e\u043c\u043c\u0438\u0442).<\/p>\n<p><a class=\"anchor\" name=\"commit_f78ca6f3e\" id=\"commit_f78ca6f3e\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/4886\/\" rel=\"noopener noreferrer nofollow\"><strong>file_copy_method: \u0441\u043f\u043e\u0441\u043e\u0431 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=f78ca6f3e\" rel=\"noopener noreferrer nofollow\">f78ca6f3e<\/a><\/p>\n<p>\u0412 15-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/679264\/#commit_9c08aea6\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c<\/a> \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u0432\u0435 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438:<\/p>\n<ul>\n<li>\n<p>WAL_LOG \u2014 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 WAL \u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0445 \u0431\u0430\u0437, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 template1. \u042d\u0442\u0430 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<\/li>\n<li>\n<p>FILE_COPY \u2014 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432. \u041f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043b\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 FILE_COPY \u0432 \u043d\u043e\u0432\u043e\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 <a href=\"https:\/\/www.postgresql.org\/docs\/18\/runtime-config-resource.html#GUC-FILE-COPY-METHOD\" rel=\"noopener noreferrer nofollow\"><em>file_copy_method<\/em><\/a> \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<pre><code class=\"pgsql\"> \\dconfig+ file_copy_method <\/code><\/pre>\n<pre><code>               List of configuration parameters     Parameter     | Value | Type | Context | Access privileges  ------------------+-------+------+---------+-------------------  file_copy_method | copy  | enum | user    |  (1 row) <\/code><\/pre>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e COPY, \u043e\u043d\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0442\u0430\u0440\u043e\u043c\u0443 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e. \u0410 \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CLONE \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 copy_file_range \u0432 Linux \u0438 FreeBSD \u0438\u043b\u0438 copyfile \u043d\u0430 macOS. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u041e\u0421 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CLONE \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 (COW).<\/p>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <em>file_copy_method<\/em> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"pgsql\">CREATE DATABASE ... STRATEGY=FILE_COPY <\/code><\/pre>\n<p>\u043d\u043e \u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0434\u0440\u0443\u0433\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\">ALTER DATABASE ... SET TABLESPACE ... <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_4f7f7b037\" id=\"commit_4f7f7b037\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/4913\/\" rel=\"noopener noreferrer nofollow\"><strong>extension_control_path: \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=4f7f7b037\" rel=\"noopener noreferrer nofollow\">4f7f7b037<\/a><\/p>\n<p>\u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <em>extension_control_path<\/em> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u0433\u0434\u0435 \u0438\u0441\u043a\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u0435\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0432\u043d\u0435 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0438 PostgreSQL, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439.<\/p>\n<pre><code class=\"pgsql\">\\dconfig+ extension_control_path  <\/code><\/pre>\n<pre><code>                     List of configuration parameters        Parameter        |  Value  |  Type  |  Context  | Access privileges  ------------------------+---------+--------+-----------+-------------------  extension_control_path | $system | string | superuser |  (1 row) <\/code><\/pre>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e $system \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043f\u0440\u0435\u0436\u043d\u0435\u0435 \u043c\u0435\u0441\u0442\u043e \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 SHAREDIR:<\/p>\n<pre><code class=\"pgsql\">SELECT setting || '\/extension' FROM pg_config() WHERE name = 'SHAREDIR'; <\/code><\/pre>\n<pre><code>                  ?column?                   --------------------------------------------  \/home\/pal\/master\/share\/postgresql\/extension (1 row) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_329304c90\" id=\"commit_329304c90\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5209\/\" rel=\"noopener noreferrer nofollow\"><strong>\u041d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=329304c90\" rel=\"noopener noreferrer nofollow\">329304c90<\/a><\/p>\n<p>\u0414\u043b\u044f \u0441\u0442\u0440\u043e\u043a \u0441 \u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/882578\/#commit_85b7efa1c\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0438\u0441\u043a \u043f\u043e LIKE<\/a>, \u043d\u043e \u0438 \u043f\u043e\u0438\u0441\u043a \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 position, strpos, replace, split_part, string_to_array, string_to_table.<\/p>\n<pre><code class=\"pgsql\">CREATE COLLATION ignore_case   (provider = icu, locale = 'und-u-ks-level2', deterministic = false);  SELECT strpos('PostgreSQL' COLLATE \"ignore_case\", 'sql'); <\/code><\/pre>\n<pre><code> strpos  --------       8 (1 row) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_a3b6dfd41\" id=\"commit_a3b6dfd41\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5098\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 gamma \u0438 lgamma<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=a3b6dfd41\" rel=\"noopener noreferrer nofollow\">a3b6dfd41<\/a><\/p>\n<p>\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%93%D0%B0%D0%BC%D0%BC%D0%B0-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F\" rel=\"noopener noreferrer nofollow\">gamma \u0438 lgamma<\/a> \u0441\u0442\u0430\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 SQL:<\/p>\n<pre><code class=\"pgsql\">SELECT g.x, gamma(g.x), lgamma(g.x),        factorial(g.x-1), ln(gamma(g.x)) FROM generate_series(1,5) AS g(x); <\/code><\/pre>\n<pre><code> x | gamma |       lgamma       | factorial |         ln          ---+-------+--------------------+-----------+--------------------  1 |     1 |                  0 |         1 |                  0  2 |     1 |                  0 |         1 |                  0  3 |     2 | 0.6931471805599453 |         2 | 0.6931471805599453  4 |     6 |  1.791759469228055 |         6 |  1.791759469228055  5 |    24 | 3.1780538303479458 |        24 | 3.1780538303479458 (5 rows) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_6da469bad\" id=\"commit_6da469bad\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5176\/\" rel=\"noopener noreferrer nofollow\"><strong>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0432 bytea \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=6da469bad\" rel=\"noopener noreferrer nofollow\">6da469bad<\/a><\/p>\n<p>\u0426\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u044b (smallint, int \u0438 bigint) \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 bytea. \u041e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f:<\/p>\n<pre><code class=\"pgsql\">SELECT 42::bytea::int; <\/code><\/pre>\n<pre><code> int4  ------    42 (1 row) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_9324c8c58\" id=\"commit_9324c8c58\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5465\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0424\u0443\u043d\u043a\u0446\u0438\u044f pg_get_loaded_modules: \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0432 \u043e\u0431\u0449\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=9324c8c58\" rel=\"noopener noreferrer nofollow\">9324c8c58<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=55527368b\" rel=\"noopener noreferrer nofollow\">55527368b<\/a><\/p>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 SQL, \u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u00ab\u043f\u0440\u044f\u0447\u0435\u0442\u0441\u044f\u00bb \u0432 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439 \u0432 \u043e\u0431\u0449\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 auto_explain.<\/p>\n<p>\u0414\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u043a\u0430\u043a\u0430\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u041e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f pg_get_loaded_modules, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0438:<\/p>\n<pre><code class=\"pgsql\">LOAD 'auto_explain';  SELECT * FROM  pg_get_loaded_modules(); <\/code><\/pre>\n<pre><code> module_name  | version |    file_name     --------------+---------+-----------------  auto_explain | 18beta1 | auto_explain.so (1 row) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_dcf7e1697\" id=\"commit_dcf7e1697\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5493\/\" rel=\"noopener noreferrer nofollow\"><strong>pg_buffercache: \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u043b\u0438 \u0432\u0441\u0435\u0433\u043e \u043a\u0435\u0448\u0430<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=dcf7e1697\" rel=\"noopener noreferrer nofollow\">dcf7e1697<\/a><\/p>\n<p>\u0412 17-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 pg_buffercache <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/841408\/#commit_13453eed\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c<\/a> \u0444\u0443\u043d\u043a\u0446\u0438\u044f pg_buffercache_evict, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0432\u044b\u0442\u0435\u0441\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u0438\u0437 \u043e\u0431\u0449\u0435\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u0435\u0448\u0430. \u041d\u043e \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0442\u0435\u0441\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0431\u0443\u0444\u0435\u0440\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b\/\u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0438\u043b\u0438 \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043a\u0435\u0448 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e, \u0447\u0442\u043e \u043d\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0443\u0434\u043e\u0435\u043c\u043a\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e. \u0410 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0442\u0430\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439.<\/p>\n<p>\u0414\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0439 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043a\u0435\u0448\u0430 \u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 pg_buffercache_evict_relation \u0438 pg_buffercache_evict_all, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u044e\u0442 \u0432\u0441\u0435 \u043d\u0435\u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u0435 \u0431\u0443\u0444\u0435\u0440\u044b \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0432\u0441\u0435\u0433\u043e \u043a\u0435\u0448\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0435 tickets \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u0432 \u043a\u0435\u0448\u0435 \u043e\u043d\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442:<\/p>\n<pre><code class=\"pgsql\">CREATE EXTENSION pg_buffercache;  SELECT count(*) FROM tickets;                 <\/code><\/pre>\n<pre><code>  count   ---------  2949857 (1 row) <\/code><\/pre>\n<pre><code class=\"pgsql\">SELECT count(*)               FROM pg_buffercache WHERE relfilenode = (         SELECT relfilenode         FROM pg_class         WHERE oid = 'tickets'::regclass ); <\/code><\/pre>\n<pre><code> count  -------    282 (1 row) <\/code><\/pre>\n<p>\u0412\u044b\u0442\u0435\u0441\u043d\u0438\u043c \u0438\u0437 \u043a\u0435\u0448\u0430 \u0432\u0441\u0435 \u0431\u0443\u0444\u0435\u0440\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b:<\/p>\n<pre><code class=\"pgsql\">SELECT * FROM pg_buffercache_evict_relation('tickets'::regclass); <\/code><\/pre>\n<pre><code> buffers_evicted | buffers_flushed | buffers_skipped  -----------------+-----------------+-----------------              282 |               0 |               0 (1 row) <\/code><\/pre>\n<pre><code class=\"pgsql\">SELECT count(*)                                                   FROM pg_buffercache WHERE relfilenode = (         SELECT relfilenode         FROM pg_class         WHERE oid = 'tickets'::regclass ); <\/code><\/pre>\n<pre><code> count  -------      0 (1 row) <\/code><\/pre>\n<p>\u0412\u0435\u0441\u044c\u043c\u0430 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u0443\u0440\u0441\u0430 <a href=\"https:\/\/postgrespro.ru\/education\/courses\/DBA2\" rel=\"noopener noreferrer nofollow\">DBA2<\/a> \u043d\u043e\u0432\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u0443\u0444\u0435\u0440\u043d\u044b\u043c \u043a\u0435\u0448\u0435\u043c.<\/p>\n<p><a class=\"anchor\" name=\"commit_14ffaece0\" id=\"commit_14ffaece0\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/3733\/\" rel=\"noopener noreferrer nofollow\"><strong>amcheck: \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 GIN<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=14ffaece0\" rel=\"noopener noreferrer nofollow\">14ffaece0<\/a><\/p>\n<p>\u0412 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/amcheck.html\" rel=\"noopener noreferrer nofollow\">amcheck<\/a> \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f gin_index_check \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 GIN.<\/p>\n<p><a class=\"anchor\" name=\"commit_302cf1575\" id=\"commit_302cf1575\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5557\/\" rel=\"noopener noreferrer nofollow\"><strong>CREATE FOREIGN TABLE LIKE<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=302cf1575\" rel=\"noopener noreferrer nofollow\">302cf1575<\/a><\/p>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0444\u0440\u0430\u0437\u044b LIKE. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u042d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043e\u0431\u0435\u0440\u0442\u043a\u0430\u043c\u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 IMPORT FOREIGN SCHEMA.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u0445 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 bookings \u0447\u0435\u0440\u0435\u0437 file_fdw, \u0442\u043e \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0439 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c:<\/p>\n<pre><code class=\"pgsql\">CREATE EXTENSION file_fdw; CREATE SERVER srv FOREIGN DATA WRAPPER file_fdw;  CREATE FOREIGN TABLE ft_bookings   (LIKE bookings INCLUDING all EXCLUDING comments) SERVER srv OPTIONS (program 'some_program');  \\d ft_bookings  <\/code><\/pre>\n<pre><code>                          Foreign table \"bookings.ft_bookings\"     Column    |           Type           | Collation | Nullable | Default | FDW options  --------------+--------------------------+-----------+----------+---------+-------------  book_ref     | character(6)             |           | not null |         |   book_date    | timestamp with time zone |           | not null |         |   total_amount | numeric(10,2)            |           | not null |         |  Server: srv FDW options: (program 'some_program') <\/code><\/pre>\n<p>\u0421\u0440\u0435\u0434\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0432\u043e \u0444\u0440\u0430\u0437\u0435 INCLUDING \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f: comments, constraints, defaults, generated, statistics \u0438\u043b\u0438 all. \u0421\u043f\u0438\u0441\u043e\u043a \u043c\u0435\u043d\u044c\u0448\u0435 \u0447\u0435\u043c \u0434\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446, \u0442.\u043a. \u0434\u043b\u044f \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u043d\u0435 \u0432\u0441\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u043c\u0435\u044e\u0442 \u0441\u043c\u044b\u0441\u043b.<\/p>\n<p><a class=\"anchor\" name=\"commit_534874fac\" id=\"commit_534874fac\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5533\/\" rel=\"noopener noreferrer nofollow\"><strong>COPY .. TO: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=534874fac\" rel=\"noopener noreferrer nofollow\">534874fac<\/a><\/p>\n<p>\u0414\u043b\u044f \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 COPY \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441. \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"pgsql\">COPY (SELECT * FROM mat_view) TO \u2026 <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c COPY TO \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c:<\/p>\n<pre><code class=\"pgsql\">COPY mat_view TO \u2026 <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_4603903d2\" id=\"commit_4603903d2\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5260\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0424\u0443\u043d\u043a\u0446\u0438\u044f json_strip_nulls \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u043f\u0443\u0441\u0442\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=4603903d2\" rel=\"noopener noreferrer nofollow\">4603903d2<\/a><\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f json[b]_strip_nulls \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0438\u0437 json \u0432\u0441\u0435 \u043f\u043e\u043b\u044f \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c NULL. \u041d\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c, \u0442\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c NULL \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u043e\u043b\u0435 f2 \u0443\u0434\u0430\u043b\u0435\u043d\u043e, \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 NULL \u0432 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043f\u043e\u043b\u044f f3 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c:<\/p>\n<pre><code class=\"pgsql\">SELECT json_strip_nulls('{\"f1\":1, \"f2\":null, \"f3\":[1,2,null]}'); <\/code><\/pre>\n<pre><code>     json_strip_nulls      --------------------------  {\"f1\":1,\"f3\":[1,2,null]} (1 row) <\/code><\/pre>\n<p>\u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 strip_in_arrays \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0434\u0430\u043b\u044f\u0442\u044c NULL \u0438 \u0438\u0437 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432:<\/p>\n<pre><code class=\"pgsql\">SELECT json_strip_nulls('{\"f1\":1, \"f2\":null, \"f3\":[1,2,null]}',          strip_in_arrays=&gt;true        ); <\/code><\/pre>\n<pre><code>  json_strip_nulls    ---------------------  {\"f1\":1,\"f3\":[1,2]} (1 row) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"commit_6c12ae09f\" id=\"commit_6c12ae09f\"><\/a><\/p>\n<p><strong>\u041d\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f array_sort<\/strong><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=6c12ae09f\" rel=\"noopener noreferrer nofollow\">6c12ae09f<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=53d3daa49\" rel=\"noopener noreferrer nofollow\">53d3daa49<\/a><\/p>\n<p>\u041a\u0430\u043a \u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f, \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u043b\u044e\u0431\u044b\u0445 \u0442\u0438\u043f\u043e\u0432. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0438 \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f NULL \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430.<\/p>\n<pre><code class=\"pgsql\">SELECT array_sort(ARRAY[42.2,null,21.1,5,10],          descending=&gt;true,          nulls_first=&gt;true        ); <\/code><\/pre>\n<pre><code>      array_sort        -----------------------  {NULL,42.2,21.1,10,5} (1 row) <\/code><\/pre>\n<p>\u0410 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b (\u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u043c\u043c\u0438\u0442) \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432.<\/p>\n<hr\/>\n<p> \u041d\u0430 \u044d\u0442\u043e\u043c \u043e 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0432\u0441\u0451. \u041d\u043e \u0443\u0436\u0435 \u043f\u043e\u0440\u0430 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044e \u043d\u043e\u0432\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 19-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/945380\/\"> https:\/\/habr.com\/ru\/articles\/945380\/<\/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-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"\"><\/figure>\n<p>25 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0445\u043e\u0434 PostgreSQL 18. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043e \u043c\u0430\u0440\u0442\u043e\u0432\u0441\u043a\u043e\u043c \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u0432\u0435\u0434\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043c\u0430\u0440\u0442\u043e\u0432\u0441\u043a\u0438\u0439  \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442 \u043f\u043e \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u044a\u0435\u043c\u043d\u044b\u0439 \u0438 \u0431\u043e\u0433\u0430\u0442\u044b\u0439 \u043d\u0430 \u043d\u043e\u0432\u0438\u043d\u043a\u0438.<\/p>\n<p>\u0421\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u043e\u0432 \u0432\u0435\u0440\u0441\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0434\u0435\u0441\u044c:<a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/856498\/\" rel=\"noopener noreferrer nofollow\"> 2024-07<\/a>, <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/769598\/\" rel=\"noopener noreferrer nofollow\">2024-09<\/a>, <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/882578\/\" rel=\"noopener noreferrer nofollow\">2024-11<\/a>, <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/886292\/\" rel=\"noopener noreferrer nofollow\">2025-01<\/a>. <\/p>\n<h4>\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0435 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h4>\n<p><a href=\"#commit_ce207d2a7\" rel=\"noopener noreferrer nofollow\">pg_dump[all]\/pg_restore: \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438<\/a><br \/> <a href=\"#commit_1fd1bd871\" rel=\"noopener noreferrer nofollow\">\u0421\u0431\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/a><br \/> <a href=\"#commit_626d7236b\" rel=\"noopener noreferrer nofollow\">pg_upgrade &#8212;swap: \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u043d\u043e\u0432\u044b\u0439<\/a><br \/> <a href=\"#commit_99aeb8470\" rel=\"noopener noreferrer nofollow\">pg_combinebackup &#8212;link \u0438\u043b\u0438 \u0436\u0435\u0441\u0442\u043a\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432<\/a><br \/> <a href=\"#commit_cd3c45125\" rel=\"noopener noreferrer nofollow\">pg_dump[all], pg_restore: &#8212;no-policies<\/a><br \/> <a href=\"#commit_e117cfb2f\" rel=\"noopener noreferrer nofollow\">pg_createsubscriber: \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 two_phase \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a<\/a><br \/> <a href=\"#commit_e5aeed4b8\" rel=\"noopener noreferrer nofollow\">pg_createsubscriber: \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439 \u043d\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0435<\/a><br \/> <a href=\"#commit_fb2ea12f4\" rel=\"noopener noreferrer nofollow\">pg_createsubscriber: \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/a><br \/> <a href=\"#commit_41625ab8e\" rel=\"noopener noreferrer nofollow\">psql: \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b<\/a><br \/> <a href=\"#commit_bba2fbc62\" rel=\"noopener noreferrer nofollow\">psql: \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438<\/a><br \/> <a href=\"#commit_1a759c832\" rel=\"noopener noreferrer nofollow\">psql: \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \\watch<\/a><br \/> <a href=\"#commit_d696406a9\" rel=\"noopener noreferrer nofollow\">psql: \\dx \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e<\/a><\/p>\n<h4>\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433<\/h4>\n<p><a href=\"#commit_65c298f61\" rel=\"noopener noreferrer nofollow\">NUMA: \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0441\u0438\u0441\u0442\u0435\u043c \u0441 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 \u043d\u0435\u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u0430\u043c\u044f\u0442\u0438<\/a><br \/> <a href=\"#commit_76def4cdd\" rel=\"noopener noreferrer nofollow\">pg_stat_get_backend_wal: \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 WAL \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/a><br \/> <a href=\"#commit_ddb17e387\" rel=\"noopener noreferrer nofollow\">EXPLAIN: \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u0442\u0440\u043e\u043a \u0441 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u043e \u0434\u0432\u0443\u0445 \u0437\u043d\u0430\u043a\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439<\/a><br \/> <a href=\"#commit_c65bc2e1d\" rel=\"noopener noreferrer nofollow\">EXPLAIN: \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u043d\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432<\/a><br \/> <a href=\"#commit_6d376c3b0\" rel=\"noopener noreferrer nofollow\">\u0416\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0437\u0430\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443<\/a><br \/> <a href=\"#commit_9219093ca\" rel=\"noopener noreferrer nofollow\">\u0416\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0430\u043d\u0441\u0430<\/a><br \/> <a href=\"#commit_3516ea768\" rel=\"noopener noreferrer nofollow\">log_line_prefix: IP-\u0430\u0434\u0440\u0435\u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/a><br \/> <a href=\"#commit_62d712ecf\" rel=\"noopener noreferrer nofollow\">pg_stat_statements: \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0432 IN<\/a><br \/> <a href=\"#commit_eaf502747\" rel=\"noopener noreferrer nofollow\">\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u0430 WAL<\/a><br \/> <a href=\"#commit_bb8dff999\" rel=\"noopener noreferrer nofollow\">\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u044f \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430<\/a><\/p>\n<h4>[\u0410\u0432\u0442\u043e]\u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437<\/h4>\n<p><a href=\"#commit_0164a0f9e\" rel=\"noopener noreferrer nofollow\">vacuum_truncate: \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u0438\u0435\u043c \u043f\u0443\u0441\u0442\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/a><br \/> <a href=\"#commit_306dc520b\" rel=\"noopener noreferrer nofollow\">\u0411\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u0430\u044f \u0430\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u00ab\u043c\u0435\u0440\u0442\u0432\u044b\u0445\u00bb \u0441\u0442\u0440\u043e\u043a \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445<\/a><br \/> <a href=\"#commit_99f8f3fbb\" rel=\"noopener noreferrer nofollow\">\u0411\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u0430\u044f \u0430\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u043e\u043a<\/a><br \/> <a href=\"#commit_052026c9b\" rel=\"noopener noreferrer nofollow\">\u041d\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u0430\u044f \u0437\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0430 \u0432 \u043f\u043e\u043c\u043e\u0449\u044c \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u043e\u0439 \u043e\u0447\u0438\u0441\u0442\u043a\u0435<\/a><\/p>\n<h4>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/h4>\n<p><a href=\"#commit_fdd146a8e\" rel=\"noopener noreferrer nofollow\">\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0432\u0432\u043e\u0434\/\u0432\u044b\u0432\u043e\u0434<\/a><br \/> <a href=\"#commit_10f664684\" rel=\"noopener noreferrer nofollow\">io_combine_limit: \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d \u0434\u043e 1\u041c\u0411<\/a><br \/> <a href=\"#commit_32acad7d1\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f<\/a><br \/> <a href=\"#commit_9a2e2a285\" rel=\"noopener noreferrer nofollow\">\u0418\u043d\u0434\u0435\u043a\u0441\u044b BTree: \u043f\u0440\u043e\u043f\u0443\u0441\u043a \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u043e \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0435\u043c\u0443 \u0441\u0442\u043e\u043b\u0431\u0446\u0443 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0435<\/a><br \/> <a href=\"#commit_e4309f73f\" rel=\"noopener noreferrer nofollow\">\u0418\u043d\u0434\u0435\u043a\u0441\u044b GiST: \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 <\/a><br \/> <a href=\"#commit_c0962a113\" rel=\"noopener noreferrer nofollow\">\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a: \u0437\u0430\u043c\u0435\u043d\u0430 IN (VALUES..) \u043d\u0430 \u043f\u043e\u0438\u0441\u043a \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435<\/a><br \/> <a href=\"#commit_fc069a3a6\" rel=\"noopener noreferrer nofollow\">\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a: \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0430\u043c\u043e\u0439 \u0441 \u0441\u043e\u0431\u043e\u0439<\/a><\/p>\n<h4>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438<\/h4>\n<p><a href=\"#commit_246dedc5d\" rel=\"noopener noreferrer nofollow\">PL\/pgSQL: \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c =&gt;<\/a><\/p>\n<h4>\u0420\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f<\/h4>\n<p><a href=\"#commit_73eba5004\" rel=\"noopener noreferrer nofollow\">multiple_unique_conflicts: \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/a><br \/> <a href=\"#commit_ac0e33136\" rel=\"noopener noreferrer nofollow\">idle_replication_slot_timeout: \u0430\u043d\u043d\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u043b\u043e\u0442\u043e\u0432 \u043f\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0443<\/a><br \/> <a href=\"#commit_04ff636cb\" rel=\"noopener noreferrer nofollow\">max_active_replication_origins: \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/a><\/p>\n<h4>\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c<\/h4>\n<p><a href=\"#commit_b3f0be788\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 OAuth 2.0<\/a><br \/> <a href=\"#commit_3642df265\" rel=\"noopener noreferrer nofollow\">dblink: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043a\u0432\u043e\u0437\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 SCRAM<\/a><br \/> <a href=\"#commit_749a9e20c\" rel=\"noopener noreferrer nofollow\">pgcrypto: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 sha256crypt \u0438 sha512crypt \u0434\u043b\u044f \u0445\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u0435\u0439<\/a><br \/> <a href=\"#commit_9ad1b3d01\" rel=\"noopener noreferrer nofollow\">pgcrypto: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 CFB \u0434\u043b\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f AES<\/a><br \/> <a href=\"#commit_0d6c47766\" rel=\"noopener noreferrer nofollow\">ALTER DEFAULT PRIVILEGES \u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b<\/a><br \/> <a href=\"#commit_2da74d8d6\" rel=\"noopener noreferrer nofollow\">libpq: \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 sslkeylogfile<\/a><\/p>\n<h4>\u0421\u0435\u0440\u0432\u0435\u0440<\/h4>\n<p><a href=\"#commit_fc0438b4e\" rel=\"noopener noreferrer nofollow\">\u0422\u0435\u043c\u043f\u043e\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0435, \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0438<\/a><br \/> <a href=\"#commit_83ea6c540\" rel=\"noopener noreferrer nofollow\">\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b<\/a><br \/> <a href=\"#commit_a379061a2\" rel=\"noopener noreferrer nofollow\">\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 NOT NULL: \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\/\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f<\/a><br \/> <a href=\"#commit_ca87c415e\" rel=\"noopener noreferrer nofollow\">\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438: NOT ENFORCED<\/a><br \/> <a href=\"#commit_f78ca6f3e\" rel=\"noopener noreferrer nofollow\">file_copy_method: \u0441\u043f\u043e\u0441\u043e\u0431 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/a><br \/> <a href=\"#commit_4f7f7b037\" rel=\"noopener noreferrer nofollow\">extension_control_path: \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439<\/a><br \/> <a href=\"#commit_329304c90\" rel=\"noopener noreferrer nofollow\">\u041d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438<\/a><br \/> <a href=\"#commit_a3b6dfd41\" rel=\"noopener noreferrer nofollow\">\u0424\u0443\u043d\u043a\u0446\u0438\u0438 gamma \u0438 lgamma<\/a><br \/> <a href=\"#commit_6da469bad\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0432 bytea \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e<\/a><br \/> <a href=\"#commit_9324c8c58\" rel=\"noopener noreferrer nofollow\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f pg_get_loaded_modules: \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0432 \u043e\u0431\u0449\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445<\/a><br \/> <a href=\"#commit_dcf7e1697\" rel=\"noopener noreferrer nofollow\">pg_buffercache: \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u043b\u0438 \u0432\u0441\u0435\u0433\u043e \u043a\u0435\u0448\u0430<\/a><br \/> <a href=\"#commit_14ffaece0\" rel=\"noopener noreferrer nofollow\">amcheck: \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 GIN<\/a><\/p>\n<h4>\u041a\u043e\u043c\u0430\u043d\u0434\u044b SQL \u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/h4>\n<p><a href=\"#commit_302cf1575\" rel=\"noopener noreferrer nofollow\">CREATE FOREIGN TABLE LIKE<\/a><br \/> <a href=\"#commit_534874fac\" rel=\"noopener noreferrer nofollow\">COPY .. TO: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439<\/a><br \/> <a href=\"#commit_4603903d2\" rel=\"noopener noreferrer nofollow\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f json_strip_nulls \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u043f\u0443\u0441\u0442\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445<\/a><br \/> <a href=\"#commit_6c12ae09f\" rel=\"noopener noreferrer nofollow\">\u041d\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f array_sort<\/a><\/p>\n<p><a class=\"anchor\" name=\"commit_ce207d2a7\" id=\"commit_ce207d2a7\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/4538\/\" rel=\"noopener noreferrer nofollow\"><strong>pg_dump[all]\/pg_restore: \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=ce207d2a7\" rel=\"noopener noreferrer nofollow\">ce207d2a7<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=dbe6bd434\" rel=\"noopener noreferrer nofollow\">dbe6bd434<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=779972e53\" rel=\"noopener noreferrer nofollow\">779972e53<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=b391d882f\" rel=\"noopener noreferrer nofollow\">b391d882f<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=bde2fb797\" rel=\"noopener noreferrer nofollow\">bde2fb797<\/a>,<a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=650ab8aaf\" rel=\"noopener noreferrer nofollow\">650ab8aaf<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=1fd1bd871\" rel=\"noopener noreferrer nofollow\">1fd1bd871<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=34eb2a80d\" rel=\"noopener noreferrer nofollow\">34eb2a80d<\/a><\/p>\n<p>\u0423\u0442\u0438\u043b\u0438\u0442\u044b pg_dump \u0438 pg_dumpall \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0442\u0430\u0431\u043b\u0438\u0446, \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432  \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432. \u0410 pg_restore, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0430\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0435\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c. \u041f\u043e\u0434 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u043e\u0439 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430, \u0445\u0440\u0430\u043d\u044f\u0449\u0430\u044f\u0441\u044f \u0432 pg_statistic. \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 CREATE STATISTICS \u0438 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u043e\u0432\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438.<\/p>\n<p>\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 pg_dump\/pg_dumpall \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u0442\u0440\u0435\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432:<\/p>\n<pre><code class=\"bash\">$ pg_dump --with-statistics | --no-statistics | --statistics-only <\/code><\/pre>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043d\u0435 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\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>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0442\u0430\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE tab (id int PRIMARY KEY); INSERT INTO tab VALUES (1),(2),(3); ANALYZE tab; <\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c pg_dump \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c &#8212;statistics-only \u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0432 \u0432\u044b\u0432\u043e\u0434\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a\u0438 \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0435:<\/p>\n<pre><code class=\"bash\">$ pg_dump -t tab --statistics-only |egrep -v '^($|--|SET|.*set_config)' <\/code><\/pre>\n<pre><code>SELECT * FROM pg_catalog.pg_restore_relation_stats(     'version', '190000'::integer,     'schemaname', 'public',     'relname', 'tab',     'relpages', '1'::integer,     'reltuples', '3'::real,     'relallvisible', '0'::integer,     'relallfrozen', '0'::integer ); SELECT * FROM pg_catalog.pg_restore_attribute_stats(     'version', '190000'::integer,     'schemaname', 'public',     'relname', 'tab',     'attname', 'id',     'inherited', 'f'::boolean,     'null_frac', '0'::real,     'avg_width', '4'::integer,     'n_distinct', '-1'::real,     'histogram_bounds', '{1,2,3}'::text,     'correlation', '1'::real ); SELECT * FROM pg_catalog.pg_restore_relation_stats(     'version', '190000'::integer,     'schemaname', 'public',     'relname', 'tab_pkey',     'relpages', '2'::integer,     'reltuples', '3'::real,     'relallvisible', '0'::integer,     'relallfrozen', '0'::integer ); <\/code><\/pre>\n<p>\u0414\u043b\u044f \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 (\u0442\u0430\u0431\u043b\u0438\u0446 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432) \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d \u0432\u044b\u0437\u043e\u0432 \u043d\u043e\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 pg_restore_relation_stats, \u0430 \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432  \u2014 pg_restore_attribute_stats.<\/p>\n<p>\u041f\u0440\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 pg_restore \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u0435 \u0436\u0435 \u0442\u0440\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430:<\/p>\n<pre><code class=\"bash\">$ pg_restore --with-statistics | --no-statistics | --statistics-only <\/code><\/pre>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 &#8212;with-statistics. \u0417\u0434\u0435\u0441\u044c \u0438\u0434\u0435\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u0451 \u0447\u0442\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0432 \u043a\u043e\u043f\u0438\u044e, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c.<\/p>\n<p><a class=\"anchor\" name=\"commit_1fd1bd871\" id=\"commit_1fd1bd871\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5523\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0421\u0431\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=1fd1bd871\" rel=\"noopener noreferrer nofollow\">1fd1bd871<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=9c03c8d18\" rel=\"noopener noreferrer nofollow\">9c03c8d18<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=edba754f0\" rel=\"noopener noreferrer nofollow\">edba754f0<\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=d5f1b6a75\" rel=\"noopener noreferrer nofollow\">d5f1b6a75<\/a><\/p>\n<p>\u0423\u0442\u0438\u043b\u0438\u0442\u0430 pg_upgrade \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 pg_dump\/pg_restore \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0441\u0445\u0435\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440. \u0412 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 pg_upgrade \u0431\u0443\u0434\u0435\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c pg_dump c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c &#8212;with-statistics, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440.<\/p>\n<p>\u042d\u0442\u043e \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043f\u043e \u0432\u0441\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043d\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u043a\u0440\u043e\u043c\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438, \u0432 \u0441\u0442\u0430\u0440\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043c\u043e\u0433\u043b\u0430 \u0431\u044b\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430, \u0432\u043e\u0442 \u0435\u0435 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>\u041f\u0443\u043d\u043a\u0442 15 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/pgupgrade.html\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 pg_upgrade<\/a> \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443:<\/p>\n<pre><code class=\"bash\">$ vacuumdb --all --analyze-in-stages --missing-stats-only <\/code><\/pre>\n<p>\u0413\u0434\u0435 &#8212;missing-stats-only \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0433\u0434\u0435 \u043d\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438.<\/p>\n<p>\u0410 \u0443\u0436\u0435 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c:<\/p>\n<pre><code class=\"bash\">$ vacuumdb --all --analyze-only <\/code><\/pre>\n<p>\u0421 \u0446\u0435\u043b\u044c\u044e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438, \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0430.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435  \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c, \u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 pg_upgrade \u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212;no-statistics.<\/p>\n<p><a class=\"anchor\" name=\"commit_626d7236b\" id=\"commit_626d7236b\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5369\/\" rel=\"noopener noreferrer nofollow\"><strong>pg_upgrade &#8212;swap: \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u043d\u043e\u0432\u044b\u0439<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=626d7236b\" rel=\"noopener noreferrer nofollow\">626d7236b<\/a><\/p>\n<p>\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 pg_upgrade \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u043d\u043e\u0432\u044b\u0439: &#8212;copy, &#8212;copy-file-range, &#8212;clone, &#8212;link.<\/p>\n<p>\u041a \u043d\u0438\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212;swap, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430. \u0421\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442 \u0446\u0435\u043b\u044b\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u043d\u043e\u0432\u044b\u0439, \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0436\u0435\u0441\u0442\u043a\u0438\u0445 \u0441\u0441\u044b\u043b\u043e\u043a. \u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043d\u0438\u0445 (\u0430 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u0444\u0430\u0439\u043b\u043e\u0432), \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u0432 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430.<\/p>\n<p>\u0412\u0430\u0436\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435. \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432, \u0441\u0442\u0430\u0440\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u043d\u0435\u043f\u0440\u0438\u0433\u043e\u0434\u0435\u043d \u043a \u0440\u0430\u0431\u043e\u0442\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u043f\u0430\u0441\u043d\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043e\u0442\u043c\u0435\u043d\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438\u0437 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438.<\/p>\n<p>\u042d\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0441\u0435\u0440\u0438\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 \u0432 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u0441 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043d\u0438\u0445. \u041e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/856498\/#commit_6e16b1e4\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a> \u0438 <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/877752\/#commit_40e2e5e92\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p><a class=\"anchor\" name=\"commit_99aeb8470\" id=\"commit_99aeb8470\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5508\/\" rel=\"noopener noreferrer nofollow\"><strong>pg_combinebackup &#8212;link \u0438\u043b\u0438 \u0436\u0435\u0441\u0442\u043a\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=99aeb8470\" rel=\"noopener noreferrer nofollow\">99aeb8470<\/a><\/p>\n<p>\u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212;link \u0443\u0442\u0438\u043b\u0438\u0442\u044b pg_combinebackup \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432. \u0424\u0430\u0439\u043b\u044b \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u043b\u043d\u043e\u0439 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u043a\u0430\u043a \u0436\u0435\u0441\u0442\u043a\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0444\u0430\u0439\u043b\u044b \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u0439.<\/p>\n<p>\u042d\u0442\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e. \u041b\u044e\u0431\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430) \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0444\u0430\u0439\u043b\u044b \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u044f\u0445. \u0418 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u044f\u0445 \u043f\u043e\u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u043b\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e.<\/p>\n<p><a class=\"anchor\" name=\"commit_cd3c45125\" id=\"commit_cd3c45125\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5499\/\" rel=\"noopener noreferrer nofollow\"><strong>pg_dump[all], pg_restore: &#8212;no-policies<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=cd3c45125\" rel=\"noopener noreferrer nofollow\">cd3c45125<\/a><\/p>\n<p>\u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212;no-policies \u0443\u0442\u0438\u043b\u0438\u0442 pg_dump \u0438 pg_dumpall \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0435 \u043a\u043e\u043f\u0438\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a \u0437\u0430\u0449\u0438\u0442\u044b \u0441\u0442\u0440\u043e\u043a. \u0423\u0442\u0438\u043b\u0438\u0442\u0430 pg_restore \u0441 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u044d\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.<\/p>\n<p><a class=\"anchor\" name=\"commit_e117cfb2f\" id=\"commit_e117cfb2f\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5433\/\" rel=\"noopener noreferrer nofollow\"><strong>pg_createsubscriber: \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 two_phase \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=e117cfb2f\" rel=\"noopener noreferrer nofollow\">e117cfb2f<\/a><\/p>\n<p>\u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212;enable-two-phase \u0443\u0442\u0438\u043b\u0438\u0442\u044b pg_createsubscriber \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 two_phase \u0443 \u0432\u0441\u0435\u0445 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a.<\/p>\n<p>\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043c\u043e\u0436\u043d\u043e \u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a pg_createsubscriber \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438, \u0447\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u043e.<\/p>\n<p><a class=\"anchor\" name=\"commit_e5aeed4b8\" id=\"commit_e5aeed4b8\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5541\/\" rel=\"noopener noreferrer nofollow\"><strong>pg_createsubscriber: \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439 \u043d\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0435<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=e5aeed4b8\" rel=\"noopener noreferrer nofollow\">e5aeed4b8<\/a><\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b pg_createsubscriber \u043d\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0435 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043d\u044b \u043d\u0430 \u043d\u0435\u0433\u043e, \u043f\u043e\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440-\u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a \u0435\u0449\u0435 \u0431\u044b\u043b \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u043f\u043b\u0438\u043a\u043e\u0439. \u0415\u0441\u043b\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b, \u0442\u043e \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212;clean=publications \u0443\u0442\u0438\u043b\u0438\u0442\u044b pg_createsubscriber \u0443\u0434\u0430\u043b\u0438\u0442 \u0438\u0445.<\/p>\n<p>\u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c, \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-474551","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/474551","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=474551"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/474551\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=474551"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=474551"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=474551"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}