{"id":301507,"date":"2020-04-08T15:00:52","date_gmt":"2020-04-08T15:00:52","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=301507"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=301507","title":{"rendered":"\u041c\u043d\u043e\u0433\u043e \u043b\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0432 \u0427\u0451\u0440\u0442\u043e\u0432\u043e\u0439 \u0414\u044e\u0436\u0438\u043d\u0435?"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/493106\/\"><i>\u0420\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0451\u0442 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043e PostgreSQL 13. 8 \u0430\u043f\u0440\u0435\u043b\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u0430\u0441\u044c \u00ab\u0437\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0430\u00bb \u2014 PostgreSQL <b>feature freeze<\/b>, \u0442\u0435\u043f\u0435\u0440\u044c \u0432 \u044d\u0442\u0443 \u0432\u0435\u0440\u0441\u0438\u044e \u0432\u043e\u0439\u0434\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u0444\u0438\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u044b \u0434\u043e \u044d\u0442\u043e\u0439 \u0434\u0430\u0442\u044b.<\/p>\n<p>  \u0420\u0435\u0432\u043e\u043b\u044e\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u044d\u0442\u0443 \u0432\u0435\u0440\u0441\u0438\u044e, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0442\u0440\u0443\u0434\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c. \u041a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445, \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043d\u0435\u0439 \u043d\u0435\u0442. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043d\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u0432\u043e\u0439\u0442\u0438 \u0432 \u043d\u0435\u0451 \u0442\u0430\u043a\u0438\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u043f\u0430\u0442\u0447\u0438, \u043a\u0430\u043a Table \u0438 Functions \u0434\u043b\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 JSON\/SQL, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0432\u0438\u0434\u0435\u0442\u044c \u0435\u0449\u0435 \u0432 PG12 \u0440\u044f\u0434\u043e\u043c \u0441 \u043f\u0430\u0442\u0447\u0435\u043c JSONPath; \u043d\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u2014 \u043b\u0438\u0448\u044c \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u041d\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043e\u043a \u0432\u0441\u0451 \u0436\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u0435\u0442. \u041c\u044b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u043d\u0443\u044e \u0441\u0432\u043e\u0434\u043a\u0443 \u0432\u043e\u0448\u0435\u0434\u0448\u0438\u0445 \u0432 \u0427\u0451\u0440\u0442\u043e\u0432\u0443 \u0414\u044e\u0436\u0438\u043d\u0443 \u043f\u0430\u0442\u0447\u0435\u0439.<\/i><\/p>\n<hr>\n<p>  <\/p>\n<h3>\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445 SQL<\/h3>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/23\/2146\/\"><b>CREATE DATABASE\u2026 LOCALE<\/b><\/a><\/p>\n<p>  \u0423\u0442\u0438\u043b\u0438\u0442\u044b <code>initdb<\/code>, <code>createdb<\/code> \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>CREATE COLLATION<\/code> \u0438\u043c\u0435\u044e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>LOCALE<\/code>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0441\u0440\u0430\u0437\u0443 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f <code>LC_CTYPE<\/code> \u0438 <code>LC_COLLATE<\/code>. \u0422\u0435\u043f\u0435\u0440\u044c \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 <code>CREATE DATABASE<\/code>:<\/p>\n<pre><code class=\"pgsql\">CREATE DATABASE db_koi8r TEMPLATE template0      ENCODING 'KOI8R' LOCALE 'ru_RU.KOI8R';<\/code><\/pre>\n<p><a name=\"habracut\"><\/a><br \/>  <a href=\"https:\/\/commitfest.postgresql.org\/25\/2333\/\"><b>ALTER VIEW\u2026 RENAME COLUMN<\/b><\/a><\/p>\n<p>  \u0418\u043c\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>ALTER VIEW<\/code>. \u0420\u0430\u043d\u044c\u0448\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0443 \u0437\u0430\u0431\u044b\u043b\u0438 \u0437\u0430\u0434\u0430\u0442\u044c \u0438\u043c\u044f:<\/p>\n<pre><code class=\"pgsql\">CREATE VIEW uptime AS SELECT current_timestamp, current_timestamp - pg_postmaster_start_time(); SELECT * FROM uptime;<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">       current_timestamp       |    ?column?      -------------------------------+-----------------  2020-03-23 15:37:00.088824+03 | 04:18:24.897856<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c:<\/p>\n<pre><code class=\"pgsql\">ALTER VIEW uptime RENAME COLUMN &quot;?column?&quot; TO uptime; SELECT * FROM uptime;<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">       current_timestamp       |     uptime       -------------------------------+-----------------  2020-03-23 15:37:40.726516+03 | 04:19:05.535548<\/code><\/pre>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/26\/2379\/\"><b>ALTER TABLE\u2026 ALTER COLUMN\u2026 DROP EXPRESSION<\/b><\/a><\/p>\n<p>  \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u043c, \u0442\u043e \u0435\u0441\u0442\u044c \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0435\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE payments (     id integer PRIMARY KEY,     amount numeric(18,2),     income_tax numeric(18,2) GENERATED ALWAYS AS (amount*0.13) STORED ); INSERT INTO payments(id, amount) VALUES(1, 42); \\d payments<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">                                     Table &quot;public.payments&quot;    Column   |     Type      | Collation | Nullable |                   Default                      ------------+---------------+-----------+----------+--------------------------------------  id         | integer       |           | not null |  amount     | numeric(18,2) |           |          |  income_tax | numeric(18,2) |           |          | generated always as ((amount * 0.13))  stored Indexes:     &quot;payments_pkey&quot; PRIMARY KEY, btree (id)<\/code><\/pre>\n<p>  \u0412\u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u0440\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u044f\u0432\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c income_tax. \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"pgsql\">ALTER TABLE payments ALTER COLUMN income_tax DROP EXPRESSION; \\d payments<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">                   Table &quot;public.payments&quot;    Column   |     Type      | Collation | Nullable | Default ------------+---------------+-----------+----------+---------  id         | integer       |           | not null |  amount     | numeric(18,2) |           |          |  income_tax | numeric(18,2) |           |          | Indexes:     &quot;payments_pkey&quot; PRIMARY KEY, btree (id)<\/code><\/pre>\n<p>  \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0434\u0435\u043b\u0438\u0441\u044c:<\/p>\n<pre><code class=\"pgsql\">SELECT * FROM payments;<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\"> id | amount | income_tax ----+--------+------------   1 |  42.00 |       5.46<\/code><\/pre>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/26\/2055\/\"><b>DROP DATABASE\u2026 FORCE<\/b><\/a><br \/>  \u0415\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0435 \u0434\u043e\u0436\u0438\u0434\u0430\u044f\u0441\u044c \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u043e\u0439 \u043e\u043f\u0446\u0438\u0435\u0439 <code>FORCE<\/code> \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>DROP DATABASE<\/code>.<\/p>\n<pre><code class=\"pgsql\">CREATE DATABASE db;<\/code><\/pre>\n<p>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c\u0441\u044f \u043a \u043d\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code class=\"pgsql\">CREATE EXTENSION IF NOT EXISTS dblink; SELECT dblink_connect('dbname=db');<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\"> dblink_connect ----------------  OK<\/code><\/pre>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u0434\u0430\u043b\u0438\u043c, \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u044f, \u043a\u0430\u043a \u0438 <code>pg_terminate_backend<\/code>, \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"pgsql\">DROP DATABASE db WITH (FORCE);<\/code><\/pre>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/27\/2488\/\"><b>ALTER TYPE\u2026 SET STORAGE<\/b><\/a><br \/>  \u041a\u043e\u043c\u0430\u043d\u0434\u0430 <code>ALTER TYPE<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043b\u044f \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f. \u0420\u0430\u043d\u044c\u0448\u0435 \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 <code>CREATE TYPE<\/code>.<\/p>\n<p>  \u0414\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0442\u0438\u043f, \u0430 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u2014 <code>tsquery<\/code>. \u041d\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c\u0441\u044f \u043a \u043d\u0435\u0439:<\/p>\n<pre><code class=\"pgsql\">CREATE DATABASE db; \\c db<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 tsquery \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f <code>plain<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0442\u0430\u0431\u043b\u0438\u0446 \u0442\u0430\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u044d\u0442\u0443 \u0436\u0435 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e:<\/p>\n<pre><code class=\"pgsql\">SELECT typname,typstorage FROM pg_type WHERE typname = 'tsquery';<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\"> typname | typstorage ---------+------------  tsquery | p<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"pgsql\">CREATE TABLE queries (query tsquery); SELECT attname, attstorage FROM pg_attribute WHERE attrelid = 'queries'::regclass AND attname = 'query';<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\"> attname | attstorage ---------+------------  query   | p<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0442\u0438\u043f:<\/p>\n<pre><code class=\"pgsql\">ALTER TYPE tsquery SET (storage=external); SELECT typname,typstorage FROM pg_type WHERE typname = 'tsquery';<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\"> typname | typstorage ---------+------------  tsquery | e<\/code><\/pre>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f \u0438 \u0442\u0438\u043f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432 \u043d\u043e\u0432\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE new_queries (query tsquery); SELECT attname, attstorage FROM pg_attribute WHERE attrelid = 'new_queries'::regclass AND attname = 'query';<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\"> attname | attstorage ---------+------------  query   | e<\/code><\/pre>\n<p>  \u041d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432 \u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0449\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 TOAST, \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0430 <code>plain<\/code> \u043d\u0435\u043b\u044c\u0437\u044f:<\/p>\n<pre><code class=\"pgsql\">ALTER TYPE tsquery SET (storage=plain);<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">ERROR:  cannot change type's storage to PLAIN<\/code><\/pre>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0411\u0414, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435 \u0436\u0430\u043b\u043a\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/24\/2190\/\"><b>ALTER STATISTICS\u2026 SET STATISTICS<\/b><\/a><\/p>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>CREATE STATISTICS<\/code> \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043a\u0438 \u0441\u0430\u043c\u044b\u0445 \u0447\u0430\u0441\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0439 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u044b\u0445 \u0441\u0430\u043c\u044b\u0445 \u0447\u0430\u0441\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <code>default_statistics_target<\/code>. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"pgsql\">ALTER STATISTICS \u0438\u043c\u044f SET STATISTICS \u043d\u043e\u0432\u043e\u0435_\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435;<\/code><\/pre>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/27\/1844\/\">FETCH FIRST \u0441 \u043e\u043f\u0446\u0438\u0435\u0439 WITH TIES<\/a><\/b><br \/>  \u041a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 <code>SELECT<\/code> \u0432\u043c\u0435\u0441\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f <code>LIMIT<\/code> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 SQL:<\/p>\n<pre><code class=\"pgsql\">SELECT * FROM (VALUES (1,'1.1'), (2,'2.1'), (2,'2.2'), (3,'3.1')) t(a,b) ORDER BY a FETCH FIRST 2 ROWS ONLY;<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\"> a |  b   ---+-----  1 | 1.1  2 | 2.1 (2 rows)<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c <code>FETCH<\/code> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0438 \u0444\u0440\u0430\u0437\u0443 <code>WITH TIES<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043a \u0432\u044b\u0432\u043e\u0434\u0443 \u0432\u0441\u0435 \u201c\u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435\u201d \u0441\u0442\u0440\u043e\u043a\u0438 (\u0441\u0442\u0440\u043e\u043a\u0438, \u0440\u0430\u0432\u043d\u044b\u0435 \u0443\u0436\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c, \u0435\u0441\u043b\u0438 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438):<\/p>\n<pre><code class=\"pgsql\">SELECT * FROM (VALUES (1,'1.1'), (2,'2.1'), (2,'2.2'), (3,'3.1')) t(a,b) ORDER BY a FETCH FIRST 2 ROWS WITH TIES;<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\"> a |  b   ---+-----  1 | 1.1  2 | 2.1  2 | 2.2 (3 rows)<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/23\/2150\/\"><b>get_random_uuid<\/b><\/a><br \/>  \u041d\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>get_random_uuid<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 UUID \u0432\u0435\u0440\u0441\u0438\u0438 4(\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435):<\/p>\n<pre><code class=\"pgsql\">SELECT gen_random_uuid();<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">           gen_random_uuid             --------------------------------------  25e02793-80c0-438c-be07-c94b966c43ab<\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0442\u0438\u043f\u0430 UUID \u0432 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445.<br \/>  \u0420\u0430\u043d\u044c\u0448\u0435 \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438 uuid-ossp \u0438\u043b\u0438 pgcrypto.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/26\/2353\/\"><b>min_scale \u0438 trim_scale \u0434\u043b\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0442\u0438\u043f\u0430 numeric<\/b><\/a><\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>min_scale<\/code> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0447\u0430\u0449\u0438\u0445 \u0446\u0438\u0444\u0440 \u0432 \u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0447\u0438\u0441\u043b\u0430, \u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>trim_scale<\/code> \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u0437\u043d\u0430\u0447\u0430\u0449\u0438\u0435 \u043d\u0443\u043b\u0438:<\/p>\n<pre><code class=\"pgsql\">SELECT n, min_scale(n), trim_scale(n) FROM (VALUES(42.42000)) as t(n);<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">    n     | min_scale | trim_scale ----------+-----------+------------  42.42000 |         2 |      42.42<\/code><\/pre>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/26\/2396\/\"><b>gcd \u0438 lcm<\/b><\/a><\/p>\n<p>  \u041f\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u043e\u0431\u0449\u0438\u0439 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c(<code>gcm<\/code>) \u0438 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u043e\u0431\u0449\u0435\u0435 \u043a\u0440\u0430\u0442\u043d\u043e\u0435(<code>lcm<\/code>):<\/p>\n<pre><code class=\"pgsql\">SELECT gcd(54,24), lcm(54,24);<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\"> gcd | lcm -----+-----    6 | 216<\/code><\/pre>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/23\/2070\/\"><b>\u0410\u0433\u0440\u0435\u0433\u0430\u0442\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 min \u0438 max \u0434\u043b\u044f \u0442\u0438\u043f\u0430 pg_lsn<\/b><\/a><\/p>\n<p>  \u0414\u043b\u044f \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 <code>pg_lsn<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>min<\/code> \u0438 <code>max<\/code>, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432\u0438\u0434\u0430:<\/p>\n<pre><code class=\"pgsql\">SELECT min(restart_lsn) FROM pg_replication_slots; SELECT min(sent_lsn) FROM pg_stat_replication;<\/code><\/pre>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/26\/2362\/\"><b>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0442\u0438\u043f\u0430 \u0443 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/b><\/a><\/p>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0443 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0441\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0442\u0438\u043f\u0430.<\/p>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0435\u0441\u0442\u044c \u0442\u0438\u043f \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0435\u043d\u0435\u0436\u043d\u044b\u0445 \u0435\u0434\u0438\u043d\u0438\u0446 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0430\u044f \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u043e\u0434\u043e\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0430\u043b\u043e\u0433\u0430:<\/p>\n<pre><code class=\"pgsql\">CREATE TYPE currency AS (     amount numeric(18,2),     code   text ); CREATE FUNCTION income_tax(quantity currency) RETURNS currency     AS 'SELECT quantity.amount * 0.13, quantity.code' LANGUAGE SQL;<\/code><\/pre>\n<p>  \u0412\u044b\u0437\u044b\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043c\u044b \u043e\u0436\u0438\u0434\u0430\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0432\u0430 \u0437\u043d\u0430\u043a\u0430 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0447\u0435\u0442\u044b\u0440\u0435. \u041d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0434\u0430\u0436\u0435 \u044f\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0442\u0440\u0435\u0442\u0438\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446):<\/p>\n<pre><code class=\"pgsql\">SELECT amount, code, amount::numeric(18,2) FROM income_tax(ROW(42.42, '\u0440\u0443\u0431'))\\gx<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">-[ RECORD 1 ]-- amount | 5.5146 code   | \u0440\u0443\u0431 amount | 5.5146<\/code><\/pre>\n<p>  \u0412 13 \u0432\u0435\u0440\u0441\u0438\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439:<\/p>\n<pre><code class=\"pgsql\">SELECT amount, code, amount::numeric(18,2) FROM income_tax(ROW(42.42, '\u0440\u0443\u0431'))\\gx<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">-[ RECORD 1 ] amount | 5.51 code   | \u0440\u0443\u0431 amount | 5.51<\/code><\/pre>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/27\/2255\/\"><b>\u041b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0432 to_date() \u0438 to_timestamp()<\/b><\/a><\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u0438 <code>to_date<\/code> \u0438 <code>to_timestamp<\/code> \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0438 \u0434\u043d\u0435\u0439 \u043d\u0435\u0434\u0435\u043b\u0438. \u0420\u0430\u043d\u044c\u0448\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"pgsql\">SELECT to_date('\u0412\u0442\u043e\u0440\u043d\u0438\u043a, 24 \u041c\u0430\u0440\u0442\u0430 2020', 'TMDay, DD TMMonth YYYY');<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">  to_date    ------------  2020-03-24<\/code><\/pre>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/27\/2380\/\"><b>normalize \u0438 IS NORMALIZED<\/b><\/a><\/p>\n<p>  \u0414\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 SQL \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f normalize(), \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0430\u044f Unicode-\u0441\u0442\u0440\u043e\u043a\u0443, \u0438 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 IS NORMALIZED, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0449\u0438\u0439, \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430.<\/p>\n<pre><code class=\"pgsql\">SELECT str, normalize(str, NFC) AS nfc,        str IS NFC NORMALIZED AS is_nfc_normalized,        normalize(str, NFKC) AS nfkc,        str IS NFKC NORMALIZED AS is_nfkc_normalized FROM (VALUES(U&amp;'\\0032\\2075')) AS vals(str)\\gx<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">-[ RECORD 1 ]------+--- str                | 2\u2075 nfc                | 2\u2075 is_nfc_normalized  | t nfkc               | 25 is_nfkc_normalized | f<\/code><\/pre>\n<p>  <a href=\"http:\/\/www.unicode.org\/reports\/tr15\/\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435<\/a> \u043e \u0444\u043e\u0440\u043c\u0430\u0445 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 UNICODE.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/27\/2271\/\">\u0422\u0438\u043f xid8 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f xid8_current() \u0434\u043b\u044f 64-\u0431\u0438\u0442\u043d\u044b\u0445 \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439<\/a><\/b><\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043d\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 xid8 \u0434\u043b\u044f 64-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043d\u043e\u043c\u0435\u0440\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438. \u041d\u043e \u043d\u0435\u0442, \u044d\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e PostgreSQL \u043f\u0435\u0440\u0435\u0448\u0435\u043b \u043d\u0430 64-\u0431\u0438\u0442\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438: \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u043a \u0440\u0430\u043d\u044c\u0448\u0435. \u041d\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u043d\u043e\u0432\u044b\u0439 \u0442\u0438\u043f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c pg_current_xact_id \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0442\u0430\u0440\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 txid_current, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b\u0430 int8, \u0438 \u0442. \u043f.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/27\/1911\/\"><b>\u041d\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 anycompatible<\/b><\/a><\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0442\u0438\u043f\u044b <code>anycompatible<\/code>, <code>anycompatiblearray<\/code>, <code>anycompatiblenonarray<\/code>, <code>anycompatiblerange<\/code>. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0442\u0438\u043f\u043e\u0432 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 <code>anyelement<\/code>, \u043d\u043e\u0432\u044b\u0435 \u0442\u0438\u043f\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435, \u0430 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0435 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0438\u043f\u044b.<\/p>\n<p>  \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>maximum<\/code> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043a\u0430\u043a <code>anycompatible<\/code>, \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f <code>integer<\/code> \u0438 <code>numeric<\/code>. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043e\u0431\u0449\u0435\u043c\u0443 \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u0442\u0438\u043f\u043e\u0432:<\/p>\n<pre><code class=\"pgsql\">CREATE FUNCTION maximum(a anycompatible, b anycompatible) RETURNS anycompatible \tAS 'SELECT CASE WHEN a &gt; b THEN a ELSE b END' LANGUAGE SQL;  SELECT f, pg_typeof(f) FROM maximum(42, 42.42) f;<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">   f   | pg_typeof -------+-----------  42.42 | numeric<\/code><\/pre>\n<p>  \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0442\u0438\u043f\u044b anycompatible- \u0438 any- \u2014 \u044d\u0442\u043e \u0434\u0432\u0430 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u043d\u0430\u0431\u043e\u0440\u0430 \u0442\u0438\u043f\u043e\u0432:<\/p>\n<pre><code class=\"pgsql\">CREATE FUNCTION first_elems(a anyarray, b anycompatiblearray)     RETURNS TABLE(a anyelement, b anycompatible) AS $$         SELECT ROW(a[array_lower(a,1)], b[array_lower(b,1)]);     $$ LANGUAGE sql; SELECT first_elems(ARRAY[1,2,3], ARRAY['a','b','c']) AS str,         first_elems(ARRAY[1.1,2.2,3.3],ARRAY[true,false]) bool;<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">  str  |  bool    -------+---------  (1,a) | (1.1,t)<\/code><\/pre>\n<p>  <\/p>\n<h3>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438<\/h3>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/27\/2502\/\"><b>Transform \u0434\u043b\u044f \u0442\u0438\u043f\u0430 bool \u0432 PL\/Perl<\/b><\/a><br \/>  \u0421\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0431\u044b\u043b \u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0447\u0435\u043d TRANSFORM \u0418\u0432\u0430\u043d\u0430 \u041f\u0430\u043d\u0447\u0435\u043d\u043a\u043e (\u0437\u0430\u043c\u0435\u0441\u0442\u0438\u0442\u0435\u043b\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0430 Postgres Professional) \u2014 <a href=\"https:\/\/www.postgresql.org\/message-id\/flat\/1583013317.881182688%40f390.i.mail.ru\">bool_plperl<\/a>. Postgres \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0432 PL\/Perl \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u043a <code>t<\/code> \u0438\u043b\u0438 <code>f<\/code>t, \u043d\u043e \u0434\u043b\u044f Perl <code>f<\/code> \u043d\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>\u043b\u043e\u0436\u044c<\/i> \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0443\u043a\u0432\u0430 f. \u042d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438 (\u0441\u043c. <a href=\"https:\/\/www.postgresql.org\/message-id\/flat\/1583013317.881182688%40f390.i.mail.ru\">\u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0443<\/a>), \u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 TRANSFORM \u0434\u043b\u044f bool \u2014 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u044b\u0439.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/27\/2467\/\"><b>\u0411\u044b\u0441\u0442\u0440\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432 PL\/pgSQL<\/b><\/a><\/p>\n<p>  \u041f\u0440\u043e\u0441\u0442\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f (\u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a) \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0420\u0430\u043d\u044c\u0448\u0435 \u0432 \u044d\u0442\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432\u0440\u0435\u043c\u044f \u043d\u0435\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0440\u0430\u0442\u0438\u043b\u043e\u0441\u044c \u043d\u0430 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0446\u0438\u043a\u043b\u0435.<\/p>\n<pre><code class=\"pgsql\">CREATE OR REPLACE FUNCTION slow_pi() RETURNS double precision AS $$     DECLARE         a double precision := 1;         s double precision := 1;         r double precision := 0;     BEGIN         FOR i IN 1 .. 10000000 LOOP             r := r + s\/a; a := a + 2; s := -s;         END LOOP;         RETURN 4*r;     END;     $$ LANGUAGE plpgsql;<\/code><\/pre>\n<p>  \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c slow_pi() \u0432 PG12:<\/p>\n<pre><code class=\"pgsql\">SELECT slow_pi();<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">          slow_pi           --------------------      3.1415925535898497     (1 row)     Time: 13060,650 ms (00:13,061)<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432 PG13:  <\/p>\n<pre><code class=\"pgsql\">SELECT slow_pi();<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">          slow_pi           --------------------      3.1415925535897915     (1 row)     Time: 2108,464 ms (00:02,108)<\/code><\/pre>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/26\/2246\/\"><b>\u0414\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0432\u043c\u0435\u0441\u0442\u043e pg_pltemplate<\/b><\/a><\/p>\n<p>  \u0412 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u0441\u0442\u0430\u043b\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u043d\u0430 \u043e\u0434\u043d\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443. \u0423\u0434\u0430\u043b\u0438\u043b\u0438 <code>pg_pltemplate<\/code>. \u0412 \u043d\u0435\u0439 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0441\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u044b \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 <code>CREATE LANGUAGE<\/code>. \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0448\u0438\u043b\u0438 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u0437 <code>pg_pltemplate<\/code>, \u0430 \u043e\u0442 \u0441\u0430\u043c\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f. \u041d\u043e \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0443 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 (\u0431\u0435\u0437 \u043f\u0440\u0430\u0432 \u0441\u0443\u043f\u0435\u0440\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f) \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f. \u0412\u0435\u0434\u044c \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 plpgsql \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d \u0431\u044b\u0442\u044c \u0441\u0443\u043f\u0435\u0440\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c.<\/p>\n<p>  \u041f\u043e\u0441\u0442\u0443\u043f\u0438\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0412 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u043c \u0444\u0430\u0439\u043b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u2014 <code>trusted<\/code>. \u0415\u0441\u043b\u0438 \u043e\u0431\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <code>trusted<\/code> \u0438 <code>superuser<\/code> \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b, \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0443\u043f\u0435\u0440\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, \u043d\u043e \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441 \u043f\u0440\u0430\u0432\u043e\u043c <code>CREATE<\/code> \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0438 \u0435\u0451 \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446). \u041f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0430\u0432\u0430 \u0441\u0443\u043f\u0435\u0440\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0432\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440. \u0415\u043c\u0443 \u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0445\u043e\u0442\u044f \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0435\u043c \u0441\u0430\u043c\u043e\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c.<\/p>\n<p>  \u0412\u0430\u0436\u043d\u044b\u0435 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f \u044d\u0442\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439:<\/p>\n<ul>\n<li>\u0414\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u0434\u043e\u0440\u043e\u0433\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0434\u0440\u0443\u0433\u0438\u0445 \u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432. \u0421\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u043b\u0438\u0448\u044c plpgsql, plperl \u0438 pltcl.<\/li>\n<li>\u0412 <code>pg_pltemplate<\/code> \u0431\u044b\u043b\u043e \u0436\u0435\u0441\u0442\u043a\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043e, \u0447\u0442\u043e plpython \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u044f\u0437\u044b\u043a\u0430. \u041e\u0442\u043a\u0430\u0437 \u043e\u0442 <code>pg_pltemplate<\/code> \u044d\u0442\u043e \u0448\u0430\u0433 (\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439, \u0445\u043e\u0442\u044f \u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u0439) \u043a \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443 \u043d\u0430 python 3.<\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0418\u043d\u0434\u0435\u043a\u0441\u044b<\/h3>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/27\/2202\/\"><b>\u0421\u0436\u0430\u0442\u0438\u0435 B-tree<\/b><\/a><br \/>  \u0412\u0430\u0436\u043d\u044b\u0439 \u0438 \u0434\u043e\u043b\u0433\u043e\u0436\u0434\u0430\u043d\u043d\u044b\u0439 (\u0440\u0430\u0431\u043e\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u0430\u0436 \u0432 2015-\u043c) \u043f\u0430\u0442\u0447 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0410\u043d\u0430\u0441\u0442\u0430\u0441\u0438\u0435\u0439 \u041b\u0443\u0431\u0435\u043d\u043d\u0438\u043a\u043e\u0432\u043e\u0439 (Postgres Professioanal) \u0438 \u041f\u0438\u0442\u0435\u0440\u043e\u043c \u0413\u0435\u0439\u0433\u0430\u043d\u043e\u043c (Peter Geoghegan) \u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0447\u0435\u043d, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u041f\u0438\u0442\u0435\u0440\u043e\u043c. \u041e\u0431 \u044d\u0442\u043e\u043c \u041d\u0430\u0441\u0442\u044f \u0443\u0441\u043f\u0435\u043b\u0430 <a href=\"https:\/\/pgconf.in\/conferences\/pgconfin2020\/program\/proposals\/117\">\u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430 PGconf India<\/a>. Postgres \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 B-tree \u0437\u0430 \u0441\u0447\u0435\u0442 \u0434\u0435\u0434\u0443\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u043d\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u043a\u043b\u044e\u0447\u0430\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u0430. \u042d\u0442\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0431\u044b\u043b\u0438 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e \u043f\u0435\u0440\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0436\u0430\u0442\u0438\u0435 \u0441\u0442\u0430\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u044c \u0432 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432. \u0418\u0434\u0435\u044f \u0434\u0435\u0434\u0443\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0432\u0437\u044f\u0442\u0430 \u0438\u0437 \u0431\u043e\u043b\u0435\u0435 \u0433\u0438\u0431\u043a\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0442\u0438\u043f\u0430 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/340978\/\">GIN<\/a> (\u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u2014 Generalized Inverted Index).<\/p>\n<p>  \u0412 \u044d\u0442\u0438\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0445 \u0447\u0430\u0449\u0435, \u0447\u0435\u043c \u0432 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/330544\/\">B-tree<\/a>, \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u043a\u043b\u044e\u0447\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 \u043b\u0435\u043a\u0441\u0435\u043c\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0445. \u0418 \u043e\u043d\u0430 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437. \u042d\u0442\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u044b B-tree \u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0435 \u0443\u043c\u0435\u043b\u0438. <\/p>\n<p>  \u0418\u043d\u0434\u0435\u043a\u0441\u044b B-tree \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 GIN \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u00ab\u043b\u0438\u0441\u0442\u044c\u0435\u0432\u00bb. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0445\u0441\u044f \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0442\u043e\u043c\u0443 \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u043a\u043b\u044e\u0447\u0430, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b: \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e posting list \u2014 \u0441\u043f\u0438\u0441\u043e\u043a TID-\u043e\u0432 (\u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439), \u0435\u0441\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u0430\u043b, \u0430 \u0435\u0441\u043b\u0438 TID-\u043e\u0432 \u043c\u043d\u043e\u0433\u043e, \u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u00ab\u0432\u0435\u0442\u0432\u0438 \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432\u00bb \u2014 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0442\u0438\u043f\u0430 posting list \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0435\u0442\u0432\u0438 \u0434\u0435\u0440\u0435\u0432\u0430 (\u043e\u043d\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f posting tree).<\/p>\n<p>  \u0422\u0430\u043a\u0430\u044f \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u043e\u0445\u043e\u0436\u0430 B-tree, \u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u0435\u0442\u0430\u043b\u044f\u043c\u0438: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u043f\u0438\u0441\u043a\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c \u043e\u0434\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0434\u0435\u0440\u0435\u0432\u0430 \u0432 GIN \u043e\u0434\u043d\u043e\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435, \u0430 \u043d\u0435 \u0434\u0432\u0443\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435) \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u043e\u0432\u044b\u0445, \u0434\u0435\u0434\u0443\u043f\u043b\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0441\u043e \u0441\u0442\u0430\u0440\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e. \u0418 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043d\u044f\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 3-\u0445 \u043b\u0435\u0442. \u041d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043e\u0447\u0438\u0441\u0442\u043a\u0438 (\u043c\u0438\u043a\u0440\u043e\u0432\u0430\u043a\u0443\u0443\u043c) \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u044e\u0430\u043d\u0441\u044b.<\/p>\n<p>  \u041d\u0430 \u0442\u0435\u0441\u0442\u0430\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u0441\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0434\u0435\u0434\u0443\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u0430, \u0441\u0436\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 3 \u0440\u0430\u0437\u0430. \u0421\u0436\u0430\u0442\u0438\u0435 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c, \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0440\u0430\u0441\u043f\u0443\u0445\u0430\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0442\u0435\u043c\u043f\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u041d\u043e\u0432\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/26\/2071\/\"><b>\u041f\u043e\u043b\u043d\u043e\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 GIN \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043c, \u0433\u0434\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e<\/b><\/a><br \/>  \u042d\u0442\u043e\u0442 \u043f\u0430\u0442\u0447 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0430 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 GIN-\u0438\u043d\u0434\u0435\u043a\u0441\u0443. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0445\u043e\u0442\u044c \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f GIN-\u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u044b\u043c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u0430. \u0412\u043e\u0437\u044c\u043c\u0435\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0443 <code>tsvector<\/code>. \u0415\u0441\u043b\u0438 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438\u043c\u0435\u0435\u0442 \u0432\u0438\u0434 \u00ab\u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e, \u043a\u0440\u043e\u043c\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430\u00bb, \u0442\u043e \u0432\u0435\u0441\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438 \u0434\u0440\u0443\u0433\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u0430, \u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<p>  \u0421 \u043d\u043e\u0432\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0447\u043d\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0432\u044b\u0438\u0433\u0440\u044b\u0448, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e\u0431\u044b \u0443\u0447\u0435\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435. \u0421\u0440\u0430\u0432\u043d\u0438\u0442\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u044b \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 12 (Buffers):<\/p>\n<pre><code class=\"pgsql\">EXPLAIN (ANALYZE, BUFFERS, COSTS OFF, TIMING OFF) SELECT * FROM mail_messages WHERE tsv @@ to_tsquery('!vacuum') AND tsv @@ to_tsquery('analyze');<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">                                             QUERY PLAN                                              ------------------------------------------------------------------ Bitmap Heap Scan on mail_messages (actual rows=5864 loops=1)    Recheck Cond: ((tsv @@ to_tsquery('!vacuum'::text)) AND (tsv @@ to_tsquery('analyze'::text)))    Heap Blocks: exact=5167    Buffers: shared hit=24 read=27405    -&gt;  Bitmap Index Scan on mail_messages_tsv_idx (actual rows=5864 loops=1)          Index Cond: ((tsv @@ to_tsquery('!vacuum'::text)) AND (tsv @@ to_tsquery('analyze'::text)))          Buffers: shared hit=24 read=22238  Planning Time: 0.283 ms  Execution Time: 3258.234 ms<\/code><\/pre>\n<p>  \u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u0432 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438:<\/p>\n<pre><code class=\"pgsql\">EXPLAIN (ANALYZE, BUFFERS, COSTS OFF, TIMING OFF) SELECT * FROM mail_messages WHERE tsv @@ to_tsquery('!vacuum') AND tsv @@ to_tsquery('analyze');<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">                                             QUERY PLAN                                              --------------------------------------------------------------------------- Bitmap Heap Scan on mail_messages (actual rows=5864 loops=1)    Recheck Cond: ((tsv @@ to_tsquery('!vacuum'::text)) AND (tsv @@ to_tsquery('analyze'::text)))    Heap Blocks: exact=5156    Buffers: shared hit=5179    -&gt;  Bitmap Index Scan on mail_messages_tsv_idx (actual rows=5864 loops=1)          Index Cond: ((tsv @@ to_tsquery('!vacuum'::text)) AND (tsv @@ to_tsquery('analyze'::text)))          Buffers: shared hit=23  Planning Time: 0.250 ms  Execution Time: 8.779 ms<\/code><\/pre>\n<p>  \u0421 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0438 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u0440\u0438\u0433\u0440\u0430\u043c\u043c, \u0438 \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043d\u0430 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/27\/2493\/\"><b>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432<\/b><\/a><br \/>  \u0412 PostgreSQL \u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u201c\u043a\u0430\u0440\u043a\u0430\u0441\u201d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0435\u0440\u0435\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u043e\u0438\u0441\u043a\u0430, \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430\u043c\u0438, \u0436\u0443\u0440\u043d\u0430\u043b\u043e\u043c WAL. \u0410 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0442\u0438\u043f\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432.<\/p>\n<p>  \u0414\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u044b \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u043d\u0435 \u043c\u043e\u0433\u043b\u0438 \u0438\u043c\u0435\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f GiST-\u0438\u043d\u0434\u0435\u043a\u0441 \u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 <code>tsvector_ops<\/code> (\u043e \u043a\u043b\u0430\u0441\u0441\u0430\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 GiST <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/333878\/\">\u0437\u0434\u0435\u0441\u044c<\/a>). \u042d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e, \u0430 \u0434\u043b\u0438\u043d\u0430 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0431\u044b\u043b\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0430 (124 \u0431\u0430\u0439\u0442\u0430). \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043b\u0438\u043d\u0443 \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u044f\u0432\u043d\u043e, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0431\u0430\u043b\u0430\u043d\u0441\u043e\u043c \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c\u044e (\u0447\u0438\u0441\u043b\u043e\u043c \u0445\u0435\u0448-\u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439):<\/p>\n<pre><code class=\"pgsql\">CREATE INDEX ON mail_messages USING gist(tsv tsvector_ops(siglen=1024));<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0438 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 GiST, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e, \u0447\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c hstore, intarray, ltree \u0438 pg_trgm.<br \/>  \u041d\u043e \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f, \u0440\u0430\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u0442\u0435\u0432\u0430\u043b\u043e\u0441\u044c \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435, \u2014 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c JSONPath-\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 GIN-\u0438\u043d\u0434\u0435\u043a\u0441, \u0447\u0442\u043e\u0431\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0432\u0435\u0441\u044c JSON-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u0443\u044e \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u044c. \u0412\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0440\u0430\u0434\u0438\u043a\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432. \u041d\u043e \u044d\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0435\u0449\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442.<\/p>\n<p>  \u0418\u0434\u0435\u044f \u041e\u043b\u0435\u0433\u0430 \u0411\u0430\u0440\u0442\u0443\u043d\u043e\u0432\u0430, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u041d\u0438\u043a\u0438\u0442\u044b \u0413\u043b\u0443\u0445\u043e\u0432\u0430 \u0438 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430 \u041a\u043e\u0440\u043e\u0442\u043a\u043e\u0432\u0430 (\u0432\u0441\u0435 \u0442\u0440\u043e\u0435 Postgres Professional).<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/23\/2056\/\"><b>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &lt;-&gt; (box, point)<\/b><\/a><br \/>  \u0414\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 kNN \u0434\u043b\u044f <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/333878\/\">GiST<\/a> \u0438 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/337502\/\">SP-GiST<\/a>. \u0412 PG12 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 <code>point<\/code> \u0438 <code>box<\/code> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f <code>&lt;-&gt;(point, box)<\/code>, \u0438 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u043a\u043e\u0440\u044f\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438 GiST and SP-GiST. \u041d\u043e \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u0439 \u0435\u043c\u0443 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>&lt;-&gt;(box, point)<\/code> \u043d\u0435 \u0431\u044b\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d, \u0445\u043e\u0442\u044f <code>box<\/code> \u0443\u0436\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043b \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u2014 \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0438 \u043a\u0440\u0443\u0433\u043e\u0432.<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE points(point point); CREATE TABLE boxes(box box); INSERT INTO points VALUES('1,2','3,4'); INSERT INTO boxes VALUES(box(point(3,4),point(5,6)), box(point(13,14),point(15,16)));<\/code><\/pre>\n<p>  \u0412 PG12:  <\/p>\n<pre><code class=\"pgsql\">SELECT p.point, b.box, b.box  &lt;-&gt; p.point distance FROM points AS p, boxes AS b ORDER BY distance;<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\u041e\u0428\u0418\u0411\u041a\u0410:  \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442: box &lt;-&gt; point<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u0442\u043e \u0432\u0441\u0451 \u043e\u043a:<\/p>\n<pre><code class=\"pgsql\">SELECT p.point, b.box, p.point  &lt;-&gt; b.box distance FROM points AS p, boxes AS b ORDER BY distance;<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\"> point |       box       |      distance -------+-----------------+--------------------  (1,2) | (5,6),(3,4)     | 2.8284271247461903  (2,1) | (5,6),(3,4)     | 3.1622776601683795  (1,2) | (15,16),(13,14) | 16.970562748477143  (2,1) | (15,16),(13,14) | 17.029386365926403<\/code><\/pre>\n<p>  \u0410 \u0432 PG13:<\/p>\n<pre><code class=\"pgsql\">SELECT p.point, b.box, b.box  &lt;-&gt; p.point distance FROM points AS p, boxes AS b ORDER BY distance;<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\"> point |       box       |      distance -------+-----------------+--------------------  (1,2) | (5,6),(3,4)     | 2.8284271247461903  (2,1) | (5,6),(3,4)     | 3.1622776601683795  (1,2) | (15,16),(13,14) | 16.970562748477143  (2,1) | (15,16),(13,14) | 17.029386365926403<\/code><\/pre>\n<p>  \u0418\u043d\u0434\u0435\u043a\u0441\u044b GiST \u0438 SP-GiST \u0431\u0443\u0434\u0443\u0442 \u0443\u0441\u043a\u043e\u0440\u044f\u0442\u044c\u0441\u044f \u0438 \u043d\u0430 \u044d\u0442\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432 PG13, \u0435\u0441\u043b\u0438 \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c:<\/p>\n<pre><code class=\"pgsql\">SELECT count(*) FROM pg_operator WHERE oprname = '&lt;-&gt;';<\/code><\/pre>\n<pre><code class=\"plaintext\"> count  -------     28<\/code><\/pre>\n<p>  \u0430 \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e \u0436\u0435 \u0432 PG12, \u043f\u043e\u043b\u0443\u0447\u0438\u043c 20 \u0437\u0430\u043f\u0438\u0441\u0435\u0439: \u0432 13-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043f\u043e\u043b\u043d\u0438\u043b\u0441\u044f \u0430\u0436 8 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c\u0438.<\/p>\n<h3>JSON<\/h3>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/25\/2133\/\"><b>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 .datetime() \u0434\u043b\u044f jsonpath<\/b><\/a><\/p>\n<p>  \u042d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0435\u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0438\u0445 \u043f\u0430\u0442\u0447\u0435\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/448612\/\">\u043f\u0430\u0442\u0447\u0435\u0439 JSONPath<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u0434\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u043a \u0432\u044b\u0445\u043e\u0434\u0443 PG12. \u0427\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 JSON\/SQL. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0431\u044b\u043b\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0435\u0440\u0438\u0438 \u043f\u0430\u0442\u0447\u0435\u0439 JSONPath \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f immutable, \u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u043f\u043e\u044f\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0435\u0441\u0441\u0438\u0438.<\/p>\n<p>  \u0412 \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043c\u044b \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c immutable-\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u0440\u043e non-immutable \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f\u0445. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0432 \u044d\u0442\u043e\u043c \u043f\u0430\u0442\u0447\u0435 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u043e\u043c _tz, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445 \u0441 timezone.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/26\/2323\/\"><b>\u041d\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u2014 jsonb_set_lax function<\/b><\/a><\/p>\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435 lax \u044d\u0442\u043e \u043d\u0435\u0441\u0442\u0440\u043e\u0433\u0438\u0439 (\u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 strict) \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441 jsonb. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u0432 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u043e\u0434\u0438\u043d \u0438\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442, \u0440\u0430\u0432\u0435\u043d NULL. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0441\u0442\u0440\u043e\u0433\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u2014 jsonb_set() \u2014 \u0443 \u043d\u0435\u0435 \u0435\u0441\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 NULL. \u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b: use_json_null \/ raise_exception \/ return_target \/ delete_key. \u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u044b \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/24\/2011\/\"><b>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 jsonb-\u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/b><\/a><\/p>\n<p>  \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e <a href=\"http:\/\/www.postgresql.org\/message-id\/7c417f90-f95f-247e-ba63-d95e39c0ad14@postgrespro.ru\">\u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e<\/a>, \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0443\u0441\u0438\u043b\u0438\u044f\u043c\u0438 \u041d\u0438\u043a\u0438\u0442\u044b \u0413\u043b\u0443\u0445\u043e\u0432\u0430 (Postgres Professional). \u041d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0443\u043d\u043a\u0442 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e: \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0438\u0437\u043e\u0431\u0438\u043b\u0438\u0435 \u0438\u0445 \u0440\u0430\u0437\u0434\u0443\u0435\u0442 \u0438 \u0442\u0430\u043a \u043d\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e; \u0430 \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u0441\u0430\u044e\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0438 \u043d\u0435 \u0432\u0441\u044f\u043a\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0438\u0448\u044c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u043d\u0438\u0445: <\/p>\n<ol>\n<li>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f JsonbExtractScalar();<\/li>\n<li>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 #&gt;&gt;, \u0444\u0443\u043d\u043a\u0446\u0438\u0438 jsonb_each_text(), jsonb_array_elements_text();<\/li>\n<li>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 JsonbContainer \u0432 get_jsonb_path_all();<\/li>\n<li>\u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 (fetch) \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430 \u0438\u0437 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u0430 JsonbIterator \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u0430 \u043d\u0430 \u043b\u0435\u0433\u043a\u0438\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 JsonbContainerIsXxx();<\/li>\n<li>\u0411\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u0435 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 \u2014 findJsonbKeyInObject();<\/li>\n<li>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 findJsonbValueFromContainer() \u0438 getIthJsonbValueFromContainer();<\/li>\n<li>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f get_jsonb_path_all(), \u043e\u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440;<br \/>  \u041f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d \u043a\u043e\u0434 JsonbValueAsText.<\/li>\n<\/ol>\n<p>  <i>\u041a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, \u0437\u0434\u0435\u0441\u044c \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e \u043f\u0430\u0442\u0447\u0430\u0445 SQL\/JSON: JSON_TABLE \u0438 SQL\/JSON: functions. \u041c\u044b \u0436\u0434\u0430\u043b\u0438 \u0438 \u043d\u0430\u0434\u0435\u044f\u043b\u0438\u0441\u044c \u0438\u0445 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0447\u0435\u043d\u043d\u044b\u043c\u0438. \u0423\u0432\u044b, \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e. \u041f\u0430\u0442\u0447\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u044e\u0442 \u043c\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u043e\u0432. \u041d\u0430\u0434\u0435\u0435\u043c\u0441\u044f \u043d\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0435 \u0432 PG14. \u0410 \u043f\u043e\u043a\u0430 JSONPath \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d\u043e\u0447\u0435\u0441\u0442\u0432\u0435.<\/i><\/p>\n<h3>\u0423\u0442\u0438\u043b\u0438\u0442\u044b \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f<\/h3>\n<p>  <\/p>\n<h4>pgbench<\/h4>\n<p>  \u0423\u0442\u0438\u043b\u0438\u0442\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430 \u0441\u0435\u0440\u0438\u044e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0439. \u041f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c <a href=\"https:\/\/commitfest.postgresql.org\/23\/2085\/\">\u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/a> \u0437\u0430\u0434\u0430\u0447 \u043d\u0430 \u0444\u0430\u0437\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0431\u043e\u043b\u0435\u0435 <a href=\"https:\/\/commitfest.postgresql.org\/26\/2363\/\">\u043d\u0430\u0433\u043b\u044f\u0434\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434<\/a>, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c <a href=\"https:\/\/commitfest.postgresql.org\/23\/2089\/\">\u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u043e\u0434 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432<\/a>, \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 <a href=\"https:\/\/commitfest.postgresql.org\/25\/2217\/\">\u043f\u043e \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435<\/a> \u0441\u0447\u0435\u0442\u043e\u0432.<\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>\\aset<\/code>, \u043f\u043e\u0445\u043e\u0436\u0443\u044e \u043d\u0430 <code>\\gset<\/code>, \u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0443\u044e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0437\u0430 \u043e\u0434\u0438\u043d \u0440\u0430\u0437. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u043e\u0431\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code>one<\/code> \u0438 <code>two<\/code>:  <\/p>\n<pre><code class=\"pgsql\">SELECT 1 AS one \\; SELECT 2 AS two \\aset<\/code><\/pre>\n<p>  <\/p>\n<h4>pg_dump<\/h4>\n<p>  pg_dump \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f <a href=\"https:\/\/commitfest.postgresql.org\/27\/2208\/\">\u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446<\/a>. \u0427\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>--include-foreign-data<\/code> \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d\u044b.<\/p>\n<p>  \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0430\u043a\u043e\u0439 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e. \u0414\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u0432\u043f\u043e\u043b\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u0440\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438. \u0418\u043b\u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u0435\u043d\u0438\u0435, \u043d\u043e \u043d\u0435 \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<h4>psql<\/h4>\n<p>  \u0421\u0435\u0440\u0438\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0430\u0442\u0447\u0435\u0439 \u0434\u0435\u043b\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0432 psql \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e\u0439:<\/p>\n<ul>\n<li>\u0423\u043b\u0443\u0447\u0448\u0435\u043d\u043e \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u043e \u0442\u0430\u0431\u0443\u043b\u044f\u0446\u0438\u0438 \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434.<\/li>\n<li>\u0412 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a <code>\\echo<\/code>, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 STDOUT, \u043d\u043e\u0432\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <a href=\"https:\/\/commitfest.postgresql.org\/23\/2100\/\"><code>\\warn<\/code><\/a> \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u043e\u0448\u0438\u0431\u043e\u043a (STDERR).<\/li>\n<li>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 <code>\\d<\/code> <a href=\"https:\/\/commitfest.postgresql.org\/23\/2110\/\">\u0434\u043b\u044f toast-\u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/a> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0438\u043d\u0434\u0435\u043a\u0441\u0435 \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435. \u0410 \u0434\u043b\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043f\u043e \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>\\d+<\/code> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0445 \u0441\u0435\u043a\u0446\u0438\u0439 \u0441 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430\u043c\u0438.<\/li>\n<li>\u0412 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 <code>\\dt+<\/code> <a href=\"https:\/\/commitfest.postgresql.org\/23\/2107\/\">\u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u00abPersistence\u00bb<\/a> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0435\u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u043c\u0438 (unlogged) \u0438\u043b\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 (permanent).<\/li>\n<li>\u041e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>\\e<\/code> \u0437\u0430\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/commitfest.postgresql.org\/25\/2321\/\">\u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d<\/a>, \u0435\u0441\u043b\u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0435 \u0441\u0442\u0430\u0432\u0438\u0442\u044c <code>;<\/code> (\u0438\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>\\g*<\/code>). \u0421\u0435\u0439\u0447\u0430\u0441, \u043f\u043e\u0441\u043b\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0438\u0437 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0432 \u043e\u043a\u043d\u043e psql \u043d\u0435\u043b\u044c\u0437\u044f \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/li>\n<li>\u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0431\u0443\u0434\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code>PROMPT1<\/code> \u0438 <code>PROMPT2<\/code> <a href=\"https:\/\/commitfest.postgresql.org\/27\/2427\/\">\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0441\u043f\u0435\u0446\u0441\u0438\u043c\u0432\u043e\u043b<\/a> <code>%x<\/code>.<\/li>\n<li><a href=\"https:\/\/commitfest.postgresql.org\/27\/1689\/\">\u041d\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/a> \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \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 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u0430: <code>\\dAc<\/code>, <code>\\dAf<\/code>, <code>\\dAo<\/code>, <code>\\dAp<\/code><\/li>\n<li>\u0412 <code>\\g<\/code> \u0442\u0435\u043f\u0435\u0440\u044c <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=b63c293bcbd7439f883cd4cf748f6755df0fbb3c\">\u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c<\/a> \u0432 \u0441\u043a\u043e\u0431\u043a\u0430\u0445 \u043b\u044e\u0431\u044b\u0435 \u043e\u043f\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 <code>\\pset<\/code>. \u041e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443.<\/li>\n<\/ul>\n<h4>libpq<\/h4>\n<p>  \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a PostgreSQL:  <\/p>\n<ul>\n<li><a href=\"https:\/\/commitfest.postgresql.org\/24\/1769\/\">\u0423\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0430 \u043d\u0435\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c<\/a> \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 host \u0438 hostadr \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0430\u044f \u0441 \u044d\u0442\u0438\u043c \u043d\u0435\u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>\\conninfo<\/code> \u0443\u0442\u0438\u043b\u0438\u0442\u044b psql.<\/li>\n<li>\u0415\u0441\u043b\u0438 \u043a\u043b\u044e\u0447 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u0442\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435. \u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <a href=\"https:\/\/commitfest.postgresql.org\/26\/2341\/\">sslpassword<\/a> \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043a\u043b\u044e\u0447 \u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e.<\/li>\n<li>\u0414\u0432\u0430 \u043d\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <a href=\"https:\/\/commitfest.postgresql.org\/26\/2368\/\">sslminprotocolversion \u0438 sslmaxprotocolversion<\/a> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0437\u0430\u0434\u0430\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 SSL\/TCL, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.<\/li>\n<\/ul>\n<p>  <\/p>\n<h4>reindexdb<\/h4>\n<p>  \u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <a href=\"https:\/\/commitfest.postgresql.org\/23\/2193\/\">&#8212;jobs<\/a> \u0443\u0442\u0438\u043b\u0438\u0442\u044b reindexdb \u0437\u0430\u0434\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0443\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u044b.<\/p>\n<h4>pg_rewind<\/h4>\n<p>  \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u043f\u043e\u043d\u0435\u043c\u043d\u043e\u0433\u0443 \u0441\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f, \u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f.<br \/>  \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, pg_rewind <a href=\"https:\/\/commitfest.postgresql.org\/24\/2106\/\">\u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u0442<\/a> \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f (\u043a\u0430\u043a \u044d\u0442\u043e \u0443\u043c\u0435\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c pg_basebackup), \u0430 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430, \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u0431\u044b\u043b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 (\u0440\u0430\u043d\u044c\u0448\u0435 \u044d\u0442\u043e \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e).<\/p>\n<p>  \u0410 \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, pg_rewind \u043d\u0430\u0443\u0447\u0438\u043b\u0430\u0441\u044c <a href=\"https:\/\/commitfest.postgresql.org\/27\/1849\/\">\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0430\u0440\u0445\u0438\u0432\u043e\u043c WAL<\/a>.<br \/>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u0447\u043a\u0443 \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f WAL \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438, \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443\u0442\u0438\u043b\u0438\u0442\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0432\u0441\u0435 WAL-\u0444\u0430\u0439\u043b\u044b, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438. \u0415\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 WAL-\u0444\u0430\u0439\u043b\u044b \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0440\u0430\u043d\u044c\u0448\u0435 \u043d\u0435 \u043c\u043e\u0433\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443.<\/p>\n<p>  \u0421 \u044d\u0442\u0438\u043c \u043f\u0430\u0442\u0447\u0435\u043c \u0410\u043b\u0435\u043a\u0441\u0435\u044f \u041a\u043e\u043d\u0434\u0440\u0430\u0442\u043e\u0432\u0430(Postgres Professional) pg_rewind \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0435 WAL-\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0438\u0437 \u0430\u0440\u0445\u0438\u0432\u0430 \u0436\u0443\u0440\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 restore_command, \u0435\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u043d \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u044e\u0447 -c \u0438\u043b\u0438 &#8212;restore-target-wal.<\/p>\n<h4>pg_waldump<\/h4>\n<p>  pg_waldump \u0431\u0443\u0434\u0435\u0442 <a href=\"https:\/\/commitfest.postgresql.org\/25\/2105\/\">\u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c<\/a> \u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438.<\/p>\n<h4>amcheck<\/h4>\n<p>  \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 amcheck \u043d\u0430\u0443\u0447\u0438\u043b\u043e\u0441\u044c <a href=\"https:\/\/commitfest.postgresql.org\/27\/2140\/\">\u043b\u0443\u0447\u0448\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f<\/a> \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0445 \u0442\u0438\u043f\u0430 B-\u0434\u0435\u0440\u0435\u0432\u043e. <br \/>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0436\u0443\u0440\u043d\u0430\u043b\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043e \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445 \u0431\u0443\u0434\u0443\u0442 <a href=\"https:\/\/commitfest.postgresql.org\/23\/2171\/\">\u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0438 \u0442\u0430\u0431\u043b\u0438\u0446<\/a>.<\/p>\n<h4>pageinspect<\/h4>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>heap_tuple_infomask_flags<\/code> \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f pageinspect <a href=\"https:\/\/commitfest.postgresql.org\/24\/2250\/\">\u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439<\/a> <code>infomask<\/code> \u0438 <code>infomask2<\/code>, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>heap_page_items<\/code>. \u041f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u0440\u0438 \u0440\u0430\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<h4>postgres_fdw<\/h4>\n<p>  \u0421\u0443\u043f\u0435\u0440\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u043d \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043c\u043e\u0436\u0435\u0442 <a href=\"https:\/\/commitfest.postgresql.org\/26\/2340\/\">\u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c<\/a> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u043f\u0430\u0440\u043e\u043b\u044f:<\/p>\n<pre><code class=\"pgsql\">ALTER USER MAPPING FOR \u043d\u0435\u0441\u0443\u043f\u0435\u0440\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c SERVER \u0441\u0435\u0440\u0432\u0435\u0440     OPTIONS (ADD password_required 'false');<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/commitfest.postgresql.org\/26\/2342\/\">sslkey \u0438 sslcert<\/a>.<\/p>\n<h4>adminpack<\/h4>\n<p>  \u0412 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 adminpack \u043d\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u2014 <a href=\"https:\/\/commitfest.postgresql.org\/24\/2250\/\"><code>pg_file_sync<\/code><\/a>. \u0421 \u0435\u0451 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c fsync \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u043e\u0432, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043d\u0430 \u0434\u0438\u0441\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0447\u0435\u0440\u0435\u0437 <code>pg_file_write<\/code> \u0438\u043b\u0438 <code>COPY TO<\/code>.<\/p>\n<h3>\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433<\/h3>\n<p>  <\/p>\n<h4>pg_stat_slru<\/h4>\n<p>  \u0412 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0431\u0443\u0444\u0435\u0440\u043d\u044b\u0439 \u043a\u0435\u0448, \u043d\u043e \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0440\u0443\u0433\u0438\u0445, \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0445, \u043a\u0435\u0448\u0435\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439). \u0414\u043b\u044f \u043d\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u044f \u043d\u0430\u0438\u043c\u0435\u043d\u0435\u0435 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 (simple least-recently-used, \u0438\u043b\u0438 SLRU). \u0414\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0442\u0430\u043a\u0438\u0435 \u043a\u0435\u0448\u0438 \u201c\u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438\u201d, \u043d\u043e \u043d\u0430\u0437\u0440\u0435\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0445 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u044f\u0434\u0440\u0430 PostgreSQL, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0432 \u043d\u0438\u0445 \u043c\u0435\u043d\u044f\u0442\u044c. \u0421 \u044d\u0442\u043e\u0439 \u0438 \u0446\u0435\u043b\u044c\u044e \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043d\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 <a href=\"https:\/\/commitfest.postgresql.org\/27\/2424\/\">pg_stat_slru<\/a>.<\/p>\n<h4>pg_stat_activity<\/h4>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 <code>pg_stat_activity<\/code> <a href=\"https:\/\/commitfest.postgresql.org\/27\/2390\/\">\u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446<\/a> \u2014 <code>leader_id<\/code>. \u0414\u043b\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043e\u043d \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0432\u0435\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u0410 \u0443 \u0432\u0435\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 <code>leader_id<\/code> \u0440\u0430\u0432\u0435\u043d \u043d\u043e\u043c\u0435\u0440\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, <code>pid<\/code>. <br \/>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u043a\u0430\u043a\u0438\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435:<\/p>\n<pre><code class=\"pgsql\">SELECT query, leader_pid,      array_agg(pid) filter(WHERE leader_pid != pid) AS members   FROM pg_stat_activity  WHERE leader_pid IS NOT NULL  GROUP BY query, leader_pid;<\/code><\/pre>\n<p>  \u0415\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f. \u0414\u043e\u0431\u0430\u0432\u0438\u043b\u0438 <a href=\"https:\/\/commitfest.postgresql.org\/27\/2478\/\">\u0434\u0432\u0430 \u043d\u043e\u0432\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f<\/a>: <code>BackupWaitWalArchive<\/code> \u0438 <code>RecoveryPause<\/code>. \u0410 \u0434\u0432\u0443\u043c \u0434\u0440\u0443\u0433\u0438\u043c \u0434\u0430\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0447\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430: <code>RecoveryWalStream -&gt; RecoveryRetrieveRetryInterval<\/code>, <code>RecoveryWalAll -&gt; RecoveryWalStream<\/code>.<\/p>\n<p>  \u0418 \u0435\u0449\u0435 <a href=\"https:\/\/commitfest.postgresql.org\/27\/2475\/\">\u0434\u0432\u0430 \u043d\u043e\u0432\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043d\u0430 \u0440\u0435\u043f\u043b\u0438\u043a\u0435<\/a>: <code>RecoveryConflictSnapshot<\/code> (\u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u0441 VACUUM, \u0443\u0434\u0430\u043b\u0438\u0432\u0448\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u0442\u0440\u043e\u043a) \u0438 <code>RecoveryConflictTablespace<\/code> (\u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430).<\/p>\n<h4>pg_stat_statements<\/h4>\n<p>  \u0414\u043e \u0441\u0438\u0445 \u043f\u043e\u0440, \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <code>pg_stat_statements<\/code> \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441 \u0444\u0440\u0430\u0437\u043e\u0439 <code>FOR UPDATE<\/code> \u0438 \u0431\u0435\u0437 \u044d\u0442\u043e\u0439 \u0444\u0440\u0430\u0437\u044b \u043a\u0430\u043a \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0437\u0430\u043f\u0440\u043e\u0441. \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441 <code>FOR UPDATE<\/code> <a href=\"https:\/\/commitfest.postgresql.org\/23\/1974\/\">\u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e<\/a>.<\/p>\n<p>  \u0423\u0432\u0435\u043b\u0438\u0447\u0438\u043b\u043e\u0441\u044c \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u041e\u0442\u043d\u044b\u043d\u0435 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445 \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434, \u043d\u043e \u0438 <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=6b466bf5f2bea0c89fab54eef696bcfc7ecdafd7\">\u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u0436\u0443\u0440\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0437\u0430\u043f\u0438\u0441\u044f\u043c<\/a>. \u041d\u043e\u0432\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f: <code>wal_bytes<\/code> \u2014 \u043e\u0431\u044a\u0435\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, <code>wal_records<\/code> \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, <code>wal_num_fpw<\/code> \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 (full page writes).<\/p>\n<p>  \u042d\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=df3b181499\">\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435<\/a> \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f WAL. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0435\u043f\u0435\u0440\u044c \u0438 <code>EXPLAIN<\/code> \u0441 \u043d\u043e\u0432\u043e\u0439 \u043e\u043f\u0446\u0438\u0435\u0439 <code>WAL<\/code> \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE t (id int); EXPLAIN (ANALYZE, WAL, COSTS OFF, TIMING OFF, SUMMARY OFF)     INSERT INTO t VALUES(1);<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">              QUERY PLAN               --------------------------------------  Insert on t (actual rows=0 loops=1)    WAL:  records=1  bytes=59    -&gt;  Result (actual rows=1 loops=1)<\/code><\/pre>\n<p>  \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <code>auto_explain<\/code>, <code>VACUUM<\/code> \u0441 <code>VERBOSE<\/code>, \u0438 <code>autovacuum<\/code> \u0442\u043e\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043c\u044b WAL.<\/p>\n<p>  \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043a <code>pg_stat_statements<\/code>. \u0415\u0441\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <a href=\"https:\/\/commitfest.postgresql.org\/27\/1999\/\">pg_stat_statements.track_planning<\/a>, \u0442\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0430\u044f\u0441\u044f \u043a \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0443: \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0439 \u043f\u043b\u0430\u043d\u0430; \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f; \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u0423\u0447\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0443, \u043d\u0430\u0448\u0435\u043b \u0441\u0432\u043e\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0435\u0449\u0435 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0430\u0442\u0447\u0435, \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0435\u043c\u0443\u0441\u044f \u043a <code>pg_stat_statements<\/code>. <code>EXPLAIN<\/code> \u0441 \u043e\u043f\u0446\u0438\u0435\u0439 <code>BUFFERS<\/code> \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c <a href=\"https:\/\/commitfest.postgresql.org\/27\/2360\/\">\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0443\u0444\u0435\u0440\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a>:<\/p>\n<pre><code class=\"pgsql\">EXPLAIN (ANALYZE, BUFFERS, COSTS OFF, TIMING OFF)      SELECT * FROM pg_class;<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">                   QUERY PLAN                    ------------------------------------------------  Seq Scan on pg_class (actual rows=386 loops=1)    Buffers: shared hit=9 read=4  Planning Time: 0.782 ms    Buffers: shared hit=103 read=11  Execution Time: 0.219 ms<\/code><\/pre>\n<p>  <\/p>\n<h4>\u0416\u0443\u0440\u043d\u0430\u043b<\/h4>\n<p>  <\/p>\n<ul>\n<li>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>log_statement_sample_rate<\/code> \u0442\u0435\u043f\u0435\u0440\u044c <a href=\"https:\/\/commitfest.postgresql.org\/25\/2312\/\">\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0434\u043e\u043b\u044e \u043a\u043e\u043c\u0430\u043d\u0434 SQL, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0432 \u0436\u0443\u0440\u043d\u0430\u043b<\/a>, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 <code>log_min_duration_sample<\/code>(\u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440).<br \/>  \u041e\u0442\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <code>log_min_duration_statement<\/code> \u0438\u043c\u0435\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442, \u0442.\u0435. \u0435\u0441\u043b\u0438 <code>log_min_duration_statement<\/code> \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c <code>log_min_duration_sample<\/code>, \u0442\u043e \u0432 \u0436\u0443\u0440\u043d\u0430\u043b \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043d\u0435\u0432\u0437\u0438\u0440\u0430\u044f \u043d\u0430 \u0434\u043e\u043b\u044e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0432 <code>log_statement_sample_rate<\/code>.<br \/>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>log_transaction_sample_rate<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0434\u043e\u043b\u044e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439, \u0432\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u0436\u0443\u0440\u043d\u0430\u043b, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/li>\n<li>\u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438, \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0432\u0448\u0438\u043c\u0438\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439 (\u0447\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c log_min_error_statement), \u0432 \u0436\u0443\u0440\u043d\u0430\u043b \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438. \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u0445 \u0432 \u0436\u0443\u0440\u043d\u0430\u043b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <a href=\"https:\/\/commitfest.postgresql.org\/26\/1934\/\"><code>log_parameter_max_length_on_error<\/code><\/a>. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d \u0440\u0430\u0432\u0435\u043d 0, \u0447\u0442\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u044b\u0432\u043e\u0434.<br \/>  \u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 <code>log_parameter_max_length_on_error<\/code> \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u043c \u0440\u0430\u0441\u0445\u043e\u0434\u0430\u043c \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 SQL, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0445, \u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0447\u043d\u043e \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438.<br \/>  \u0414\u043b\u044f \u043d\u0435 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 (\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0436\u0443\u0440\u043d\u0430\u043b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 <code>log_statements<\/code> \u0438 <code>log_duration<\/code>) \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440: <code>log_parameter_max_length<\/code>, \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435.<\/li>\n<li>\u0412 \u0436\u0443\u0440\u043d\u0430\u043b \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/commitfest.postgresql.org\/27\/2465\/\">\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0442\u0438\u043f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/a> (<code>pg_stat_activity.backend_type<\/code>). \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 <code>log_line_prefix<\/code> \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u0441\u043f\u0435\u0446\u0441\u0438\u043c\u0432\u043e\u043b <code>%b<\/code>. \u0410 \u0435\u0441\u043b\u0438 \u0436\u0443\u0440\u043d\u0430\u043b \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 csv (<code>log_destination=csvlog<\/code>), \u0442\u043e \u0441\u0442\u043e\u043b\u0431\u0435\u0446 <code>backend_type<\/code> \u0442\u0443\u0434\u0430 \u0443\u0436\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d.<\/li>\n<\/ul>\n<h4>\u0425\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/h4>\n<p>  \u041d\u043e\u0432\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f <code>pg_stat_progress_analyze<\/code> \u0438 <code>pg_stat_progress_basebackup<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0445\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f <a href=\"https:\/\/commitfest.postgresql.org\/26\/2164\/\">\u0441\u0431\u043e\u0440\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438<\/a> \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>ANALYZE<\/code> \u0438 <a href=\"https:\/\/commitfest.postgresql.org\/27\/2435\/\">\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438<\/a> \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 <code>pg_basebackup<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<h3>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f<\/h3>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/24\/1664\/\"><b>\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f immutable-\u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0438 FROM<\/b><\/a><br \/>  \u041f\u0430\u0442\u0447 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430 \u041a\u0443\u0437\u044c\u043c\u0435\u043d\u043a\u043e\u0432\u0430 \u0438 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430 \u041f\u0430\u0440\u0444\u0451\u043d\u043e\u0432\u0430 (\u043e\u0431\u0430 \u0438\u0437 Postgres Professional) \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0432 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0432 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0438 <code>FROM<\/code> \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044f\u0432\u043b\u044f\u044e\u0449\u0435\u0439\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>  \u0412\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441 \u043f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u043c:<\/p>\n<pre><code class=\"pgsql\">EXPLAIN (COSTS OFF) SELECT subject, ts_rank_cd(tsv, q) AS rank FROM mail_messages, to_tsquery('english', 'tuple') q WHERE tsv @@ q ORDER BY rank DESC;<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">                              QUERY PLAN                               ------------------------------------------------------------------  Sort    Sort Key: (ts_rank_cd(mail_messages.tsv, '''tuple'''::tsquery)) DESC    -&gt;  Bitmap Heap Scan on mail_messages          Recheck Cond: (tsv @@ '''tuple'''::tsquery)          -&gt;  Bitmap Index Scan on mail_messages_tsv_idx                Index Cond: (tsv @@ '''tuple'''::tsquery)<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043d\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 &#8216;tuple&#8217;::tsquery \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0432 \u0437\u0430\u043f\u0440\u043e\u0441 \u0443\u0436\u0435 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412 \u0432\u0435\u0440\u0441\u0438\u0438 12 \u0431\u044b\u043b\u0430 \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0440\u0443\u0433\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u0430:<\/p>\n<pre><code class=\"pgsql\">EXPLAIN (COSTS OFF) SELECT subject, ts_rank_cd(tsv, q) AS rank                             FROM mail_messages, to_tsquery('english', 'tuple') q WHERE tsv @@ q                             ORDER BY rank DESC;<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">                          QUERY PLAN                          -----------------------------------------------------  Sort    Sort Key: (ts_rank_cd(mail_messages.tsv, q.q)) DESC    -&gt;  Nested Loop          -&gt;  Function Scan on q          -&gt;  Bitmap Heap Scan on mail_messages                Recheck Cond: (tsv @@ q.q)                -&gt;  Bitmap Index Scan on mail_messages_tsv_idx                      Index Cond: (tsv @@ q.q)<\/code><\/pre>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/27\/1124\/\">\u0418\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430<\/a><\/b><\/p>\n<p>  \u0412 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043f\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u043a\u043b\u044e\u0447\u0430\u043c (k1, k2, k3\u2026), \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0437\u043d\u0430\u043d\u0438\u0435\u043c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0443\u0436\u0435 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0438\u0437 \u043f\u0435\u0440\u0432\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, k1 \u0438 k2). \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043d\u043e\u0432\u043e, \u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u0445 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 k1 \u0438 k2, \u0438 \u201c\u0434\u043e\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u201d \u043f\u043e \u043a\u043b\u044e\u0447\u0443 k3.<\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u0441\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0440\u0430\u0441\u043f\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043e\u043a \u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u042d\u0442\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u0430 \u0435\u0449\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0432\u0441\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0434\u0435\u043c\u043e\u0431\u0430\u0437\u0435 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 tickets \u0435\u0441\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0443 ticket_id. \u0414\u0430\u043d\u043d\u044b\u0435, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 \u0438\u043d\u0434\u0435\u043a\u0441\u0430, \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e ticket_id, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443:<\/p>\n<pre><code class=\"pgsql\">EXPLAIN (analyze, costs off, timing off) SELECT * FROM tickets ORDER BY ticket_no, passenger_id;<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">                                  QUERY PLAN                                   ------------------------------------------------------------------------------  Incremental Sort (actual rows=2949857 loops=1)    Sort Key: ticket_no, passenger_id    Presorted Key: ticket_no    Full-sort Groups: 92184 Sort Method: quicksort Memory: avg=31kB peak=31kB    -&gt;  Index Scan using tickets_pkey on tickets (actual rows=2949857 loops=1)  Planning Time: 2.137 ms  Execution Time: 2230.019 ms<\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c enable_incrementalsort. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0437\u0430\u0439\u043c\u0435\u0442 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438:<\/p>\n<pre><code class=\"pgsql\">SET enable_incrementalsort = off; EXPLAIN (analyze, costs off, timing off) SELECT * FROM tickets ORDER BY ticket_no, passenger_id;<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">                              QUERY PLAN                                -----------------------------------------------------------------------  Gather Merge (actual rows=2949857 loops=1)    Workers Planned: 2    Workers Launched: 2    -&gt;  Sort (actual rows=983286 loops=3)          Sort Key: ticket_no, passenger_id          Sort Method: external merge  Disk: 107024kB          Worker 0:  Sort Method: external merge  Disk: 116744kB          Worker 1:  Sort Method: external merge  Disk: 107200kB          -&gt;  Parallel Seq Scan on tickets (actual rows=983286 loops=3)  Planning Time: 3.994 ms  Execution Time: 12291.844 ms<\/code><\/pre>\n<p>  \u0418\u0434\u0435\u044e \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u0435\u0449\u0435 \u0432 2013 \u0433\u043e\u0434\u0443 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u041a\u043e\u0440\u043e\u0442\u043a\u043e\u0432 (Postgres Professional), \u0438 \u0432\u043e\u0442, \u0441\u043f\u0443\u0441\u0442\u044f \u0441\u0435\u043c\u044c \u043b\u0435\u0442 \u043f\u0430\u0442\u0447 \u0431\u044b\u043b \u0434\u043e\u0432\u0435\u0434\u0435\u043d \u0414\u0436\u0435\u0439\u043c\u0441\u043e\u043c \u041a\u043e\u0443\u043b\u043c\u0430\u043d\u043e\u043c \u0434\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e\u043c.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/24\/2145\/\"><b>\u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 TRUNCATE<\/b><\/a><br \/>  \u041f\u0440\u0438 <code>TRUNCATE<\/code> \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 <code>shared_buffers<\/code> \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u0437 \u043e\u0431\u0449\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u0420\u0430\u043d\u044c\u0448\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e\u0441\u044c \u0442\u0440\u0438\u0436\u0434\u044b, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b: MAIN (\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u043b\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445), FSM (\u043a\u0430\u0440\u0442\u0430 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430), VM (\u043a\u0430\u0440\u0442\u0430 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438). \u0421\u0435\u0439\u0447\u0430\u0441 \u043b\u043e\u0433\u0438\u043a\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u0440\u043e\u0439\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0443\u0444\u0435\u0440\u044b \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437. \u041f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 <code>shared_buffers<\/code> \u044d\u0442\u043e \u0434\u0430\u0451\u0442 \u043e\u0449\u0443\u0442\u0438\u043c\u044b\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448. <\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/25\/2135\/\"><b>\u0427\u0430\u0441\u0442\u0438\u0447\u043d\u0430\u044f \u0434\u0435\u043a\u043e\u043c\u043f\u0440\u0435\u0441\u0441\u0438\u044f TOAST<\/b><\/a><br \/>  \u041a\u043e\u0433\u0434\u0430 \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e TOAST, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044f\u0441\u044c \u0435\u0433\u043e \u043a\u0443\u0441\u043e\u0447\u043a\u043e\u043c (slice) \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0438\u043b\u0438 \u0431\u043b\u0438\u0437\u043a\u043e \u043a \u043d\u0430\u0447\u0430\u043b\u0443, \u0442\u043e \u0438 \u0440\u0430\u0437\u0436\u0438\u043c\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430. \u0421\u0436\u0430\u0442\u044b\u0439 TOAST \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438: \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u043a\u0443\u0441\u043e\u0447\u0435\u043a, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u0442, \u0442\u043e \u0440\u0430\u0437\u0436\u0438\u043c\u0430\u0435\u043c \u0438 \u0447\u0438\u0442\u0430\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435. \u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043e \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u043c Google Summer of Code \u0411\u0438\u043d\u0433\u043e \u0411\u0430\u043e (Binguo Bao), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE slicingtest (      id serial PRIMARY KEY,      a text ); INSERT INTO slicingtest (a) SELECT     repeat('1234567890-=abcdefghijklmnopqrstuvwxyz', 1000000) AS a FROM     generate_series(1,100); \\timing SELECT sum(length(substr(a, 0, 20))) FROM slicingtest;<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">Time: 28.123 ms<\/code><\/pre>\n<p>  \u0421 \u043f\u0430\u0442\u0447\u0435\u043c \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0431\u044b\u0441\u0442\u0440\u0435\u0435:<\/p>\n<pre><code class=\"plaintext\">Time: 2.306 ms<\/code><\/pre>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/26\/1774\/\"><b>\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0439 VACUUM<\/b><\/a><br \/>  \u0412 \u0441\u0432\u043e\u0435\u0439 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/486264\/\">\u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443<\/a> \u0415\u0433\u043e\u0440 \u0420\u043e\u0433\u043e\u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0437\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u044d\u0442\u043e\u0442 \u0432\u0430\u0436\u043d\u044b\u0439 \u0448\u0430\u0433 \u0432 \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0438. \u0412\u043a\u0440\u0430\u0442\u0446\u0435: \u00ab\u041f\u0430\u0442\u0447 \u041c\u0430\u0441\u0430\u0445\u0438\u043a\u043e \u0421\u0430\u0432\u0430\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435. \u0421\u0430\u043c\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043e\u0447\u0438\u0449\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c (\u0432\u0435\u0434\u0443\u0449\u0438\u043c) \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c, \u043d\u043e \u0434\u043b\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u043e\u043d \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441. \u0412 \u0440\u0443\u0447\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438; \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044d\u0442\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c.\u00bb<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/27\/2093\/\"><b>\u0410\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043f\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443<\/b><\/a><br \/>  \u0417\u0430 \u044d\u0442\u043e\u0442 \u043f\u0430\u0442\u0447 (\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0442\u0430\u043a\u0436\u0435 \u0438 \u043a\u0430\u043a \u0411\u0435\u0440\u0441\u0435\u0440\u043a-\u0430\u0432\u0442\u043e\u0432\u0430\u043a\u0443\u0443\u043c) \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u0442\u044c \u0414\u043e\u0440\u043e\u0444\u0435\u044f \u041f\u0440\u043e\u043b\u0435\u0441\u043a\u043e\u0432\u0441\u043a\u043e\u0433\u043e, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b: \u0430\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 append-only-\u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u043d\u0438\u0445 \u043d\u0435\u0442 \u00ab\u043c\u0435\u0440\u0442\u0432\u044b\u0445\u00bb \u0432\u0435\u0440\u0441\u0438\u0439 \u0441\u0442\u0440\u043e\u043a. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0440\u0442\u0430 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0434\u0435\u043b\u0430\u044f \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (index-only scans), \u0430 \u043a\u043e\u0433\u0434\u0430 \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439, \u0435\u0439 \u043d\u0443\u0436\u043d\u043e \u043e\u0434\u043d\u043e\u043c\u043e\u043c\u0435\u043d\u0442\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b. \u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u0430 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430: \u0430\u0432\u0442\u043e\u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438 \u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a. \u041f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0434\u0432\u0430 \u043d\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (<code>autovacuum_vacuum_insert_threshold<\/code> \u0438 <code>autovacuum_vacuum_insert_scale_factor<\/code>), \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0434\u043b\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439 (<code>autovacuum_vacuum_threshold<\/code> \u0438 <code>autovacuum_vacuum_scale_factor<\/code>).<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/27\/2201\/\"><b>\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u043f\u0440\u0438 \u0445\u0435\u0448-\u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438<\/b><\/a><br \/>  \u041f\u0440\u0438 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0445\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u0447\u0435\u043c \u0434\u0443\u043c\u0430\u043b \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0438 \u0447\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 <code>work_mem<\/code>. \u0420\u0430\u043d\u044c\u0448\u0435 \u0442\u0430\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u0430 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440 <code>work_mem<\/code> \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u044b\u0434\u0435\u043b\u044f\u043b\u043e\u0441\u044c \u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0430 OOM Killer. \u0422\u0435\u043f\u0435\u0440\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b <code>work_mem<\/code>, \u0430 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043d\u0430 \u0434\u0438\u0441\u043a\u0435. \u0414\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b: <code>enable_groupingsets_hash_disk<\/code> \u0438 <code>enable_hashagg_disk<\/code>.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/27\/2392\/\"><b>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f UPDATE \u0434\u043b\u044f \u0442\u0430\u0431\u043b\u0438\u0446 \u0441 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u043c\u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u043c\u0438<\/b><\/a><br \/>  \u0412 \u0432\u0435\u0440\u0441\u0438\u0438 12 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u0442\u0440\u043e\u043a\u0438, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0438\u043a\u0430\u043a \u043d\u0430 \u043d\u0438\u0445 \u043d\u0435 \u0432\u043b\u0438\u044f\u043b\u043e. \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u043e (\u0435\u0441\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c \u0438\u0445 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b).<\/p>\n<p>  \u042d\u0442\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446 \u0441 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u043c \u0442\u0438\u043f\u0430 <code>tsvector<\/code>, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>to_tsvector()<\/code> \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u0440\u043e\u0433\u0430\u044f.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/27\/2469\/\"><b>\u0414\u043e\u0441\u0442\u0443\u043f \u0438\u0437 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430 \u043a \u0441\u043f\u0438\u0441\u043a\u0443 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432<\/b><\/a><br \/>  \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0430\u0442\u0447, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <code>TriggerData<\/code> \u0431\u0438\u0442\u043e\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432. \u042d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a <code>tsvector_update_trigger()<\/code> \u0438\u043b\u0438 <code>lo_manage()<\/code>, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u044e\u044e \u0440\u0430\u0431\u043e\u0442\u0443.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/26\/2320\/\"><b>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a \u043f\u0440\u0438 \u043e\u0446\u0435\u043d\u043a\u0435<\/b><\/a><br \/>  \u0412 PG12 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0435 \u0443\u043c\u0435\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439 \u0436\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0434\u0432\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u0430\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432, \u0430 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0438 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430, \u0438 \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432\u0441\u044f \u0438\u043c\u0435\u044e\u0449\u0430\u044f\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f.<\/p>\n<p>  <b><a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=85f6b49c2c53fb1e08d918ec9305faac13cf7ad6\">\u0418\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u044f \u0438 COPY<\/a><\/b> (\u0441\u043c. \u0442\u0430\u043a\u0436\u0435 <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=3ba59ccc896e8877e2fbfb8d4f148904cad5f9b0\">\u044d\u0442\u043e\u0442 \u043f\u0430\u0442\u0447.<\/a>)<br \/>  \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0437\u043c \u0432 PostgreSQL \u0432\u0441\u0435 \u0435\u0449\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u0421 \u043f\u0438\u0448\u0443\u0449\u0438\u043c\u0438 \u0435\u0441\u0442\u044c \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438, \u0438 \u043e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0438\u0445 \u2014 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0445 \u043e\u0434\u043d\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 (\u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432 \u043e\u0431\u0449\u0443\u044e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443). \u0421\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u043d\u0435 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0443\u044e\u0442 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439 \u0436\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u042d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u044f\u0434\u0440\u0430 \u043e\u0441\u043e\u0431\u043e\u0439 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u0438\u043d\u0430\u0447\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u0438 \u0431\u044b \u0432\u0437\u0430\u0438\u043c\u043e\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430\u043c\u0438.<br \/>  \u041d\u043e \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f (relation extension lock), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432 \u043a\u043e\u043d\u0435\u0446 \u0444\u0430\u0439\u043b\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438<\/li>\n<li>\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (page lock), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 GIN-\u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e.<\/li>\n<\/ul>\n<p>  (\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/465263\/\">\u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/a>)<br \/>  \u0422\u0430\u043a\u0438\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u0436\u0435 \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438 \u043e\u0434\u043d\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u2014 \u0447\u0442\u043e \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u0442\u0447. \u0417\u0430\u0442\u043e \u044d\u0442\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u0432\u0437\u0430\u0438\u043c\u043e\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0438\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u043e\u0431\u0449\u0435\u043c-\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u043d\u043e \u044d\u0442\u043e\u0442 \u043f\u0430\u0442\u0447 \u0432\u0430\u0436\u0435\u043d \u0442\u0435\u043c, \u0447\u0442\u043e \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043f\u0440\u043e\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0434\u043e\u0440\u043e\u0433\u0443 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u043c INSERT \u0438 COPY, \u0438 \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u043e\u0434\u043d\u043e \u0438\u0437 \u0443\u0437\u043a\u0438\u0445 \u043c\u0435\u0441\u0442 PostgreSQL \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 (\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043b\u0443\u0448\u0430\u0442\u044c <a href=\"https:\/\/www.youtube.com\/watch?v=_R2-IsKfsUU&amp;list=PL6sRAkPwcKNnwScnpKomNXechZQ3WZe1j&amp;index=71\">\u0432 \u0434\u043e\u043a\u043b\u0430\u0434\u0435 HL++<\/a>).<\/p>\n<h3>\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c<\/h3>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/23\/2159\/\"><b>\u041f\u0440\u043e\u0441\u0442\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 EDH SKIP \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b<\/b><\/a><br \/>  \u0420\u0435\u0447\u044c \u043e\u0431 \u043e\u0442\u043a\u0430\u0437\u0435 \u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0447\u0438\u0441\u0435\u043b EDH (\u042d\u0444\u0435\u043c\u0435\u0440\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u0414\u0438\u0444\u0444\u0438-\u0425\u0435\u043b\u043b\u043c\u0430\u043d\u0430) \u043f\u043e \u0443\u0436\u0435 \u043d\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 SKIP.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/23\/2162\/\"><b>initdb: \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438<\/b><\/a><br \/>  \u0418\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 initdb. \u0422\u0435\u043f\u0435\u0440\u044c \u0432 <code>pg_hba.conf<\/code> \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0432\u043c\u0435\u0441\u0442\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 <code>trust<\/code> \u0431\u0443\u0434\u0435\u0442 <code>peer<\/code> (\u0438\u043b\u0438 md5, \u0435\u0441\u043b\u0438 peer \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f), \u0438 <code>md5<\/code> \u0434\u043b\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0438\u0441\u044c \u0431\u043e\u043b\u0435\u0435 \u043b\u0438\u0431\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0440\u044b: \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u041f\u043e\u0442\u043e\u043c \u0431\u043e\u043b\u0435\u0435 \u0436\u0435\u0441\u0442\u043a\u0438\u0435: <code>scram-sha-256<\/code>. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0440\u0435\u0448\u0438\u043b\u0438 \u043f\u043e\u043a\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c\u0441\u044f <code>peer<\/code> \u0438 <code>md5<\/code>.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/24\/2170\/\"><b>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 explicit_bzero<\/b><\/a><br \/>  \u0412\u0430\u0436\u043d\u044b\u0439 \u043f\u0430\u0442\u0447. \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u041e\u0421 bzero() \u0438 explicit_bzero() \u0432\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0430\u0439\u0442\u044b, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 <code>'\\0'<\/code> (\u0441\u043c. <a href=\"http:\/\/man7.org\/linux\/man-pages\/man3\/bzero.3.html\">\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440<\/a>, \u0432 Linux). \u042d\u0442\u0438 \u043f\u0430\u0442\u0447\u0438 \u043b\u0438\u0448\u044c \u043d\u0430\u0447\u0430\u043b\u043e: \u0435\u0441\u0442\u044c \u043d\u0435\u043c\u0430\u043b\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0433\u0443\u0442 \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u0430\u0440\u043e\u043b\u0438 \u0438 \u0434\u0440\u0443\u0433\u0430\u044f \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f. \u0420\u0435\u0448\u0438\u043b\u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u0442\u0430\u043a\u0438\u0445 \u043c\u0435\u0441\u0442 \u043a\u0430\u043a libpq, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0446\u0435\u043b\u044b\u0439 \u0444\u0430\u0439\u043b \u0441 \u043f\u0430\u0440\u043e\u043b\u044f\u043c\u0438 \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0441\u043b\u0435 \u0447\u0442\u0435\u043d\u0438\u044f .pgpass, \u0438 \u0441 \u0447\u0438\u0441\u0442\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \u0412 be-secure-common.c \u0442\u0435\u043f\u0435\u0440\u044c \u0435\u0441\u0442\u044c \u0437\u0430\u0442\u0438\u0440\u0430\u043d\u0438\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0439 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0444\u0440\u0430\u0437\u044b \u0432 SSL, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 (\u043f\u0443\u0442\u0438) \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/24\/2232\/\"><b>\u0412 libpq \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u00abpassword_protocol\u00bb<\/b><\/a><br \/>  \u042d\u0442\u043e\u0442 \u043f\u0430\u0442\u0447 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 libpq \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u0430\u0440\u043e\u043b\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438. \u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 libpq \u043e\u0442\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043e\u0442 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0441\u043b\u0430\u0431\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>plaintext<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u0433\u043e\u0434\u044f\u0442\u0441\u044f.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/25\/2221\/\"><b>\u041c\u0430\u043d\u0434\u0430\u0442\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043b\u044f TRUNCATE<\/b><\/a><br \/>  \u042d\u0442\u043e\u0442 \u043f\u0430\u0442\u0447 \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043c\u0430\u043d\u0434\u0430\u0442\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c (MAC) \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 TRUNCATE. \u041f\u0440\u0430\u0432\u0430 \u043d\u0430 \u043d\u0435\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c\u0441\u044f \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/sepgsql\">sepgsql<\/a>. <a href=\"https:\/\/github.com\/TresysTechnology\/refpolicy\/wiki\">SELinux Reference Policy<\/a> \u0438 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u044b Linux, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 Redhat, \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 SELinux-\u043c \u043d\u0430 db_table {truncate}. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f sepgsql \u0441 &#8216;deny_unknown&#8217; \u0440\u0430\u0432\u043d\u044b\u043c 1, \u0438 TRUNCATE \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/27\/2451\/\"><b>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f GUC ssl_passphrase_command<\/b><\/a><br \/>  \u041f\u0440\u043e\u0441\u0442\u043e\u0439, \u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u043f\u0430\u0442\u0447. \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 ssl_passphrase_command \u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e superuser. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0437\u0430\u0434\u0430\u0451\u0442 \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u043d\u0438\u044f SSL-\u0444\u0430\u0439\u043b\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430.<\/p>\n<h3>\u041b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h3>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/25\/2303\/\">\u0412\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 libc<\/a><\/b><br \/>  \u0414\u043b\u044f \u043f\u0440\u0430\u0432\u0438\u043b \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 ICU \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u0432\u0435\u0440\u0441\u0438\u0439. \u041f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \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\u0430, \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432) \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 ICU \u0432 \u041e\u0421, \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0439 \u0432\u044b\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043f\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c\u0438 \u0438 \u0438\u0445 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0438\u0442\u044c. \u041f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0438\u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>ALTER COLLATION ... REFRESH VERSION<\/code>, \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 \u0411\u0414 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0432\u044b\u0434\u0430\u044e\u0442\u0441\u044f.<\/p>\n<p>  \u041d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f ICU. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u043e\u043c\u0435\u0440 \u0432\u0435\u0440\u0441\u0438\u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0438 \u0434\u043b\u044f \u043f\u0440\u0430\u0432\u0438\u043b \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 libc:<\/p>\n<pre><code class=\"pgsql\">SELECT collname, collversion FROM pg_collation WHERE collname = 'ru_RU';<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\"> collname | collversion ----------+-------------  ru_RU    | 2.27<\/code><\/pre>\n<p>  \u0427\u0442\u043e \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u041e\u0421. \u041e\u0447\u0435\u043d\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u0432 \u0441\u0432\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 glibc 2.28, \u0433\u0434\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438, \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0438\u0442\u044c.<\/p>\n<p>  \u041d\u043e \u043f\u043e\u043a\u0430 \u043d\u0430 2.28 \u043d\u0435 \u043f\u0435\u0440\u0435\u0448\u043b\u0438, \u0432\u0441\u0451 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e:  <\/p>\n<pre><code class=\"pgsql\">ALTER COLLATION &quot;ru_RU&quot; REFRESH VERSION;<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">NOTICE:  version has not changed ALTER COLLATION<\/code><\/pre>\n<p>  <\/p>\n<h3>\u041f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u0438\u0441\u043a<\/h3>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/23\/2073\/\"><b>Fulltext search for Greek language<\/b><\/a><br \/>  No comments.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/27\/2485\/\"><b>dict_int \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u043c\u0438 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430\u043c\u0438<\/b><\/a><br \/>  \u0412 \u0441\u043b\u043e\u0432\u0430\u0440\u044c-\u0448\u0430\u0431\u043b\u043e\u043d dict_int (\u043e\u043d \u0436\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435) \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u0431\u0438\u0440\u0430\u0442\u044c \u0437\u043d\u0430\u043a \u0443 \u0447\u0438\u0441\u043b\u0430. <\/p>\n<pre><code class=\"pgsql\"> CREATE EXTENSION dict_int; SELECT ts_lexize('intdict', '-123');<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">ts_lexize -----------  {-123} (1 row)<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"pgsql\">ALTER TEXT SEARCH DICTIONARY intdict (ABSVAL = true); SELECT ts_lexize('intdict', '-123');<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">ts_lexize -----------  {123} (1 row)<\/code><\/pre>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043b\u0430\u0441\u044c \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0430\u044f \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430.<\/p>\n<h4>\u0421\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h4>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/27\/2483\/\"><b>\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b BEFORE \u043d\u0430 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435<\/b><\/a><br \/>  \u0412 12 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b <code>BEFORE<\/code> \u043d\u0430 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443. \u041d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u043a\u0446\u0438\u0438 \u2014 \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u043e \u043d\u0435 \u043d\u0430 \u0432\u0441\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u0440\u0430\u0437\u0443. \u0422\u0435\u043f\u0435\u0440\u044c \u0436\u0435 <code>BEFORE FOR EACH ROW<\/code> \u0442\u0440\u0438\u0433\u0433\u0435\u0440, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0435\u043a\u0446\u0438\u0439. \u041d\u043e \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0442\u0440\u0438\u0433\u0433\u0435\u0440 \u043d\u0430 <code>UPDATE<\/code>, \u0442\u043e \u043a\u043b\u044e\u0447 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043d\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0435\u043a\u0446\u0438\u0438.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/27\/2301\/\">\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0432 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/a><\/b><br \/>  \u0420\u0430\u043d\u044c\u0448\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u043e \u043e\u0448\u0438\u0431\u043a\u0443:<\/p>\n<pre><code class=\"pgsql\">CREATE PUBLICATION pub FOR TABLE p;<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">ERROR:  &quot;p&quot; is a partitioned table DETAIL:  Adding partitioned tables to publications is not supported. HINT:  You can add the table partitions individually.<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/27\/2407\/\">\u0423\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0441\u0435\u043a\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e JOIN-\u0430<\/a><\/b><br \/>  \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 11-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0443\u043c\u0435\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e\u0441\u0435\u043a\u0446\u0438\u043e\u043d\u043d\u043e, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u0435\u043a\u0446\u0438\u0439 \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442. \u0422\u0435\u043f\u0435\u0440\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0443\u043b\u0443\u0447\u0448\u0435\u043d: \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0441\u0435\u043a\u0446\u0438\u044f \u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u0435\u043a\u0446\u0438\u044e \u0434\u0440\u0443\u0433\u043e\u0439, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043e\u0434\u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043f\u043e \u0434\u043d\u044f\u043c, \u0430 \u0434\u0440\u0443\u0433\u0430\u044f \u2014 \u043f\u043e \u043c\u0435\u0441\u044f\u0446\u0430\u043c). \u041d\u043e\u0432\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u043b\u044f \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430\u043c \u0438 \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c.<\/p>\n<p>  <b><a href=\"https:\/\/commitfest.postgresql.org\/27\/2278\/\">\u041f\u043e\u0441\u0435\u043a\u0446\u0438\u043e\u043d\u043d\u044b\u0439 FULL OUTER JOIN<\/a><\/b><br \/>  \u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u044b\u0445 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439, \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0441 \u0444\u0440\u0430\u0437\u043e\u0439 <code>USING<\/code>.<\/p>\n<h3>tableam<\/h3>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439, \u043d\u043e \u0442\u0440\u0443\u0434\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u043e\u043a\u0430 \u043d\u0435\u0442 \u0440\u0430\u0434\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0439 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e PostgreSQL 12. \u0413\u043e\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 \u0442\u0438\u043f\u0430 <code>zheap<\/code> \u0438 \u0434\u0440., \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u0442 heap) \u043f\u043e\u043a\u0430 \u043d\u0435\u0442, \u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043d\u0430\u0434 API. <\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/23\/2139\/\"><b>\u0411\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/b><\/a><br \/>  \u0420\u043e\u0431\u0435\u0440 \u0425\u0430\u0430\u0441 (Robert Haas) \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b \u043a\u043e\u0434, \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u0435\u0433\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0445 \u0441\u043b\u043e\u0451\u0432, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c. \u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u0443\u0441\u043e\u043a \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a <code>estimate_rel_size<\/code> \u2014 \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0441\u043b\u043e\u0451\u0432 (forks) \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/23\/2151\/\"><b>\u041c\u0435\u0442\u043e\u0434\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c relcache<\/b><\/a><br \/>  \u042d\u0442\u043e\u0442 \u043f\u0430\u0442\u0447 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0445.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/26\/2120\/\"><b>tableam \u0438 TOAST<\/b><\/a><br \/>  TOAST \u0432 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f <code>heap<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 <a href=\"https:\/\/postgrespro.ru\/docs\/postgrespro\/12\/tableam\">\u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430<\/a> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0439\u0442\u0438 \u0434\u0432\u0443\u043c\u044f \u043f\u0443\u0442\u044f\u043c\u0438: \u043f\u043e\u043c\u043e\u0447\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u043d\u043e\u0432\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0437\u0430\u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0438\u0445 \u0432\u0441\u0442\u0430\u0432\u043a\u0443, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 TOAST \u0438\u043b\u0438 \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 TOAST \u043a\u043e\u0434\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u043c\u0443 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u0434\u043b\u044f PostgreSQL \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u2014 heap. \u0421\u0435\u0440\u0438\u044f \u0438\u0437 5 \u043f\u0430\u0442\u0447\u0435\u0439 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432\u0441\u0442\u0430\u0432\u043a\u0438\/\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\/\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043b\u043e\u0442\u044b \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439 \u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0438\u0434\u0443\u0449\u0438\u043c \u043e\u0431\u043e\u0438\u043c\u0438 \u043f\u0443\u0442\u044f\u043c\u0438.<\/p>\n<h4>fsync<\/h4>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/23\/2172\/\"><b>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a fsync \u0432 pg_receivewal \u0438 pg_recvlogical<\/b><\/a><br \/>  \u0411\u043e\u0440\u044c\u0431\u0430 \u0441 <a href=\"https:\/\/wiki.postgresql.org\/wiki\/Fsync_Errors\">fsync()-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439<\/a> \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f. PostgreSQL \u0432\u0435\u0440\u0438\u0442, \u0447\u0442\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 fsync() \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441\u0431\u0440\u043e\u0448\u0435\u043d\u044b \u043d\u0430 \u0434\u0438\u0441\u043a, \u043d\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 (\u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u041e\u0421) \u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u043e\u0442\u0435\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412 PG13 \u0440\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u043c\u0438 <code>pg_receivewal<\/code> \u0438 <code>pg_recvlogical<\/code>. \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0442\u0430\u043a\u043e\u0433\u043e: \u044d\u0442\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0437\u0430\u043f\u0438\u0448\u0443\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 fsync \u0432 \u043b\u043e\u0433\u0438, \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442 \u043a\u0430\u043a \u043d\u0438 \u0432 \u0447\u0451\u043c \u043d\u0435 \u0431\u044b\u0432\u0430\u043b\u043e. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432 WAL-\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0444\u0430\u0439\u043b\u0430\u0445 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435 \u0431\u044b\u043b\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0441\u0431\u0440\u043e\u0448\u0435\u043d\u044b \u043d\u0430 \u0434\u0438\u0441\u043a. \u0422\u0430\u043a \u0447\u0442\u043e \u0443\u0436 \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u0435\u0440\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0443\u0442\u0438\u043b\u0438\u0442\u044b. \u041e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0430\u0441\u044c \u0438 \u0441\u0443\u0434\u044c\u0431\u0430 pg_dump, pg_basebackup, pg_rewind \u0438 pg_checksums, \u043d\u043e \u043f\u043e\u043a\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043b\u0438\u0441\u044c \u044d\u0442\u0438\u043c\u0438 \u0434\u0432\u0443\u043c\u044f.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/25\/2300\/\"><b>\u0417\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0445 \u0444\u043b\u0430\u0433\u043e\u0432 \u0434\u043b\u044f fsync()<\/b><\/a><br \/>  \u042d\u0442\u043e\u0442 \u043f\u0430\u0442\u0447 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043b\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0444\u043b\u0430\u0433\u0438 \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 \u0434\u043b\u044f fsync() \u2014 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0430 \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u043b\u0438 \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e.<\/p>\n<h3>\u0420\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f<\/h3>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/26\/2284\/\"><b>\u041f\u0430\u0443\u0437\u0430 \u043f\u0440\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u043e \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043a\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/b><\/a><br \/>  \u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c WAL-\u044b, \u0430 \u0434\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e <code>recovery_target_time<\/code> \u0442\u0430\u043a \u0438 \u043d\u0435 \u0434\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c, \u0441\u0435\u0440\u0432\u0435\u0440 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b. \u0422\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0441\u0442\u0430\u043d\u0435\u0442 \u043d\u0430 \u043f\u0430\u0443\u0437\u0443, \u043e \u0447\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0438\u0442 \u0432 \u0436\u0443\u0440\u043d\u0430\u043b\u0435, \u0438 \u0443 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b WAL \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/26\/2292\/\"><b>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 ignore_invalid_pages<\/b><\/a><br \/>  \u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0440\u0435\u043f\u043b\u0438\u043a\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0432 \u0437\u0430\u043f\u0438\u0441\u0438 WAL \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f <code>panic<\/code>-\u0430. \u041f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0442\u044c \u0435\u0451 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <code>ignore_invalid_pages<\/code>. \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0441\u044f \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439 \u043f\u043e\u0442\u0435\u0440\u0435\u0439 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u0430\u043c\u044b\u043c\u0438 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u043c\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f\u043c\u0438. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0440\u0435\u043f\u043b\u0438\u043a\u0443.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/27\/1896\/\"><b>\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 primary_conninfo \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430<\/b><\/a><br \/>  \u041f\u0430\u0442\u0447 \u0421\u0435\u0440\u0433\u0435\u044f \u041a\u043e\u0440\u043d\u0438\u043b\u043e\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b <code>primary_conninfo<\/code>, <code>primary_slot_name<\/code> \u0438 <code>wal_receiver_create_temp_slot<\/code> \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0440\u0430\u0434\u0438 \u044d\u0442\u043e\u0433\u043e \u0438 \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043e\u0442 \u0444\u0430\u0439\u043b\u0430 <code>recovery.conf<\/code> \u0432 12-\u043c \u0440\u0435\u043b\u0438\u0437\u0435.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/27\/2489\/\"><b>\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435<\/b><\/a><br \/>  \u0420\u0430\u043d\u044c\u0448\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 (\u0442\u0430\u043a\u0438\u0445, \u043a\u0430\u043a <code>max_prepared_transactions<\/code>) \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043c\u043e\u0433\u043b\u0430 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0443 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u043d\u0430 \u043d\u0435\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0438\u043c\u0435\u043b \u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0435\u043b\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435\u043c. \u0410 \u0435\u0441\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0430, \u0432\u044b\u0437\u0432\u0430\u043d\u043d\u0430\u044f \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442, \u0442\u043e \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442\u0441\u044f, \u043d\u043e \u0440\u0435\u043f\u043b\u0438\u043a\u0430 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439.<\/p>\n<p>  <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=0d8c9c1210c44b36ec2efcb223a1dfbe897a3661\"><b>\u041c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b \u0431\u044d\u043a\u0430\u043f\u0430<\/b><\/a><br \/>  pg_basebackup \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u201c\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u201d \u2014 JSON-\u0444\u0430\u0439\u043b, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u0439 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 (\u0438\u043c\u0435\u043d\u0430 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0444\u0430\u0439\u043b\u043e\u0432, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 WAL-\u0444\u0430\u0439\u043b\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0443\u043c\u043c\u044b \u0432\u0441\u0435\u0433\u043e \u0438 \u0432\u0441\u044f).<br \/>  \u041d\u043e\u0432\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 pg_validatebackup \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0435 \u043a\u043e\u043f\u0438\u0438 \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0443, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f WAL-\u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u044b pg_waldump (\u044d\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a WAL-\u0444\u0430\u0439\u043b\u0430\u043c \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0430\u043c\u043e\u0439 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438, \u0430 \u043d\u0435 \u0432 \u0430\u0440\u0445\u0438\u0432\u0435).<br \/>  \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u0444\u0430\u0439\u043b\u044b \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u043f\u043e\u0432\u0440\u0435\u0434\u0438\u043b\u0438\u0441\u044c \u043b\u0438\u0431\u043e \u0438\u0441\u0447\u0435\u0437\u043b\u0438, \u0438\u043b\u0438 \u043a\u043e\u0433\u0434\u0430 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043b\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0438\u0437-\u0437\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043d\u0443\u0436\u043d\u044b\u0445 \u0436\u0443\u0440\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/27\/2407\/\"><b>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0441\u043b\u043e\u0442\u043e\u043c \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445<\/b><\/a><br \/>  \u0421\u043b\u043e\u0442 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u2014 \u0443\u0434\u043e\u0431\u043d\u044b\u0439, \u043d\u043e \u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c: \u0435\u0441\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0432\u0440\u0435\u043c\u044f \u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u043b\u043e\u0442\u0430, \u043d\u0435\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 WAL-\u0437\u0430\u043f\u0438\u0441\u0438 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u0432\u0441\u0435 \u043c\u0435\u0441\u0442\u043e \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <code>max_slot_wal_keep_size<\/code> \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043c \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043d\u044f\u0442 \u043d\u0435\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d, \u0441\u043b\u043e\u0442 \u0438\u043d\u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0430 \u043c\u0435\u0441\u0442\u043e \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f.<\/p>\n<h3>Windows<\/h3>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/27\/2237\/\">\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 Unix-\u0441\u043e\u043a\u0435\u0442\u043e\u0432 \u043d\u0430 Windows<\/a><br \/>  \u0412 Windows 10 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f unix-domain-\u0441\u043e\u043a\u0435\u0442\u044b, \u0445\u043e\u0442\u044f \u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<h3>\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/h3>\n<p>  \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0434\u0432\u0430 \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. <br \/>  \u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u043b\u0433\u043e\u0433\u043e <a href=\"https:\/\/commitfest.postgresql.org\/27\/2305\/\">\u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f<\/a> \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/glossary.html\">Appendix M. Glossary<\/a>. \u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432 \u0433\u043b\u043e\u0441\u0441\u0430\u0440\u0438\u0438 101 \u0442\u0435\u0440\u043c\u0438\u043d. <\/p>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0446\u0432\u0435\u0442\u043e\u043c \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>PG_COLOR<\/code> \u0431\u044b\u043b\u0430 \u0438 \u0440\u0430\u043d\u044c\u0448\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e <a href=\"https:\/\/commitfest.postgresql.org\/27\/2406\/\">\u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e<\/a> \u0432 <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/color.html\">Appendix N. Color Support<\/a>. \u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043c\u044b\u0441\u0435\u043b \u041f\u0438\u0442\u0435\u0440\u0430 \u042d\u0439\u0437\u0435\u043d\u0442\u0440\u0430\u0443\u0442\u0430 \u0432 \u044d\u0442\u043e\u043c \u043f\u0430\u0442\u0447\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0410 \u0442\u0435\u043c, \u043a\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0445\u043e\u0442\u0435\u043b, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b\u043e\u0441\u044c \u044f\u0432\u043d\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>NO_COLOR<\/code>. \u041d\u043e \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u043e\u0432 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0430\u0446\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441\u0440\u0435\u0434\u0438 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u044e\u0449\u0438\u0445 \u043f\u0430\u0442\u0447 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b\u0438 \u043b\u0438\u0448\u044c \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u0410 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438.<\/p>\n<hr>\n<p>  <i>\u0420\u0430\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u043f\u0430\u0442\u0447\u0438 \u043d\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u0434\u043e\u0437\u0440\u0435\u0442\u044c \u0434\u043e PG13, \u043c\u043e\u0436\u043d\u043e \u043e\u0436\u0438\u0434\u0430\u0442\u044c, \u0447\u0442\u043e PG14 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0434\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0432\u043f\u0435\u0440\u0435\u0434. \u041f\u0440\u044b\u0436\u043a\u043e\u043c, \u0430 \u043d\u0435 \u0448\u0430\u0433\u043e\u043c. \u0423\u0432\u0438\u0434\u0438\u043c.<\/i><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/493106\/\"> https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/493106\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/493106\/\"><i>\u0420\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0451\u0442 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043e PostgreSQL 13. 8 \u0430\u043f\u0440\u0435\u043b\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u0430\u0441\u044c \u00ab\u0437\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0430\u00bb \u2014 PostgreSQL <b>feature freeze<\/b>, \u0442\u0435\u043f\u0435\u0440\u044c \u0432 \u044d\u0442\u0443 \u0432\u0435\u0440\u0441\u0438\u044e \u0432\u043e\u0439\u0434\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u0444\u0438\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u044b \u0434\u043e \u044d\u0442\u043e\u0439 \u0434\u0430\u0442\u044b.<\/p>\n<p>  \u0420\u0435\u0432\u043e\u043b\u044e\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u044d\u0442\u0443 \u0432\u0435\u0440\u0441\u0438\u044e, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0442\u0440\u0443\u0434\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c. \u041a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445, \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043d\u0435\u0439 \u043d\u0435\u0442. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043d\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u0432\u043e\u0439\u0442\u0438 \u0432 \u043d\u0435\u0451 \u0442\u0430\u043a\u0438\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u043f\u0430\u0442\u0447\u0438, \u043a\u0430\u043a Table \u0438 Functions \u0434\u043b\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 JSON\/SQL, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0432\u0438\u0434\u0435\u0442\u044c \u0435\u0449\u0435 \u0432 PG12 \u0440\u044f\u0434\u043e\u043c \u0441 \u043f\u0430\u0442\u0447\u0435\u043c JSONPath; \u043d\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u2014 \u043b\u0438\u0448\u044c \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u041d\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043e\u043a \u0432\u0441\u0451 \u0436\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u0435\u0442. \u041c\u044b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u043d\u0443\u044e \u0441\u0432\u043e\u0434\u043a\u0443 \u0432\u043e\u0448\u0435\u0434\u0448\u0438\u0445 \u0432 \u0427\u0451\u0440\u0442\u043e\u0432\u0443 \u0414\u044e\u0436\u0438\u043d\u0443 \u043f\u0430\u0442\u0447\u0435\u0439.<\/i><\/p>\n<hr>\n<p>  <\/p>\n<h3>\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445 SQL<\/h3>\n<p>  <a href=\"https:\/\/commitfest.postgresql.org\/23\/2146\/\"><b>CREATE DATABASE\u2026 LOCALE<\/b><\/a><\/p>\n<p>  \u0423\u0442\u0438\u043b\u0438\u0442\u044b <code>initdb<\/code>, <code>createdb<\/code> \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>CREATE COLLATION<\/code> \u0438\u043c\u0435\u044e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>LOCALE<\/code>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0441\u0440\u0430\u0437\u0443 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f <code>LC_CTYPE<\/code> \u0438 <code>LC_COLLATE<\/code>. \u0422\u0435\u043f\u0435\u0440\u044c \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 <code>CREATE DATABASE<\/code>:<\/p>\n<pre><code class=\"pgsql\">CREATE DATABASE db_koi8r TEMPLATE template0      ENCODING 'KOI8R' LOCALE 'ru_RU.KOI8R';<\/code><\/pre>\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-301507","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/301507","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=301507"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/301507\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=301507"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=301507"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=301507"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}