{"id":497492,"date":"2026-10-06T07:24:46","date_gmt":"2026-10-06T07:24:46","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=497492"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2026-10-06T07:24:46","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=497492","title":{"rendered":"PostgreSQL 19: \u041a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442 2026-03 \u0427\u0430\u0441\u0442\u044c 5.4 (SQL, DEV1, DEV2)"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/00\/5e\/0f\/005e0f8a26282c2b46bf6db3ff8246db.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/00\/5e\/0f\/005e0f8a26282c2b46bf6db3ff8246db.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/00\/5e\/0f\/005e0f8a26282c2b46bf6db3ff8246db.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0417\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u043c \u043e\u0431\u0437\u043e\u0440 \u043c\u0430\u0440\u0442\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0430 19-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u0412 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u043e\u0439 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0441\u0435\u0440\u0438\u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a \u044f\u0437\u044b\u043a\u0443 SQL \u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u043c \u043a\u0443\u0440\u0441\u043e\u0432 <a href=\"https:\/\/postgrespro.ru\/education\/courses\/DEV1\">DEV1<\/a> \u0438 <a href=\"https:\/\/postgrespro.ru\/education\/courses\/DEV2\">DEV2<\/a>.<\/p>\n<p>\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e \u043f\u043b\u0430\u043d \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0435 19-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/1089000\/\">\u0427\u0430\u0441\u0442\u044c 5.1 (QPT)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/1089600\/\">\u0427\u0430\u0441\u0442\u044c 5.2 (DBA1, DBA2)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/1090470\/\">\u0427\u0430\u0441\u0442\u044c 5.3 (DBA3, DBS)<\/a><\/p>\n<\/li>\n<li>\n<p><em>\u0427\u0430\u0441\u0442\u044c 5.4 (SQL, DEV1, DEV2) \u2013 \u043c\u044b \u0437\u0434\u0435\u0441\u044c<\/em> \ud83d\ude42<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0430\u0445 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0437\u0434\u0435\u0441\u044c: <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/984580\/\">2025-07<\/a>, <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/986694\/\">2025-09<\/a>, <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/992426\/\">2025-11<\/a>, <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/996010\/\">2026-01<\/a>.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043e\u0431\u0437\u043e\u0440\u0435:<\/p>\n<ul>\n<li>\n<p><a href=\"#commit_88327092ff0\">INSERT \u2026 ON CONFLICT DO SELECT<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#commit_2a525cc97e1\">COPY FROM: \u0437\u0430\u043c\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043d\u0430 NULL<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#commit_7dadd38cda9\">COPY TO: \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 json<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#commit_bd4f879a9cd\">jsonpath: \u043d\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#commit_3b4c2b9db25\">\u041f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 IS JSON \u0441 \u0434\u043e\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#commit_de28140ded8\">postgres_fdw: \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0440\u0435\u0436\u0438\u043c\u044b READ ONLY \u0438 DEFERRABLE<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#commit_342051d73b3\">\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438: \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\/\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 ENFORCED \u0434\u043b\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 CHECK<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#commit_f80bedd52b1\">\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438: \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c CHECK<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#commit_497c1170cb1\">\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 uuid \u0438 bytea \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 base32hex<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#commit_ce8d5fe0e28\">PL\/pgSQL: \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f SELECT \u2026 INTO<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#commit_df6949ccf7a\">\u0424\u0443\u043d\u043a\u0446\u0438\u0438 tid_block \u0438 tid_offset<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#commit_7c1849311e4\">TOAST: \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c lz4 \u0434\u043b\u044f \u0441\u0436\u0430\u0442\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"commit_88327092ff0\" id=\"commit_88327092ff0\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/6109\/\"><strong>INSERT \u2026 ON CONFLICT DO SELECT<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=88327092ff0\"><code>88327092ff0<\/code><\/a><\/p>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 <code>INSERT \u2026 ON CONFLICT DO NOTHING RETURNING<\/code> \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442, \u043d\u043e \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0435\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE test (id int PRIMARY KEY,value numeric(4,2) DEFAULT random());<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<pre><code class=\"pgsql\">INSERT INTO test VALUES (1)ON CONFLICT (id) DO NOTHINGRETURNING id, value;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code> id | value ----+-------  1 |  0.74(1 row)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u043e \u0435\u0441\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c, \u0442\u043e \u0444\u0440\u0430\u0437\u0430 RETURNING \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u0435\u0440\u043d\u0435\u0442:<\/p>\n<pre><code class=\"pgsql\">INSERT INTO test VALUES (1)ON CONFLICT (id) DO NOTHINGRETURNING id, value;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code> id | value ----+-------(0 rows)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u0430 INSERT \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c, \u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430 \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 SELECT. \u042d\u0442\u043e \u043b\u0438\u0448\u043d\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441, \u0430 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 \u0441\u0442\u0440\u043e\u043a\u0443 \u043c\u043e\u0436\u0435\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f.<\/p>\n<p>\u041d\u043e\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 ON CONFLICT DO SELECT \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 RETURNING \u043b\u0438\u0431\u043e \u043d\u043e\u0432\u0443\u044e, \u043b\u0438\u0431\u043e \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443:<\/p>\n<pre><code class=\"pgsql\">INSERT INTO test VALUES (1)ON CONFLICT (id) DO SELECTRETURNING id, value;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code> id | value ----+-------  1 |  0.74(1 row)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0421\u0442\u043e\u043b\u0431\u0446\u044b \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u043e \u0444\u0440\u0430\u0437\u0435 RETURNING, \u0430 \u043f\u043e\u0441\u043b\u0435 SELECT \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 (FOR UPDATE, FOR SHARE \u0438 \u0434\u0440.) \u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 WHERE.<\/p>\n<p><a class=\"anchor\" name=\"commit_2a525cc97e1\" id=\"commit_2a525cc97e1\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/4810\/\"><strong>COPY FROM: \u0437\u0430\u043c\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043d\u0430 NULL<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=2a525cc97e1\"><code>2a525cc97e1<\/code><\/a><\/p>\n<p>\u0412 17-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 COPY <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/804027\/#commit_9e2d8701\">\u043d\u0430\u0443\u0447\u0438\u043b\u0430\u0441\u044c<\/a> \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 ON_ERROR ignore, \u0438 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 NULL \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443. \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f NOT NULL (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0443 \u0434\u043e\u043c\u0435\u043d\u043e\u0432) \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f: \u0435\u0441\u043b\u0438 \u0432 \u0442\u0430\u043a\u043e\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043f\u043e\u043f\u0430\u0434\u0435\u0442 NULL, \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439.<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE test (col int);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code class=\"pgsql\">COPY test FROM STDIN WITH (on_error set_null);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code>Enter data to be copied followed by a newline.End with a backslash and a period on a line by itself, or an EOF signal.&gt;&gt; 1&gt;&gt; \u0434\u0432\u0430&gt;&gt; 3&gt;&gt; \\.NOTICE:  in 1 row, columns were set to null due to data type incompatibilityCOPY 3<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code class=\"pgsql\">SELECT * FROM test;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code> col -----   1       3(3 rows)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><a class=\"anchor\" name=\"commit_7dadd38cda9\" id=\"commit_7dadd38cda9\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/4716\/\"><strong>COPY TO: \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 json<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=7dadd38cda9\"><code>7dadd38cda9<\/code><\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=4c0390ac53b\"><code>4c0390ac53b<\/code><\/a><\/p>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/sql-copy.html\">COPY<\/a> \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 text, csv \u0438 binary, \u043d\u043e \u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 json:<\/p>\n<pre><code class=\"pgsql\">COPY (SELECT * FROM bookings LIMIT 3) TO STDOUT WITH (format json);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code>{\"book_ref\":\"2EW1SQ\",\"book_date\":\"2025-09-01T03:00:12.557744+03:00\",\"total_amount\":8125.00}{\"book_ref\":\"3ZY3O5\",\"book_date\":\"2025-09-03T03:25:35.278453+03:00\",\"total_amount\":7500.00}{\"book_ref\":\"756UAS\",\"book_date\":\"2025-09-10T19:24:02.978559+03:00\",\"total_amount\":6325.00}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0410 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 FORCE_ARRAY \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0432\u043e\u0434 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432:<\/p>\n<pre><code class=\"pgsql\">COPY (SELECT * FROM bookings LIMIT 3) TO STDOUT WITH (format json, force_array);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code>[ {\"book_ref\":\"2EW1SQ\",\"book_date\":\"2025-09-01T03:00:12.557744+03:00\",\"total_amount\":8125.00},{\"book_ref\":\"3ZY3O5\",\"book_date\":\"2025-09-03T03:25:35.278453+03:00\",\"total_amount\":7500.00},{\"book_ref\":\"756UAS\",\"book_date\":\"2025-09-10T19:24:02.978559+03:00\",\"total_amount\":6325.00}]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0420\u0435\u0447\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0435 (COPY TO), \u0430 \u043d\u0435 \u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 (COPY FROM). \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c json \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e HEADER, DEFAULT, NULL, DELIMITER, FORCE QUOTE, FORCE NOT NULL \u0438 FORCE NULL.<\/p>\n<p><a class=\"anchor\" name=\"commit_bd4f879a9cd\" id=\"commit_bd4f879a9cd\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5270\/\"><strong>jsonpath: \u043d\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=bd4f879a9cd\"><code>bd4f879a9cd<\/code><\/a><\/p>\n<p>\u0412 \u044f\u0437\u044b\u043a jsonpath \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043d\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438: lower(), upper(), initcap(), replace(), split_part(), \u0430 \u0442\u0430\u043a\u0436\u0435 btrim(), ltrim() \u0438 rtrim():<\/p>\n<pre><code class=\"pgsql\">SELECT jsonb_path_query('\"  hello, world!  \"', '$.btrim()'),       jsonb_path_query('\"hello, world!\"', '$.upper()'),       jsonb_path_query('\"HELLO, WORLD!\"', '$.lower()'),       jsonb_path_query('\"hello, world!\"', '$.initcap()'),       jsonb_path_query('\"hello, world?\"', '$.replace(\"?\",\"!\")'),       jsonb_path_query('\"hello, world!\"', '$.split_part(\", \",1)')\\gx<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code>-[ RECORD 1 ]----+----------------jsonb_path_query | \"hello, world!\"jsonb_path_query | \"HELLO, WORLD!\"jsonb_path_query | \"hello, world!\"jsonb_path_query | \"Hello, World!\"jsonb_path_query | \"hello, world!\"jsonb_path_query | \"hello\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><a class=\"anchor\" name=\"commit_3b4c2b9db25\" id=\"commit_3b4c2b9db25\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/6237\/\"><strong>\u041f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 IS JSON \u0441 \u0434\u043e\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=3b4c2b9db25\"><code>3b4c2b9db25<\/code><\/a><\/p>\n<p>\u041f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 IS JSON \u0440\u0430\u043d\u044c\u0448\u0435 \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b \u0434\u043e\u043c\u0435\u043d\u044b, \u0431\u0430\u0437\u043e\u0432\u044b\u043c \u0442\u0438\u043f\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f json, jsonb, bytea \u0438\u043b\u0438 text \u2014 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u0434\u043e\u043c\u0435\u043d\u0430.<\/p>\n<pre><code class=\"pgsql\">CREATE DOMAIN js AS jsonb;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code class=\"pgsql\">18=# SELECT '\"Hello, World!\"'::js IS JSON;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code>ERROR:  cannot use type js in IS JSON predicate<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430:<\/p>\n<pre><code class=\"pgsql\">19=# SELECT '\"Hello, World!\"'::js IS JSON;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code> ?column? ---------- t(1 row)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><a class=\"anchor\" name=\"commit_de28140ded8\" id=\"commit_de28140ded8\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5624\/\"><strong>postgres_fdw: \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0440\u0435\u0436\u0438\u043c\u044b READ ONLY \u0438 DEFERRABLE<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=de28140ded8\"><code>de28140ded8<\/code><\/a><\/p>\n<p>\u0423\u0434\u0430\u043b\u0435\u043d\u043d\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c\u0430\u044f <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/postgres-fdw.html\">postgres_fdw<\/a> \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0440\u0430\u043d\u044c\u0448\u0435 \u043d\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u0430 \u0440\u0435\u0436\u0438\u043c\u044b READ ONLY \u0438 DEFERRABLE \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043a\u0430\u043a READ ONLY, \u043c\u043e\u0433\u043b\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0410 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043a\u0430\u043a DEFERRABLE, \u043c\u043e\u0433\u043b\u0430 \u043f\u0440\u0435\u0440\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u0437-\u0437\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438. \u042d\u0442\u043e \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438: \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0445 READ ONLY \u0438\u0437\u043c\u0435\u043d\u044f\u043b\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 postgres_fdw, \u0442\u0430\u043a\u0438\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u043a\u0430\u043a READ WRITE.<\/p>\n<p><a class=\"anchor\" name=\"commit_342051d73b3\" id=\"commit_342051d73b3\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5796\/\"><strong>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438: \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\/\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 ENFORCED \u0434\u043b\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 CHECK<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=342051d73b3\"><code>342051d73b3<\/code><\/a><\/p>\n<p>\u0412 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/945380\/\">\u0441\u0442\u0430\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c<\/a> \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 CHECK \u043a\u0430\u043a NOT ENFORCED:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE test (id int);ALTER TABLE test ADD CONSTRAINT check_id CHECK (id &gt; 0) NOT ENFORCED;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 ENFORCED \u0431\u044b\u043b\u043e \u043d\u0435\u043b\u044c\u0437\u044f.<\/p>\n<pre><code class=\"pgsql\">18=# ALTER TABLE test ALTER CONSTRAINT check_id ENFORCED;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code>ERROR:  cannot alter enforceability of constraint \"check_id\" of relation \"test\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0435\u0433\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430\u043d\u043e\u0432\u043e. \u0412 19-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u044d\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c. \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u0432 ENFORCED \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<pre><code class=\"pgsql\">19=# ALTER TABLE test ALTER CONSTRAINT check_id ENFORCED;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code>ALTER TABLE<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><a class=\"anchor\" name=\"commit_f80bedd52b1\" id=\"commit_f80bedd52b1\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/5645\/\"><strong>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438: \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c CHECK<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=f80bedd52b1\"><code>f80bedd52b1<\/code><\/a><\/p>\n<p>\u0412 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/945380\/#commit_83ea6c540\">\u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430<\/a> \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. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE test (  id int,  amount numeric,  tax numeric GENERATED ALWAYS AS (amount*0.2) VIRTUAL,  CONSTRAINT check_tax CHECK (tax &gt; 0));<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0431\u044b\u043b\u043e \u043d\u0435\u043b\u044c\u0437\u044f, \u0435\u0441\u043b\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 CHECK:<\/p>\n<pre><code class=\"pgsql\">18=# ALTER TABLE test ALTER COLUMN tax SET EXPRESSION AS (amount*0.22);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code>ERROR:  ALTER TABLE \/ SET EXPRESSION is not supported for virtual generated columns in tables with check constraintsDETAIL:  Column \"tax\" of relation \"test\" is a virtual generated column.<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412 19-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u043d\u044f\u0442\u043e. \u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 CHECK:<\/p>\n<pre><code class=\"pgsql\">19=# ALTER TABLE test ALTER COLUMN tax SET EXPRESSION AS (amount*0.22);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code>ALTER TABLE<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><a class=\"anchor\" name=\"commit_497c1170cb1\" id=\"commit_497c1170cb1\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/6468\/\"><strong>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 uuid \u0438 bytea \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 base32hex<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=497c1170cb1\"><code>497c1170cb1<\/code><\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=ba21f5bf8af\"><code>ba21f5bf8af<\/code><\/a><\/p>\n<p>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 uuid \u0438 bytea \u0440\u0430\u043d\u044c\u0448\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e \u043e\u0431\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 encode\/decode \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0438 \u0444\u043e\u0440\u043c\u0430\u0442 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/functions-binarystring.html#ENCODE-FORMAT-BASE32HEX\">base32hex<\/a>. \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u044f\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432. \u0424\u043e\u0440\u043c\u0430\u0442 base32hex \u0443\u0434\u043e\u0431\u0435\u043d \u0434\u043b\u044f UUIDv7: \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u043e\u0447\u0435 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u0439 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 (\u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 C). \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f UUID \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0432 base32hex \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0441\u043f\u0440\u0430\u0432\u0430 \u0437\u043d\u0430\u043a\u0430\u043c\u0438 \u00ab<code>=<\/code>\u00bb. \u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u0442\u0438 \u0437\u043d\u0430\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0435\u0437\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 rtrim, \u0432\u0435\u0434\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f decode \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0430 base32hex \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0431\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430:<\/p>\n<pre><code class=\"pgsql\">WITH cte(val) AS (  VALUES (uuidv7()))SELECT  val \"text\",  val::bytea \"bytea\",  encode(val::bytea, 'base32hex') \"base32hex\",  rtrim(encode(val::bytea, 'base32hex'),'=') \"base32hex trimmed\",  decode(rtrim(encode(val::bytea, 'base32hex'),'='), 'base32hex') \"bytea decoded\"FROM cte\\gx<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code>-[ RECORD 1 ]-----+-------------------------------------text              | 01a013f7-edf0-760d-a654-f2ec6b3a9709bytea             | \\x01a013f7edf0760da654f2ec6b3a9709base32hex         | 06G17TVDU1R0R9IKUBM6MEKN14======base32hex trimmed | 06G17TVDU1R0R9IKUBM6MEKN14bytea decoded     | \\x01a013f7edf0760da654f2ec6b3a9709<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><a class=\"anchor\" name=\"commit_ce8d5fe0e28\" id=\"commit_ce8d5fe0e28\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/6447\/\"><strong>PL\/pgSQL: \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f SELECT \u2026 INTO<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=ce8d5fe0e28\"><code>ce8d5fe0e28<\/code><\/a><\/p>\n<p>\u0412 PL\/pgSQL \u043e\u0431\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435: \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439:<\/p>\n<pre><code class=\"pgsql\">DECLARE  x int;BEGIN  x := 2+2;  SELECT 2+2 INTO x;END;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u044d\u0442\u043e \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443. \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432 PL\/pgSQL, \u0430 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0447\u0435\u0440\u0435\u0437 SPI, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0431\u0435\u0437 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 SPI, \u0435\u0441\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439. \u041f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442: \u0442\u0430\u043a\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 pg_stat_statements.<\/p>\n<p><a class=\"anchor\" name=\"commit_df6949ccf7a\" id=\"commit_df6949ccf7a\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/6559\/\"><strong>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 tid_block \u0438 tid_offset<\/strong><\/a><br \/> commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=df6949ccf7a\"><code>df6949ccf7a<\/code><\/a><\/p>\n<p>\u0418\u0437\u0432\u043b\u0435\u0447\u044c \u043d\u043e\u043c\u0435\u0440 \u0431\u043b\u043e\u043a\u0430 \u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u043b\u043e\u043a\u0430 \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f ctid \u0440\u0430\u043d\u044c\u0448\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a \u0441\u0442\u0440\u043e\u043a\u0435, \u0430 \u0437\u0430\u0442\u0435\u043c \u043a \u0442\u0438\u043f\u0443 point:<\/p>\n<pre><code class=\"pgsql\">SELECT ctid,       (ctid::text::point)[0]::bigint AS block,       (ctid::text::point)[1]::int    AS offsetFROM bookings LIMIT 1;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code> ctid  | block | offset -------+-------+-------- (0,1) |     0 |      1(1 row)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0427\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0443\u0434\u043e\u0431\u043d\u043e. \u041d\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u044d\u0442\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e:<\/p>\n<pre><code class=\"pgsql\">SELECT ctid,       tid_block(ctid),       tid_offset(ctid)FROM bookings LIMIT 1;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code> ctid  | tid_block | tid_offset -------+-----------+------------ (0,1) |         0 |          1(1 row)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><a class=\"anchor\" name=\"commit_7c1849311e4\" id=\"commit_7c1849311e4\"><\/a><\/p>\n<p><a href=\"https:\/\/commitfest.postgresql.org\/patch\/6312\/\"><strong>TOAST: \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c lz4 \u0434\u043b\u044f \u0441\u0436\u0430\u0442\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=commit;h=7c1849311e4\"><code>7c1849311e4<\/code><\/a>, <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=34dfca29343\"><code>34dfca29343<\/code><\/a><\/p>\n<p>\u0418\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043b\u044f \u0441\u0436\u0430\u0442\u0438\u044f TOAST \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 \u0441\u0435\u0440\u0432\u0435\u0440 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c pglz. \u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0449\u0435 \u0432 14-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e (\u043a\u0430\u043a \u043f\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0441\u0436\u0430\u0442\u0438\u044f, \u0442\u0430\u043a \u0438 \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438) \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 lz4.<\/p>\n<p>\u0412 19-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0435\u0441\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u043e\u0431\u0440\u0430\u043d \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 lz4, \u0442\u043e \u0434\u043b\u044f \u0441\u0436\u0430\u0442\u0438\u044f TOAST-\u0442\u0430\u0431\u043b\u0438\u0446 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c:<\/p>\n<pre><code class=\"pgsql\">SELECT setting ~ '--with-lz4' FROM pg_config() WHERE name = 'CONFIGURE';<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code> ?column? ---------- t(1 row)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code class=\"pgsql\">\\dconfig default_toast_compression<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code> List of configuration parameters         Parameter         | Value ---------------------------+------- default_toast_compression | lz4(1 row)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<hr\/>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u043e\u0431\u0437\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 19-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d. \u041e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u0443\u0441\u043a\u0430 PostgreSQL 19, <a href=\"https:\/\/wiki.postgresql.org\/wiki\/PostgreSQL_19_Open_Items\">\u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e<\/a> \u043d\u0430 29 \u043e\u043a\u0442\u044f\u0431\u0440\u044f, \u0438 \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 <a href=\"https:\/\/www.postgresql.org\/docs\/19\/release.html\">\u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f\u0445 \u043a \u0432\u044b\u043f\u0443\u0441\u043a\u0443<\/a>.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1090828\/\">https:\/\/habr.com\/ru\/articles\/1090828\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0417\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u043c \u043e\u0431\u0437\u043e\u0440 \u043c\u0430\u0440\u0442\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0430 19-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u0412 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u043e\u0439 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0441\u0435\u0440\u0438\u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a \u044f\u0437\u044b\u043a\u0443 SQL \u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u043c \u043a\u0443\u0440\u0441\u043e\u0432 DEV1 \u0438 DEV2.\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e \u043f\u043b\u0430\u043d \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0435 19-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438:\u0427\u0430\u0441\u0442\u044c 5.1 (QPT)\u0427\u0430\u0441\u0442\u044c 5.2 (DBA1, DBA2)\u0427\u0430\u0441\u0442\u044c 5.3 (DBA3, DBS)\u0427\u0430\u0441\u0442\u044c 5.4 (SQL, DEV1, DEV2) \u2013 \u043c\u044b \u0437\u0434\u0435\u0441\u044c \ud83d\ude42\u041e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043a\u043e\u043c\u043c\u0438\u0442\u0444\u0435\u0441\u0442\u0430\u0445 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0437\u0434\u0435\u0441\u044c: 2025-07, 2025-09, 2025-11, 2026-01.\u0412 \u044d\u0442\u043e\u043c \u043e\u0431\u0437\u043e\u0440\u0435:INSERT \u2026 ON CONFLICT DO SELECTCOPY FROM: \u0437\u0430\u043c\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043d\u0430 NULLCOPY TO: \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 jsonjsonpath: \u043d\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438\u041f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 IS JSON \u0441 \u0434\u043e\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438postgres_fdw: \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0440\u0435\u0436\u0438\u043c\u044b READ ONLY \u0438 DEFERRABLE\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438: \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\/\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 ENFORCED \u0434\u043b\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 CHECK\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438: \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c CHECK\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 uuid \u0438 bytea \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 base32hexPL\/pgSQL: \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f SELECT \u2026 INTO\u0424\u0443\u043d\u043a\u0446\u0438\u0438 tid_block \u0438 tid_offsetTOAST: \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c lz4 \u0434\u043b\u044f \u0441\u0436\u0430\u0442\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044eINSERT \u2026 ON CONFLICT DO SELECT commit: 88327092ff0\u041a\u043e\u043c\u0430\u043d\u0434\u0430 INSERT \u2026 ON CONFLICT DO NOTHING RETURNING \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442, \u043d\u043e \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0435\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442:CREATE TABLE test (id int PRIMARY KEY,value numeric(4,2) DEFAULT random());INSERT INTO test VALUES (1)ON CONFLICT (id) DO NOTHINGRETURNING id, value; id | value &#8212;-+&#8212;&#8212;-  1 |  0.74(1 row)\u041d\u043e \u0435\u0441\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c, \u0442\u043e \u0444\u0440\u0430\u0437\u0430 RETURNING \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u0435\u0440\u043d\u0435\u0442:INSERT INTO test VALUES (1)ON CONFLICT (id) DO NOTHINGRETURNING id, value; id | value &#8212;-+&#8212;&#8212;-(0 rows)\u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u0430 INSERT \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c, \u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430 \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 SELECT. \u042d\u0442\u043e \u043b\u0438\u0448\u043d\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441, \u0430 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 \u0441\u0442\u0440\u043e\u043a\u0443 \u043c\u043e\u0436\u0435\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f.\u041d\u043e\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 ON CONFLICT DO SELECT \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 RETURNING \u043b\u0438\u0431\u043e \u043d\u043e\u0432\u0443\u044e, \u043b\u0438\u0431\u043e \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443:INSERT INTO test VALUES (1)ON CONFLICT (id) DO SELECTRETURNING id, value; id | value &#8212;-+&#8212;&#8212;-  1 |  0.74(1 row)\u0421\u0442\u043e\u043b\u0431\u0446\u044b \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u043e \u0444\u0440\u0430\u0437\u0435 RETURNING, \u0430 \u043f\u043e\u0441\u043b\u0435 SELECT \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 (FOR UPDATE, FOR SHARE \u0438 \u0434\u0440.) \u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 WHERE.COPY FROM: \u0437\u0430\u043c\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043d\u0430 NULL commit: 2a525cc97e1\u0412 17-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 COPY \u043d\u0430\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 ON_ERROR ignore, \u0438 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 NULL \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443. \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f NOT NULL (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0443 \u0434\u043e\u043c\u0435\u043d\u043e\u0432) \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f: \u0435\u0441\u043b\u0438 \u0432 \u0442\u0430\u043a\u043e\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043f\u043e\u043f\u0430\u0434\u0435\u0442 NULL, \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439.CREATE TABLE test (col int);COPY test FROM STDIN WITH (on_error set_null);Enter data to be copied followed by a newline.End with a backslash and a period on a line by itself, or an EOF signal.&gt;&gt; 1&gt;&gt; \u0434\u0432\u0430&gt;&gt; 3&gt;&gt; \\.NOTICE:  in 1 row, columns were set to null due to data type incompatibilityCOPY 3SELECT * FROM test; col &#8212;&#8212;   1       3(3 rows)COPY TO: \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 json commit: 7dadd38cda9, 4c0390ac53b\u041a\u043e\u043c\u0430\u043d\u0434\u0430 COPY \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 text, csv \u0438 binary, \u043d\u043e \u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 json:COPY (SELECT * FROM bookings LIMIT 3) TO STDOUT WITH (format json);{&#171;book_ref&#187;:&#187;2EW1SQ&#187;,&#187;book_date&#187;:&#187;2025-09-01T03:00:12.557744+03:00&#8243;,&#187;total_amount&#187;:8125.00}{&#171;book_ref&#187;:&#187;3ZY3O5&#8243;,&#187;book_date&#187;:&#187;2025-09-03T03:25:35.278453+03:00&#8243;,&#187;total_amount&#187;:7500.00}{&#171;book_ref&#187;:&#187;756UAS&#187;,&#187;book_date&#187;:&#187;2025-09-10T19:24:02.978559+03:00&#8243;,&#187;total_amount&#187;:6325.00}\u0410 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 FORCE_ARRAY \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0432\u043e\u0434 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432:COPY (SELECT * FROM bookings LIMIT 3) TO STDOUT WITH (format json, force_array);[ {&#171;book_ref&#187;:&#187;2EW1SQ&#187;,&#187;book_date&#187;:&#187;2025-09-01T03:00:12.557744+03:00&#8243;,&#187;total_amount&#187;:8125.00},{&#171;book_ref&#187;:&#187;3ZY3O5&#8243;,&#187;book_date&#187;:&#187;2025-09-03T03:25:35.278453+03:00&#8243;,&#187;total_amount&#187;:7500.00},{&#171;book_ref&#187;:&#187;756UAS&#187;,&#187;book_date&#187;:&#187;2025-09-10T19:24:02.978559+03:00&#8243;,&#187;total_amount&#187;:6325.00}]\u0420\u0435\u0447\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0435 (COPY TO), \u0430 \u043d\u0435 \u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 (COPY FROM). \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c json \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e HEADER, DEFAULT, NULL, DELIMITER, FORCE QUOTE, FORCE NOT NULL \u0438 FORCE NULL.jsonpath: \u043d\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 commit: bd4f879a9cd\u0412 \u044f\u0437\u044b\u043a jsonpath \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043d\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438: lower(), upper(), initcap(), replace(), split_part(), \u0430 \u0442\u0430\u043a\u0436\u0435 btrim(), ltrim() \u0438 rtrim():SELECT jsonb_path_query(&#8216;&#187;  hello, world!  &#171;&#8216;, &#8216;$.btrim()&#8217;),       jsonb_path_query(&#8216;&#187;hello, world!&#187;&#8216;, &#8216;$.upper()&#8217;),       jsonb_path_query(&#8216;&#187;HELLO, WORLD!&#187;&#8216;, &#8216;$.lower()&#8217;),       jsonb_path_query(&#8216;&#187;hello, world!&#187;&#8216;, &#8216;$.initcap()&#8217;),       jsonb_path_query(&#8216;&#187;hello, world?&#187;&#8216;, &#8216;$.replace(&#171;?&#187;,&#187;!&#187;)&#8217;),       jsonb_path_query(&#8216;&#187;hello, world!&#187;&#8216;, &#8216;$.split_part(&#171;, &#171;,1)&#8217;)\\gx-[ RECORD 1 ]&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;-jsonb_path_query | &#171;hello, world!&#187;jsonb_path_query | &#171;HELLO, WORLD!&#187;jsonb_path_query | &#171;hello, world!&#187;jsonb_path_query | &#171;Hello, World!&#187;jsonb_path_query | &#171;hello, world!&#187;jsonb_path_query | &#171;hello&#187;\u041f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 IS JSON \u0441 \u0434\u043e\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 commit: 3b4c2b9db25\u041f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 IS JSON \u0440\u0430\u043d\u044c\u0448\u0435 \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b \u0434\u043e\u043c\u0435\u043d\u044b, \u0431\u0430\u0437\u043e\u0432\u044b\u043c \u0442\u0438\u043f\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f json, jsonb, bytea \u0438\u043b\u0438 text \u2014 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u0434\u043e\u043c\u0435\u043d\u0430.CREATE DOMAIN js AS jsonb;18=# SELECT &#8216;&#187;Hello, World!&#187;&#8216;::js IS JSON;ERROR:  cannot use type js in IS JSON predicate\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430:19=# SELECT &#8216;&#187;Hello, World!&#187;&#8216;::js IS JSON; ?column? &#8212;&#8212;&#8212;- t(1 row)postgres_fdw: \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0440\u0435\u0436\u0438\u043c\u044b READ ONLY \u0438 DEFERRABLE commit: de28140ded8\u0423\u0434\u0430\u043b\u0435\u043d\u043d\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c\u0430\u044f postgres_fdw \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0440\u0430\u043d\u044c\u0448\u0435 \u043d\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u0430 \u0440\u0435\u0436\u0438\u043c\u044b READ ONLY \u0438 DEFERRABLE \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043a\u0430\u043a READ ONLY, \u043c\u043e\u0433\u043b\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0410 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043a\u0430\u043a DEFERRABLE, \u043c\u043e\u0433\u043b\u0430 \u043f\u0440\u0435\u0440\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u0437-\u0437\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435.\u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438. \u042d\u0442\u043e \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438: \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0445 READ ONLY \u0438\u0437\u043c\u0435\u043d\u044f\u043b\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 postgres_fdw, \u0442\u0430\u043a\u0438\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u043a\u0430\u043a READ WRITE.\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438: \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\/\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 ENFORCED \u0434\u043b\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 CHECK commit: 342051d73b3\u0412 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u0442\u0430\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 CHECK \u043a\u0430\u043a NOT ENFORCED:CREATE TABLE test (id int);ALTER TABLE test ADD CONSTRAINT check_id CHECK (id &gt; 0) NOT ENFORCED;\u041d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 ENFORCED \u0431\u044b\u043b\u043e \u043d\u0435\u043b\u044c\u0437\u044f.18=# ALTER TABLE test ALTER CONSTRAINT check_id ENFORCED;ERROR:  cannot alter enforceability of constraint &#171;check_id&#187; of relation &#171;test&#187;\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0435\u0433\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430\u043d\u043e\u0432\u043e. \u0412 19-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u044d\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c. \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u0432 ENFORCED \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438:19=# ALTER TABLE test ALTER CONSTRAINT check_id ENFORCED;ALTER TABLE\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438: \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c CHECK commit: f80bedd52b1\u0412 18-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \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. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:CREATE TABLE test (  id int,  amount numeric,  tax numeric GENERATED ALWAYS AS (amount*0.2) VIRTUAL,  CONSTRAINT check_tax CHECK (tax &gt; 0));\u041e\u0434\u043d\u0430\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0431\u044b\u043b\u043e \u043d\u0435\u043b\u044c\u0437\u044f, \u0435\u0441\u043b\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 CHECK:18=# ALTER TABLE test ALTER COLUMN tax SET EXPRESSION AS (amount*0.22);ERROR:  ALTER TABLE \/ SET EXPRESSION is not supported for virtual generated columns in tables with check constraintsDETAIL:  Column &#171;tax&#187; of relation &#171;test&#187; is a virtual generated column.\u0412 19-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u043d\u044f\u0442\u043e. \u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 CHECK:19=# ALTER TABLE test ALTER COLUMN tax SET EXPRESSION AS (amount*0.22);ALTER TABLE\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 uuid \u0438 bytea \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 base32hex commit: 497c1170cb1, ba21f5bf8af\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 uuid \u0438 bytea \u0440\u0430\u043d\u044c\u0448\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e \u043e\u0431\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 encode\/decode \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0438 \u0444\u043e\u0440\u043c\u0430\u0442 base32hex. \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u044f\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432. \u0424\u043e\u0440\u043c\u0430\u0442 base32hex \u0443\u0434\u043e\u0431\u0435\u043d \u0434\u043b\u044f UUIDv7: \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u043e\u0447\u0435 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u0439 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 (\u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 C). \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f UUID \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0432 base32hex \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0441\u043f\u0440\u0430\u0432\u0430 \u0437\u043d\u0430\u043a\u0430\u043c\u0438 \u00ab=\u00bb. \u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u0442\u0438 \u0437\u043d\u0430\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0435\u0437\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 rtrim, \u0432\u0435\u0434\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f decode \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0430 base32hex \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0431\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430:WITH cte(val) AS (  VALUES (uuidv7()))SELECT  val &#171;text&#187;,  val::bytea &#171;bytea&#187;,  encode(val::bytea, &#8216;base32hex&#8217;) &#171;base32hex&#187;,  rtrim(encode(val::bytea, &#8216;base32hex&#8217;),&#8217;=&#8217;) &#171;base32hex trimmed&#187;,  decode(rtrim(encode(val::bytea, &#8216;base32hex&#8217;),&#8217;=&#8217;), &#8216;base32hex&#8217;) &#171;bytea decoded&#187;FROM cte\\gx-[ RECORD 1 ]&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-text              | 01a013f7-edf0-760d-a654-f2ec6b3a9709bytea             | \\x01a013f7edf0760da654f2ec6b3a9709base32hex         | 06G17TVDU1R0R9IKUBM6MEKN14======base32hex trimmed | 06G17TVDU1R0R9IKUBM6MEKN14bytea decoded     | \\x01a013f7edf0760da654f2ec6b3a9709PL\/pgSQL: \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f SELECT \u2026 INTO commit: ce8d5fe0e28\u0412 PL\/pgSQL \u043e\u0431\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435: \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439:DECLARE  x int;BEGIN  x := 2+2;  SELECT 2+2 INTO x;END;\u041d\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u044d\u0442\u043e \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443. \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432 PL\/pgSQL, \u0430 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0447\u0435\u0440\u0435\u0437 SPI, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0431\u0435\u0437 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 SPI, \u0435\u0441\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439. \u041f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442: \u0442\u0430\u043a\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 pg_stat_statements.\u0424\u0443\u043d\u043a\u0446\u0438\u0438 tid_block \u0438 tid_offset commit: df6949ccf7a\u0418\u0437\u0432\u043b\u0435\u0447\u044c \u043d\u043e\u043c\u0435\u0440 \u0431\u043b\u043e\u043a\u0430 \u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u043b\u043e\u043a\u0430 \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f ctid \u0440\u0430\u043d\u044c\u0448\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a \u0441\u0442\u0440\u043e\u043a\u0435, \u0430 \u0437\u0430\u0442\u0435\u043c \u043a \u0442\u0438\u043f\u0443 point:SELECT ctid,       (ctid::text::point)[0]::bigint AS block,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-497492","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/497492","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=497492"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/497492\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=497492"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=497492"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=497492"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}