рдбреЗрд╡рд┐рд▓реНрд╕ рдбреЛрдЬреЗрди рдореЗрдВ рдХрд┐рддрдирд╛ рдирдпрд╛ рд╣реИ?

рд╣рдо рдХреЗрд╡рд▓ PostgreSQL 13. рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред 8 рдЕрдкреНрд░реИрд▓ рдХреЛ, рдПрдХ "рдлреНрд░реАрдЬ" рд╣реБрдЖ - PostgreSQL рдлреАрдЪрд░ рдлреНрд░реАрдЬ рд╣реЛ рдЧрдпрд╛ , рдЕрдм рдХреЗрд╡рд▓ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдЗрд╕ рддрд╛рд░реАрдЦ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

рдЗрд╕рдХрд╛ рдПрдХ рдХреНрд░рд╛рдВрддрд┐рдХрд╛рд░реА рд╕рдВрд╕реНрдХрд░рдг рдирд╛рдо рджреЗрдирд╛ рдХрдард┐рди рд╣реИред рдЗрд╕рдореЗрдВ рдХреЛрдИ рдХрд╛рд░реНрдбрд┐рдирд▓, рд╡реИрдЪрд╛рд░рд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, JSON / SQL рдорд╛рдирдХ рдХреЗ рд▓рд┐рдП рдЯреЗрдмрд▓ рдФрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЬреИрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреИрдЪ, рдЬреЛ рдореИрдВ JSONPath рдкреИрдЪ рдХреЗ рдмрдЧрд▓ рдореЗрдВ PG12 рдореЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛; рддреИрдпрд╛рд░-рдирд┐рд░реНрдорд┐рдд рдПрдореНрдмреЗрдбреЗрдб рд╕реНрдЯреЛрд░реЗрдЬ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджрд┐рдпрд╛ - рдХреЗрд╡рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕реБрдзрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рдЕрднреА рднреА рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИред рд╣рдордиреЗ рдбреЗрд╡рд┐рд▓реНрд╕ рдбреЛрдЬреЗрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдкреИрдЪ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕рд╛рд░рд╛рдВрд╢ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред




SQL рдХрдорд╛рдиреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди


DATEABASE рдмрдирд╛рдПрдВ ... LOCALE

рдЙрдкрдпреЛрдЧрд┐рддрд╛рдПрдБinitdb,createdbрдФрд░ рдЯреАрдоCREATE COLLATIONрдореЗрдВ рдПрдХ рд╕реЗрдЯрд┐рдВрдЧLOCALEрд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕рд╣реАLC_CTYPEрдФрд░рд╕рд╣реА рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИLC_COLLATEред рдЕрдм рдЯреАрдо рдореЗрдВ рдПрдХ рд╣реА рдореМрдХрд╛ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛CREATE DATABASE:

CREATE DATABASE db_koi8r TEMPLATE template0 
    ENCODING 'KOI8R' LOCALE 'ru_RU.KOI8R';

рдЕрдиреНрдп рджреГрд╢реНрдп ... RENAME COLUMN

рджреГрд╢реНрдп рдореЗрдВ рдХреЙрд▓рдо рдХрд╛ рдирд╛рдо рдЕрдм рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИALTER VIEWред рдкрд╣рд▓реЗ, рдЗрд╕ рджреГрд╢реНрдп рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред

рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдк рдХреЙрд▓рдо рдХреЛ рдПрдХ рдирд╛рдо рджреЗрдирд╛ рднреВрд▓ рдЧрдП:

CREATE VIEW uptime AS SELECT current_timestamp, current_timestamp - pg_postmaster_start_time();
SELECT * FROM uptime;

       current_timestamp       |    ?column?     
-------------------------------+-----------------
 2020-03-23 15:37:00.088824+03 | 04:18:24.897856

рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

ALTER VIEW uptime RENAME COLUMN "?column?" TO uptime;
SELECT * FROM uptime;

       current_timestamp       |     uptime      
-------------------------------+-----------------
 2020-03-23 15:37:40.726516+03 | 04:19:05.535548


рдкрд╣рд▓реЗ рд╕реЗ рдмрддрд╛рдПрдВ ... ALTER COLUMN ... DROP EXPRESSION

рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЙрддреНрдкрдиреНрди рдХреЙрд▓рдо рдХреЛ рдЕрдм рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЗрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ:

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

                                     Table "public.payments"
   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:
    "payments_pkey" PRIMARY KEY, btree (id)

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЙрдиреНрд╣реЛрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ income_tax рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣рдЯрд╛рдПрдВ:

ALTER TABLE payments ALTER COLUMN income_tax DROP EXPRESSION;
\d payments

                   Table "public.payments"
   Column   |     Type      | Collation | Nullable | Default
------------+---------------+-----------+----------+---------
 id         | integer       |           | not null |
 amount     | numeric(18,2) |           |          |
 income_tax | numeric(18,2) |           |          |
Indexes:
    "payments_pkey" PRIMARY KEY, btree (id)

рдмреЗрд╢рдХ, рд╕реНрддрдВрдн рд╕реЗ рдореМрдЬреВрджрд╛ рдбреЗрдЯрд╛ рджреВрд░ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ:

SELECT * FROM payments;

 id | amount | income_tax
----+--------+------------
  1 |  42.00 |       5.46


DROP DATABASE ... FORCE
рдпрджрд┐ рдЖрдк рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирдПFORCEрдХрдорд╛рдВрдбрд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВDROP DATABASEред

CREATE DATABASE db;

рдирдП рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ:

CREATE EXTENSION IF NOT EXISTS dblink;
SELECT dblink_connect('dbname=db');

 dblink_connect
----------------
 OK

рдФрд░ рдЕрдм рд╣рдо рд╣рдЯрд╛ рджреЗрдВрдЧреЗ, рдЬрдмрд░рди рдмреАрдЪ рдореЗрдВ, рд╕рд╛рде рд╣реА pg_terminate_backend, рдЦреБрд▓реЗ рдХрдиреЗрдХреНрд╢рди:

DROP DATABASE db WITH (FORCE);

рдЯрд╛рдЗрдк рдХрд░реЗрдВ ... рд╕реЗрдЯ рдХрд░реЗрдВ
рдЖрджреЗрд╢ALTER TYPEрдореВрд▓ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рднрдВрдбрд╛рд░рдг рд░рдгрдиреАрддрд┐ред рдкрд╣рд▓реЗ, рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдЯреАрдо рдореЗрдВ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВCREATE TYPEред

рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдирдпрд╛ рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рдмрдирд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореМрдЬреВрджрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ -tsqueryред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рдПрдХ рдЕрд▓рдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ:

CREATE DATABASE db;
\c db

рдПрдХ рднрдВрдбрд╛рд░рдг рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ tsquery рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ plain, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд╕реНрддрдВрднреЛрдВ рдХреЛ рд╕рдорд╛рди рд░рдгрдиреАрддрд┐ рдорд┐рд▓рддреА рд╣реИ:

SELECT typname,typstorage FROM pg_type WHERE typname = 'tsquery';

 typname | typstorage
---------+------------
 tsquery | p

CREATE TABLE queries (query tsquery);
SELECT attname, attstorage FROM pg_attribute WHERE attrelid = 'queries'::regclass AND attname = 'query';

 attname | attstorage
---------+------------
 query   | p

рдпрджрд┐ рдЖрдкрдХреЛ рдирдИ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:

ALTER TYPE tsquery SET (storage=external);
SELECT typname,typstorage FROM pg_type WHERE typname = 'tsquery';

 typname | typstorage
---------+------------
 tsquery | e

рдирдИ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рднрдВрдбрд╛рд░рдг рдХрд╛ рдкреНрд░рдХрд╛рд░ рднреА рдмрджрд▓ рдЬрд╛рдПрдЧрд╛:

CREATE TABLE new_queries (query tsquery);
SELECT attname, attstorage FROM pg_attribute WHERE attrelid = 'new_queries'::regclass AND attname = 'query';

 attname | attstorage
---------+------------
 query   | e

рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЯреЛрд╕реНрдЯ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд░рдгрдиреАрддрд┐ рдХреЛ рдмрджрд▓рдХрд░ рд╡рд╛рдкрд╕ plainрдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ :

ALTER TYPE tsquery SET (storage=plain);

ERROR:  cannot change type's storage to PLAIN

рдЗрд╕рд▓рд┐рдП, рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рджрдпрд╛ рдирд╣реАрдВ рд╣реИред

рдкреВрд░реНрд╡ рд╕рд╛рдВрдЦреНрдпрд┐рдХреА ... рд╕реЗрдЯ рд╕рд╛рдВрдЦреНрдпрд┐рдХреА

рдЖрджреЗрд╢ CREATE STATISTICSрдЖрдкрдХреЛ рддрд╛рд▓рд┐рдХрд╛ рд╕реНрддрдВрднреЛрдВ рдХреЗ рдЪрдпрдирд┐рдд рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдореВрд▓реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рд╕рдмрд╕реЗ рдЖрдо рдореВрд▓реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ default_statistics_targetред рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдБрдХрдбрд╝реЛрдВ рдХрд╛ рдореВрд▓реНрдп рдЕрдм рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

ALTER STATISTICS  SET STATISTICS _;

TET рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде FETCH FIRST
, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдХрдорд╛рдВрдбSELECTрдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп,LIMITрдЖрдк SQL рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

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;

 a |  b  
---+-----
 1 | 1.1
 2 | 2.1
(2 rows)

рдЕрдм рдпрд╣ FETCHрд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ WITH TIES, рдЬреЛ рд╕рднреА "рд╕рдВрдмрдВрдзрд┐рдд" рд▓рд╛рдЗрдиреЛрдВ (рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪреБрдиреЗ рдЧрдП рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд░рд╛рдмрд░ рд▓рд╛рдЗрдиреЗрдВ, рдЕрдЧрд░ рдХреЗрд╡рд▓ рдЫрдВрдЯрдиреА рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ:

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;

 a |  b  
---+-----
 1 | 1.1
 2 | 2.1
 2 | 2.2
(3 rows)

рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдп рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░


get_random_uuid
рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рдиget_random_uuidрд╕рдВрд╕реНрдХрд░рдг 4 UUID рдорд╛рди (рд░реИрдВрдбрдо рдорд╛рди) рд▓реМрдЯрд╛рддрд╛ рд╣реИ:

SELECT gen_random_uuid();

           gen_random_uuid            
--------------------------------------
 25e02793-80c0-438c-be07-c94b966c43ab

рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп UUID рдорд╛рди рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдЙрдкрдпреЛрдЧреА рд╣реИред
рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ uuid-ossp рдпрд╛ pgcrypto рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛ред

рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдХреЗ рд▓рд┐рдП min_scale рдФрд░ trim_scale

рдлрд╝рдВрдХреНрд╢рди min_scaleрд╕рдВрдЦреНрдпрд╛ рдХреЗ рднрд┐рдиреНрдирд╛рддреНрдордХ рднрд╛рдЧ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдЧреИрд░- рдорд╣рддреНрд╡рдкреВрд░реНрдг trim_scaleрд╢реВрдиреНрдп рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рддрд╛ рд╣реИ:

SELECT n, min_scale(n), trim_scale(n) FROM (VALUES(42.42000)) as t(n);

    n     | min_scale | trim_scale
----------+-----------+------------
 42.42000 |         2 |      42.42



рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ gcd рдФрд░ lcm рдкреБрдирдГрдкреВрд░реНрддрд┐ред рдЕрдм рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд╕рд╛рдорд╛рдиреНрдп рднрд╛рдЬрдХ (gcm) рдФрд░ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рд╕рд╛рдорд╛рдиреНрдп рдПрдХрд╛рдзрд┐рдХ (lcm) рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

SELECT gcd(54,24), lcm(54,24);

 gcd | lcm
-----+-----
   6 | 216

рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╕рдХрд▓ рдХрд╛рд░реНрдп рдорд┐рдирдЯ рдФрд░ рдЕрдзрд┐рдХрддрдо pg_lsn

рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗpg_lsnрд▓рд┐рдП рд╕рдХрд▓ рдХрд╛рд░реНрдп рдЬреЛрдбрд╝реЗ рдЧрдП рд╣реИрдВminрдФрд░maxрдЗрд╕рд╕реЗ рдЖрдк рдкреНрд░рдкрддреНрд░ рдХреЗ рдкреНрд░рд╢реНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

SELECT min(restart_lsn) FROM pg_replication_slots;
SELECT min(sent_lsn) FROM pg_stat_replication;

рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░рд┐рдЯрд░реНрди рдорд╛рди рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕рдВрд╢реЛрдзрдХ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛

рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдкреНрд░рдХрд╛рд░ рд╕рдВрд╢реЛрдзрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░рд┐рдЯрд░реНрди рдорд╛рди рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдореМрджреНрд░рд┐рдХ рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдЖрдпрдХрд░ рдХреА рд░рд╛рд╢рд┐ рд▓реМрдЯрд╛рддрд╛ рд╣реИ:

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;

рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рджреЛ рджрд╢рдорд▓рд╡ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдореЗрдВ рдЪрд╛рд░ рдорд┐рд▓рддреЗ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдмрд╛рдж рднреА рд╕реНрдкрд╖реНрдЯ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рддреАрд╕рд░рд╛ рд╕реНрддрдВрдн):

SELECT amount, code, amount::numeric(18,2)
FROM income_tax(ROW(42.42, ''))\gx

-[ RECORD 1 ]--
amount | 5.5146
code   | 
amount | 5.5146

рд╕рдВрд╕реНрдХрд░рдг 13 рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо рд╕рд╣реА рд╣реИ:

SELECT amount, code, amount::numeric(18,2)
FROM income_tax(ROW(42.42, ''))\gx

-[ RECORD 1 ]
amount | 5.51
code   | 
amount | 5.51

рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдирд╛рдо to_date () рдФрд░ to_timestamp ()

рдХрд╛рд░реНрдпрд╕рдкреНрддрд╛рд╣ рдХреЗ рдорд╣реАрдиреЛрдВ рдФрд░ рджрд┐рдиреЛрдВ рдХреЗ рд╕реНрдерд╛рдиреАрдп рдирд╛рдореЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдПto_dateрднреАto_timestampрд╕реАрдЦреЗред рдкрд╣рд▓реЗ, рдХреЗрд╡рд▓ рдЕрдВрдЧреНрд░реЗрдЬреА рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛:

SELECT to_date(', 24  2020', 'TMDay, DD TMMonth YYYY');

  to_date   
------------
 2020-03-24

рд╕рд╛рдорд╛рдиреНрдп рдФрд░ IS рд╕рд╛рдорд╛рдиреНрдп рд╣реИ

SQL рдорд╛рдирдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдорд╛рдиреНрдп () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдпреВрдирд┐рдХреЛрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ IS рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред

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&'\0032\2075')) AS vals(str)\gx

-[ RECORD 1 ]------+---
str                | 2тБ╡
nfc                | 2тБ╡
is_nfc_normalized  | t
nfkc               | 25
is_nfkc_normalized | f

UNICODE рдХреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рд░реВрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВ ред

64-рдмрд┐рдЯ рд▓реЗрдирджреЗрди рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП Xid8 рдкреНрд░рдХрд╛рд░ рдФрд░ xid8_current () рдлрд╝рдВрдХреНрд╢рди 64-рдмрд┐рдЯ рд▓реЗрдирджреЗрди рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП

рдПрдХ рдирдпрд╛ xid8 рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред рд▓реЗрдХрд┐рди рдирд╣реАрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ PostgreSQL 64-рдмрд┐рдЯ рд▓реЗрдирджреЗрди рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛: рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рд╡рд╛рдкрд╕реА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдм рдкреБрд░рд╛рдиреЗ рдХрд╛рд░реНрдпреЛрдВ pg_current_xact_id txid_current, рдЬреЛ int8 рд▓реМрдЯреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рд╣реИ, рдФрд░ рдЗрддрдиреЗ рдкрд░ред рдПрди

рдиреНрдпреВ рдмрд╣реБрд░реВрдкреА рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ anycompatible рдкрд░рд┐рд╡рд╛рд░

рдЬреЛрдбрд╝рд╛ рдкреНрд░рдХрд╛рд░ anycompatible, anycompatiblearray, anycompatiblenonarray, anycompatiblerangeред рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд anyelement, рдирдП рдкреНрд░рдХрд╛рд░ рдЖрдкрдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрдЧрдд рдкреНрд░рдХрд╛рд░ред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рдиmaximumрдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рддрд░реНрдХ рдХреЗ рд░реВрдк anycompatibleрдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ integerрдФрд░ numericред рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдЗрди рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдореВрд▓реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддрд╛ рд╣реИ:

CREATE FUNCTION maximum(a anycompatible, b anycompatible) RETURNS anycompatible
	AS 'SELECT CASE WHEN a > b THEN a ELSE b END' LANGUAGE SQL;

SELECT f, pg_typeof(f) FROM maximum(42, 42.42) f;

   f   | pg_typeof
-------+-----------
 42.42 | numeric

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрд╕рдВрдЧрдд рдФрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рджреЛ рд╕реНрд╡рддрдВрддреНрд░ рд╕реЗрдЯ рд╣реИрдВ:

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;

  str  |  bool   
-------+---------
 (1,a) | (1.1,t)

рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдПрдБ


PL / рдкрд░реНрд▓ рдореЗрдВ рдЯрд╛рдЗрдк рдмреВрд▓ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо
рд╕рдмрд╕реЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЗрд╡рд╛рди рдкреИрдирдЪреЗрдВрдХреЛ рдХреЗ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо (рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬрд╝ рдкреНрд░реЛрдлреЗрд╢рдирд▓) - bool_plperl рдХреЛ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред Postgres рдмреВрд▓рд┐рдпрди рдорд╛рдиреЛрдВ рдХреЛtрдпрд╛PL / Perl рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИf, рд▓реЗрдХрд┐рди Perl рдХреЗ рд▓рд┐рдП рдпрд╣fрдмреВрд▓рд┐рдпрди рдЕрд╕рддреНрдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдЕрдХреНрд╖рд░ f, рдЕрд░реНрдерд╛рдд рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╕рддреНрдп ред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ( рдкрддреНрд░рд╛рдЪрд╛рд░ рджреЗрдЦреЗрдВ), рд▓реЗрдХрд┐рди рдЯреЙрдо рд▓реЗрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдмреВрд▓ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдмрдирд╛рдирд╛ рд╕рдмрд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИред

PL / 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;

PG12 рдореЗрдВ slow_pi () рдХреЙрд▓ рдХрд░реЗрдВ:

SELECT slow_pi();

          slow_pi      
    --------------------
     3.1415925535898497
    (1 row)
    Time: 13060,650 ms (00:13,061)

рдЕрдм PG13 рдореЗрдВ:
SELECT slow_pi();

          slow_pi      
    --------------------
     3.1415925535897915
    (1 row)
    Time: 2108,464 ms (00:02,108)

Pg_pltemplate рдХреЗ рдмрдЬрд╛рдп рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдПрдХреНрд╕рдЯреЗрдВрд╢рди

рд╕рд┐рд╕реНрдЯрдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдХрдо рд╣реЛ рдЧрдИ рд╣реИред рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛pg_pltemplateред рдЗрд╕рдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬреЛ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВCREATE LANGUAGEред рдЕрдм рд╣рдордиреЗ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рд▓рд┐рдкрд┐рдпреЛрдВ рдореЗрдВ рджрд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛pg_pltemplate, рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рд╣реА рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓рд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдпреЛрдЬрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╕реНрддрд╛рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рднрд╛рд╖рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдорд╛рд▓рд┐рдХ (рд╕реБрдкрд░рдпреВрдЬрд╝рд░ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рдмрд┐рдирд╛) рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рдирд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рджрд░рдЕрд╕рд▓, рдЕрдм рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, plpgsql, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдорд╛рд▓рд┐рдХ рдХреЛ рд╕реБрдкрд░рдпреБрд╕рд░ рд╣реЛрдирд╛ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИред

рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдг рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдирдпрд╛ рддрд╛рд░реНрдХрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рд╣реИtrustedред рдпрджрд┐ рджреЛрдиреЛрдВ рдкреИрд░рд╛рдореАрдЯрд░trustedрдФрд░superuserрд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рд╡рд┐рд╕реНрддрд╛рд░ рди рдХреЗрд╡рд▓ рд╕реБрдкрд░рдпреБрд╕рд░ рджреНрд╡рд╛рд░рд╛, рдмрд▓реНрдХрд┐ CREATEрд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рднреА рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдорд╛рд▓рд┐рдХ)ред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реБрдкрд░рдпреБрд╕рд░ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБрдПрдБ рдЗрд╕рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд╣реЛрдВрдЧреА, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рд╕реНрд╡рд╛рдореА рд╕реНрд╡рдпрдВ рд╣реА рдмрдирд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реЛрдЧрд╛ред

рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рдгрд╛рдо:

  • рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЕрдиреНрдп рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреГрддреАрдп-рдкрдХреНрд╖ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддрд╛ рдЦреЛрд▓рддреЗ рд╣реИрдВред рдЕрдм рд╣рдо рдХреЗрд╡рд▓ plpgsql, plperl рдФрд░ pltcl рддрдХ рд╣реА рд╕реАрдорд┐рдд рд╣реИрдВред
  • рдпрд╣ pg_pltemplateрдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдкреНрд▓рд┐рдлрдереЙрди рднрд╛рд╖рд╛ рдХреЗ рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред pg_pltemplateрдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛ рдкрд╛рдпрдерди 3 рдХреЗ рд╕рдВрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдПрдХ рдХрджрдо (рдЖрд╡рд╢реНрдпрдХ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ) рд╣реИред

рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ


рдмреА-рдЯреНрд░реА рдХрд╛ рд╕рдВрдкреАрдбрд╝рди
рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд (рдХрд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 2015 рдореЗрдВ рд╢реБрд░реВ рд╣реБрдЖ рдерд╛) рдЕрдирд╛рд╕реНрддрд╛рд╕рд┐рдпрд╛ рд▓реБрдмреЗрдирд┐рдХреЛрд╡рд╛ (рдкреЛрд╕реНрдЯрдЧреНрд░реИрдЬ рдкреНрд░реЛрдлреЗрд╢рдирд▓) рдФрд░ рдкреАрдЯрд░ рдЧреАрдЧрди (рдкреАрдЯрд░ рдЧреЗрд╣реЗрдШрди) рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд┐рдд рдкреИрдЪ рдЕрдВрддрддрдГ рдкреАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Nastya PGconf India рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реАред рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдиреЗ рдбреБрдкреНрд▓реАрдХреЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреА-рдЯреНрд░реА рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░рдирд╛ рд╕реАрдЦрд╛ рд╣реИ, рдпрд╛рдиреА рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЗрдВрдбреЗрдХреНрд╕ рдХреАрдЬрд╝ рдкрд░ рдмрдЪрддред рдЗрди рдЕрдиреБрдХреНрд░рдорд┐рддреЛрдВ рдХреЛ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдкреБрди: рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдореЗрдВ рд╣рд╛рдирд┐ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдкреАрдбрд╝рди рд╕рдВрднрд╡ рд╣реЛред рдбрд┐рдбреБрдкреНрд▓реАрдХреЗрд╢рди рдХрд╛ рд╡рд┐рдЪрд╛рд░ GIN (рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдбреЗрдХреНрд╕ - рдЬрдирд░рд▓рд╛рдЗрдЬреНрдб рдЗрдирд╡рд░реНрдЯреЗрдб рдЗрдВрдбреЗрдХреНрд╕)рдЬреИрд╕реЗ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЗрди рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдореЗрдВ рдмреА-рдЯреНрд░реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рд░, рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИ рдЬрдм рдПрдХ рдХреБрдВрдЬреА рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рд╢рдмреНрдж рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣реА рдЯреЛрдХрди рдЖрдорддреМрд░ рдкрд░ рдХрдИ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рддрдХ, рдмреА-рдЯреНрд░реА рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред

рдмреА-рдЯреНрд░реА рдЗрдВрдбреЗрдХреНрд╕ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкрддреНрддреА рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдЬреАрдЖрдИрдПрди рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рд╕рдорд╛рди рдХреБрдВрдЬреА рдорд╛рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╡рд┐рдХрд▓реНрдк рд╕рдВрднрд╡ рд╣реИрдВ: рдкреГрд╖реНрда рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреЛрд╕реНрдЯрд┐рдВрдЧ рд╕реВрдЪреА рд╣реИ - TIDs (рдЕрдиреБрдХреНрд░рдорд┐рдд рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛) рдХреА рдПрдХ рд╕реВрдЪреА, рдпрджрд┐ рд╕реВрдЪреА рдЫреЛрдЯреА рд╣реИ, рдФрд░ рдпрджрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ TID рд╣реИрдВ, рддреЛ рдорд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рдмрдЬрд╛рдп рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ рдирдИ "рдЯреНрд░реА рд╢рд╛рдЦрд╛рдПрдВ" - рдкреЛрд╕реНрдЯрд┐рдВрдЧ рд╕реВрдЪреА рдпрд╛ рдЕрдиреНрдп рдЯреНрд░реА рд╢рд╛рдЦрд╛рдУрдВ (рдЙрдиреНрд╣реЗрдВ рдкреЛрд╕реНрдЯрд┐рдВрдЧ рдЯреНрд░реА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдЬреИрд╕реЗ рдЕрдиреНрдп рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдВрдХред

рдЗрд╕ рддрд░рд╣ рдХреА рдЯреНрд░реА рд╕рдВрд░рдЪрдирд╛ рдмреА-рдЯреНрд░реА рдХреЗ рд╕рдорд╛рди рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, GIN рдореЗрдВ рд╕рдорд╛рди рдЯреНрд░реА рд╕реНрддрд░ рдХреЗ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрд┐рдпрд╛рдБ рдпреВрдирд┐рдбрд╛рдпрд░реЗрдХреНрд╢рдирд▓ рд╣реИрдВ, рди рдХрд┐ рджреНрд╡рд┐рджрд┐рд╢ред рдЗрд╕рд▓рд┐рдП (рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдирдП, рдХрдЯреМрддреА рдХрд┐рдП рдЧрдП рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреА рдЕрдЪреНрдЫреА рд╕рдВрдЧрддрддрд╛) рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдФрд░ рд╕реБрдзрд╛рд░реЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 3 рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрд╛ред рд╕рдлрд╛рдИ рддрдВрддреНрд░ (рдорд╛рдЗрдХреНрд░реЛрд╡реИрдХреНрдпреВрдо) рдФрд░ рдЕрдиреНрдп рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рдерд╛ред

рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ, рд╕рднреА рдЕрдиреБрдХреНрд░рдордг рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХрдЯреМрддреА рд▓рд╛рдЧреВ рд╣реИ, рд▓рдЧрднрдЧ 3 рдЧреБрдирд╛ рд╕рд┐рдХреБрдбрд╝ рдЧрдП рд╣реИрдВред рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рдирд╛ рднреА рдЕрджреНрд╡рд┐рддреАрдп рдЕрдиреБрдХреНрд░рдорд┐рддреЛрдВ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рддрд╛рд▓рд┐рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЙрдЪреНрдЪ рджрд░ рдкрд░ рд╕реВрдЪрдХрд╛рдВрдХ рд╕реВрдЬрди рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдирдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗрдЯрд┐рдВрдЧ рд╕реНрддрд░ рдкрд░ рдХрдиреЗрдХреНрдЯ рдФрд░ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

GIN рдЗрдВрдбреЗрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдкреВрд░реНрдг рд╕реНрдХреИрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ
рдпрд╣ рдкреИрдЪ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреВрд░реЗ рдЬреАрдЖрдИрдПрди рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдкреВрд░реНрдг рдкрд╛рд╕ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ GIN рдЗрдВрдбреЗрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдХреБрдЫ рдСрдкрд░реЗрд╢рди, рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдкреВрд░реНрдг рд╕реНрдХреИрди рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреВрд░реНрдг-рдкрд╛рда рд╕реНрддрдВрдн рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд▓реЗрдВ tsvectorред рдпрджрд┐ рдЦреЛрдЬ рдХреНрд╡реЗрд░реА рдореЗрдВ рдлрд╝реЙрд░реНрдо "рдХреБрдЫ рднреА рд▓реЗрдХрд┐рди рдПрдХ рджрд┐рдП рдЧрдП рд╢рдмреНрдж" рд╣реИ, рддреЛ рдкреВрд░реЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдЕрдкрдиреА рд╕рдВрдкреВрд░реНрдгрддрд╛ рдореЗрдВ рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдФрд░ рд╢рд░реНрдд рдЗрд╕ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдореМрдЬреВрдж рд╣реИ рдХрд┐ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рдкреВрд░реНрдг рд╕реНрдХреИрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕реВрдЪрдХрд╛рдВрдХ рдЕрднреА рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдХреИрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдирдП рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде, рдкрд╣рд▓реЗ рдПрдХ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдЖрдк рд╕реВрдЪрдХрд╛рдВрдХ рд╕реЗ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдФрд░ рд╕реАрдорд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдбрдмрд▓-рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрди рдкреГрд╖реНрдареЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ рдЬреЛ рд╕рдВрд╕реНрдХрд░рдг 12 (рдмрдлрд░) рдореЗрдВ рдкрдврд╝реЗ рдЧрдП рдереЗ:

EXPLAIN (ANALYZE, BUFFERS, COSTS OFF, TIMING OFF)
SELECT * FROM mail_messages WHERE tsv @@ to_tsquery('!vacuum') AND tsv @@ to_tsquery('analyze');

                                             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
   ->  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

рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдмрдлрд╝рд░реНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде:

EXPLAIN (ANALYZE, BUFFERS, COSTS OFF, TIMING OFF)
SELECT * FROM mail_messages WHERE tsv @@ to_tsquery('!vacuum') AND tsv @@ to_tsquery('analyze');

                                             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
   ->  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

рддреНрд░рд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдФрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдСрдкрд░реЗрдЯрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░
PostgreSQL рдореЗрдВ, рдХрдИ рдЗрдВрдбреЗрдХреНрд╕ рдПрдХреНрд╕реЗрд╕ рдореЗрдердб рдПрдХ "рдлреНрд░реЗрдорд╡рд░реНрдХ" рд╣реИрдВ рдЬреЛ рд╕рд░реНрдЪ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдкреЗрдЬ рдФрд░ рд▓реЙрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╛рд▓ рд▓реЙрдЧред рдФрд░ рдСрдкрд░реЗрдЯрд░ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдФрд░ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдм рддрдХ, рдСрдкрд░реЗрдЯрд░ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рдереЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреВрд░реНрдг-рдкрд╛рда рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП, рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдПрдХ GiST рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ tsvector_ops(GiST рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдБ) рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдпрд╣ рд╡рд░реНрдЧ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреЗрдбрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рд▓рдВрдмрд╛рдИ (124 рдмрд╛рдЗрдЯреНрд╕) рддрдп рдХреА рдЧрдИ рдереАред рдЕрдм рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рдВрдмрд╛рдИ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рд╕реВрдЪрдХрд╛рдВрдХ рдФрд░ рджрдХреНрд╖рддрд╛ рдХреЗ рдЖрдХрд╛рд░ (рд╣реИрд╢ рдХреЛрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛) рдХреЗ рдмреАрдЪ рд╕рдВрддреБрд▓рди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

CREATE INDEX ON mail_messages USING gist(tsv tsvector_ops(siglen=1024));

рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдЗрд╕реА рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ GiST рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдП рдЧрдП рдереЗ рдЬреЛ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреЗрдбрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ hstore, intarray, ltree рдФрд░ pg_trgm рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХреА рдХрд▓реНрдкрдирд╛ рдХреА рдЧрдИ рдереА, рд╡рд╣ GSON рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ JSONPath рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдкреВрд░реЗ JSON рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рди рдХрд┐рдпрд╛ рдЬрд╛рдП, рдмрд▓реНрдХрд┐ рдЗрд╕рдХрд╛ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдкреВрд░рд╛ рд╣реЛрдирд╛ рдмрд╛рдХреА рд╣реИред

рдУрд▓реЗрдЧ рдмрд╛рд░реНрдЯреБрдиреЛрд╡ рдХреЗ рд╡рд┐рдЪрд╛рд░, рдирд┐рдХрд┐рддрд╛ рдЧреНрд▓реВрдЦреЛрд╡ рдФрд░ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдХреЛрд░реЛрдЯрдХреЛрд╡ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рддреАрдиреЛрдВ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдкреНрд░реЛрдлреЗрд╢рдирд▓)ред

рдСрдкрд░реЗрдЯрд░ <-> (рдмреЙрдХреНрд╕, рдкреНрд╡рд╛рдЗрдВрдЯ)
рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ ред рдЧреБрдо рдСрдкрд░реЗрд╢рди рдХреЛ рдЬреАрдПрдирдЯреА рдФрд░ рдПрд╕рдкреА-рдЬреАрдПрд╕рдЯреА рдХреЗ рд▓рд┐рдП рдХреЗрдПрдирдПрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ ред рдЬреНрдпрд╛рдорд┐рддреАрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп PG12 рдореЗрдВ pointрдФрд░boxрдЖрдк рджреВрд░реА рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ <->(point, box), рдФрд░ рдпрд╣ GiST рдФрд░ SP-GiST рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЗ рд╕рд╛рде рдЦреЛрдЬ рдХреЛ рдЧрддрд┐ рджреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рд▓рд┐рдП рд╕рдордорд┐рдд рд╕рдВрдЪрд╛рд▓рдХ рдХреЛ <->(box, point)рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ boxрдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ - рдмрд╣реБрднреБрдЬ рдФрд░ рдордВрдбрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рджреВрд░реА рдХреЛ рд╕рдордЭрд╛ред

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)));

PG12 рдореЗрдВ:
SELECT p.point, b.box, b.box  <-> p.point distance FROM points AS p, boxes AS b ORDER BY distance;

:    : box <-> point

рдпрджрд┐ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ:

SELECT p.point, b.box, p.point  <-> b.box distance FROM points AS p, boxes AS b ORDER BY distance;

 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

рдФрд░ PG13 рдореЗрдВ:

SELECT p.point, b.box, b.box  <-> p.point distance FROM points AS p, boxes AS b ORDER BY distance;

 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

рдЗрд╕ рдСрдкрд░реЗрд╢рди рдореЗрдВ GiST рдФрд░ SP-GiST рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЛ рддреЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ PG13 рдореЗрдВ, рдпрджрд┐ рдЖрдк рдкреВрдЫреЗрдВ:

SELECT count(*) FROM pg_operator WHERE oprname = '<->';
 count 
-------
    28

рдФрд░ рдЕрдЧрд░ рд╣рдо PG12 рдореЗрдВ рднреА рдРрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ 20 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВ: 13 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд╕реВрдЪреА рдХреЛ 8 рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

Json


Jsonpath рдХреЗ рд▓рд┐рдП .datetime () рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди

рдпрд╣ JSONPath рдкреИрдЪ рдХреА рдПрдХ рдмрдбрд╝реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрд╕рдлрд▓ рдкреИрдЪ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рд╕реЗ PG12 рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдорд┐рд▓рд╛ред JSON / SQL рдорд╛рдирдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ JSONPath рдкреИрдЪ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рднреА рдХрд╛рд░реНрдп рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВ, рд▓реЗрдХрд┐рди рддрд╛рд░реАрдЦ рдХреА рддреБрд▓рдирд╛ рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреА рд╣реИ, рдЬреЛ рд╕рддреНрд░ рдХреЗ рджреМрд░рд╛рди рдмрджрд▓ рд╕рдХрддреА рд╣реИред

рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдо рдореМрдЬреВрджрд╛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЧреИрд░-рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рддреБрд▓рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕реА рд╕рдордп, рдЗрд╕ рдкреИрдЪ рдореЗрдВ рдкреНрд░рддреНрдпрдп _tz рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЯрд╛рдЗрдордЬрд╝реЛрди рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди - jsonb_set_lax рдлрд╝рдВрдХреНрд╢рди

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЬреБрдХреНрд╕рдм рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░-рд╕рдЦреНрдд (рд╕рдЦреНрдд рдХреЗ рд╡рд┐рдкрд░реАрдд) рдореЛрдб рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЪрд╛рд▓реВ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдПрдХ рддрд░реНрдХ рдЬреЛ рдЗрд╕реЗ рд▓реЗрддрд╛ рд╣реИ рд╡рд╣ NULL рд╣реИред рд╕рдЦреНрдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╡рд┐рдкрд░реАрдд - jsonb_set () - рдЗрд╕рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рд╣реИ рдЬреЛ NULL рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡рд┐рдХрд▓реНрдк: use_json_null / raise_exception / return_target / delete_keyред рдЗрдЪреНрдЫреБрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП рд╡рд┐рдХрд▓реНрдкред

рдХреБрдЫ jsonb рдлрдВрдХреНрд╢рдиреНрд╕ рдХреЛ

рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ред рдмрд╣реБрдд рдХреБрдЫ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ред, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдирд┐рдХрд┐рддрд╛ рдЧреНрд▓реВрдЦреЛрд╡ (рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдкреНрд░реЛрдлреЗрд╢рдирд▓) рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рд╕реЗред рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд░реНрде рд╣реИ: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрдирдХреА рдмрд╣реБрддрд╛рдпрдд рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЫреЛрдЯреЗ рд▓реЗрдЦ рдХреЛ рдлреБрд▓рд╛рдПрдЧреА; рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдкрд░рд┐рд╡рд░реНрддрди рдЖрдВрддрд░рд┐рдХ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ, рди рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВрдЧреЗ:

  1. рдЕрдиреБрдХреВрд▓рд┐рдд рдлрд╝рдВрдХреНрд╢рди JsonbExtractScalar ();
  2. рдЕрдиреБрдХреВрд▓рд┐рдд рдСрдкрд░реЗрдЯрд░ # >>, рдлрд╝рдВрдХреНрд╢рди jsonb_each_text (), jsonb_array_elements_text ();
  3. Get_jsonb_path_all () рдореЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд JsonbContainer рдкреНрд░рдХрд╛рд░ рдХреА рдорд╛рдиреНрдпрддрд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИ;
  4. JsonbIterator рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рдкрд╣рд▓рд╛ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣рд▓реНрдХреЗ рдореИрдХреНрд░реЛ JsonbContainerIsXxx () рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
  5. рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХреБрдВрдЬреА рдирд┐рд╖реНрдХрд░реНрд╖рдг - findJsonbKeyInObject ();
  6. рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рд╕рдВрдЧреНрд░рд╣рдг рдвреВрдВрдвреЗрдВJsonbValueFromContainer () рдФрд░ getIthJsonbValueFromContainer ();
  7. get_jsonb_path_all(), ;
    JsonbValueAsText.

, SQL/JSON: JSON_TABLE SQL/JSON: functions. . , . . PG14. JSONPath .


pgbench


рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдореЗрдВ рдХрдИ рд╕реБрдзрд╛рд░ рд╣реБрдПред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░ рдЖрдБрдХрдбрд╝реЗ рдереЗ , рдПрдХ рдЕрдзрд┐рдХ рджреГрд╢реНрдп рдирд┐рд╖реНрдХрд░реНрд╖ , рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ , рдЦрд╛рддреЛрдВ рдХреА рд╡рд┐рднрд╛рдЬрди рддрд╛рд▓рд┐рдХрд╛ рдкрд░ рдкрд░реАрдХреНрд╖рдг ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рдЗрд╕рдХреЗ \asetрд╕рдорд╛рди рдПрдХ рдХрдорд╛рдВрдб рдЬреЛрдбрд╝рд╛ \gset, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдореЗрдВ рднреЗрдЬреЗ рдЧрдП рдХрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЪрд░ рдХреЗ рд▓рд┐рдП рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрди, рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИ, рджреЛрдиреЛрдВ рдЪрд░ oneрдФрд░ two:
SELECT 1 AS one \; SELECT 2 AS two \aset

pg_dump


pg_dump рдиреЗ рддреГрддреАрдп-рдкрдХреНрд╖ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рдбреЗрдЯрд╛ рдЕрдирд▓реЛрдб рдХрд░рдирд╛ рд╕реАрдЦрд╛ ред рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, --include-foreign-dataрдЖрдк рддреГрддреАрдп-рдкрдХреНрд╖ рд╕рд░реНрд╡рд░ рдХреА рдПрдХ рд╕реВрдЪреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдбреЗрдЯрд╛ рдЕрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЗрд╕ рдЙрддрд░рд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдХрд░реЗрдВред рдЗрд╕ рддрдереНрдп рд╕реЗ рдмрд╣реБрдд рджреВрд░ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рддреГрддреАрдп-рдкрдХреНрд╖ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рджреМрд░рд╛рди рдПрдХ рддреГрддреАрдп-рдкрдХреНрд╖ рд╕рд░реНрд╡рд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрд╛ рдПрдХ рддреГрддреАрдп-рдкрдХреНрд╖ рд╕рд░реНрд╡рд░ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛ рдирд╣реАрдВ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реИред

psql


рдЫреЛрдЯреЗ рдкреИрдЪ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ psql рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЖрд░рд╛рдорджрд╛рдпрдХ рдмрдирд╛рддреА рд╣реИ:

  • рдХрдИ рдЯреАрдореЛрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдЯреИрдм рдкреВрд░рд╛ред
  • \echoSTDOUT рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рднреЗрдЬрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ , рдПрдХ рдирдпрд╛ рдХрдорд╛рдВрдб \warnрдорд╛рдирдХ рддреНрд░реБрдЯрд┐ рдЖрдЙрдЯрдкреБрдЯ (STDERR) рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рднреЗрдЬрддрд╛ рд╣реИред
  • \d toast- . \d+ .
  • \dt+ ┬лPersistence┬╗ (unlogged) (permanent).
  • \e , ; ( \g*). , psql .
  • . PROMPT1 PROMPT2 %x.
  • рдирдП рдЖрджреЗрд╢ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдкрд╣реБрдБрдЪ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: \dAc, \dAf, \dAo,\dAp
  • \gрдЕрдм рдЖрдк рдХреЛрд╖реНрдардХ рдореЗрдВ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ \psetред рд╡реЗ рд╡рд░реНрддрдорд╛рди рдЯреАрдо рдкрд░ рд╣реА рдХрд╛рд░реНрдп рдХрд░реЗрдВрдЧреЗред


libpq


PostgreSQL рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡:
  • рдореЗрдЬрдмрд╛рди рдФрд░ hostadr рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЕрд╢реБрджреНрдзрд┐ рдФрд░ \conninfopsql рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрдорд╛рдВрдб рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА рдЕрд╕рдВрдЧрддрд┐ рддрдп рдХреА рдЧрдИ рд╣реИред
  • рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреБрдВрдЬреА рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдЖрдк рдХреЗрд╡рд▓ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдореЛрдб рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирдпрд╛ sslpassword рдкреИрд░рд╛рдореАрдЯрд░ рдЖрдкрдХреЛ рдЧреИрд░-рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдХреБрдВрдЬреА рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ред
  • рджреЛ рдирдП рдкреИрд░рд╛рдореАрдЯрд░, sslminprotocolversion рдФрд░ sslmaxprotocolversion, рдЖрдкрдХреЛ SSL / TCL рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред

reindexdb


Reindexdb рдпреВрдЯрд┐рд▓рд┐рдЯреА рдХрд╛ рдирдпрд╛ - рдЯреЛрдирд░ рдкреИрд░рд╛рдореАрдЯрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

pg_rewind


рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреА рд╕реАрдорд╛рдПрдВ рдзреАрд░реЗ-рдзреАрд░реЗ рджреВрд░ рд╣реЛ рд░рд╣реА рд╣реИрдВ, рдФрд░ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдмрдврд╝ рд░рд╣реА рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, pg_rewind рдЕрдм рд░рд┐рдХрд╡рд░реА рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рд░рд┐рдХреЙрд░реНрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ pg_basebackup рдпрд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реИ), рд╕рд╛рде рд╣реА рд░рд┐рдХрд╡рд░реА рд╢реБрд░реВ рдХрд░рдирд╛ рдФрд░ рдмрд╛рдж рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрдВрдж рдХрд░рдирд╛ рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрд╛ рдЧрдпрд╛ рдерд╛ (рдпрд╣ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛)ред

рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, pg_rewind рдиреЗ Wal рдЖрд░реНрдХрд╛рдЗрд╡ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕реАрдЦрд╛ ред
рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдмрд╛рдж рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рдмреАрдЪ рд╡рд╛рд▓ рдбрд╛рдЗрд╡рд░реНрдЬреЗрдВрд╕ рдкреЙрдЗрдВрдЯ рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдЗрд╕реЗ рдЙрди рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдВрддрд░ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖реНрдп рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рд╕рднреА рд╡рд╛рд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХрд┐ рдкрд╛рдпрд╛ рдмрд┐рдВрджреБ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╡рд╛рд▓ рдлрд╛рдЗрд▓реЗрдВ рд▓рдХреНрд╖реНрдп рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкрд╣рд▓реЗ рдЕрдкрдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рдереАред

рдПрд▓реЗрдХреНрд╕реА рдХреЛрдВрдбрд░рд╛рдЯреЛрд╡ (рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдкреНрд░реЛрдлреЗрд╢рдирд▓) рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдкреИрдЪ рдХреЗ рд╕рд╛рде pg_rewind рдирдП -c рдпрд╛ --restore-target-wal-switch рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛_рдХреЙрдореИрдВрдб рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рд▓рд╛рдкрддрд╛ рд╡рд╛рд▓ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред

pg_waldump


pg_waldump рддреИрдпрд╛рд░ рд▓реЗрдирджреЗрди рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдЧрд╛ ред

amcheck


рдПрдорд╛рдЪреЗрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдиреЗ рдмреА-рдЯреНрд░реА рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдиреБрдХрд╕рд╛рди рдХреЛ рдмреЗрд╣рддрд░ рдкрд╣рдЪрд╛рдирдирд╛ рд╕реАрдЦрд╛ рд╣реИ ред
рд╡реИрд╕реЗ, рдЕрдм рдХреНрд╖рддрд┐рдЧреНрд░рд╕реНрдд рдкреГрд╖реНрдареЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд░реНрд╡рд░ рд▓реЙрдЧ рдореЗрдВ рд╕рдВрджреЗрд╢ рдЕрдиреБрдХреНрд░рдорд┐рдд рдФрд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдВрдЧреЗ ред

pageinspect


heap_tuple_infomask_flagsPageinspect рд╡рд┐рд╕реНрддрд╛рд░ рд╕рдорд╛рд░реЛрд╣ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ decrypts infomask рдФрд░ infomask2рд╕рдорд╛рд░реЛрд╣ рд╕реЗ рд▓реМрдЯ рдЖрдП heap_page_itemsред рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░ рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдореЗрдВ рдЙрдкрдпреЛрдЧреАред

postgres_fdw


рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдореИрдкрд┐рдВрдЧ рд╕реНрддрд░ рдкрд░ рд╕реБрдкрд░рдпреБрд╕рд░ рдирд┐рдпрдорд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрд┐рдирд╛ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИ :

ALTER USER MAPPING FOR  SERVER 
    OPTIONS (ADD password_required 'false');

рдпрд╣ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рдмреАрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдХрдиреЗрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ sslkey рдФрд░ sslcert рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ ред

adminpack


рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ - pg_file_syncред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдбрд┐рд╕реНрдХ рдкрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, pg_file_writeрдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд┐рдЦреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП fsync рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ COPY TOред

рдирд┐рдЧрд░рд╛рдиреА


pg_stat_slru


рд╕рд░реНрд╡рд░ рдХреА рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдореЗрдВ, рди рдХреЗрд╡рд▓ рдПрдХ рдмрдбрд╝рд╛ рдмрдлрд░ рдХреИрд╢ рд╣реИ, рдмрд▓реНрдХрд┐ рдХрдИ рдЕрдиреНрдп, рд╕рд░рд▓ рдХреИрд╢ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓реЗрдирджреЗрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП) рднреА рд╣реИрдВред рд╡реЗ рдХрдо рд╕реЗ рдХрдо рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреГрд╖реНрдареЛрдВ (рд╕рд░рд▓рддрдо-рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП, рдпрд╛ SLRU) рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЕрдм рддрдХ, рдРрд╕реЗ рдХреИрд╢ "рдмрд╕ рдХрд╛рдо рдХрд┐рдпрд╛", рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдореЙрдирд┐рдЯрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдХреНрдпреВрдПрд▓ рдХрд░реНрдиреЗрд▓ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЙрдирдореЗрдВ рдХреБрдЫ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдФрд░ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП, pg_stat_slru рдХрд╛ рдПрдХ рдирдпрд╛ рджреГрд╢реНрдп рд╕рд╛рдордиреЗ рдЖрдпрд╛ рд╣реИ ред

pg_stat_activity


рджреЗрдЦрдиреЗ рдореЗрдВ, pg_stat_activity рдирдпрд╛ рдХреЙрд▓рдо рд╣реИ leader_idред рд╕рдорд╛рдирд╛рдВрддрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдЧреНрд░рдгреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЖрдмрд╛рджреА рд╣реИред рдФрд░ рдЕрдЧреНрд░рдгреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ leader_idрдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдВрдЦреНрдпрд╛ рд╣реИ pidред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд╡реЗрд░реА рджрд┐рдЦрд╛рддреА рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреМрди рд╕реА рдХреНрд╡реЗрд░реА рдФрд░ рдХреМрди рд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдЪрд▓ рд░рд╣реА рд╣реИрдВ:

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;

рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддреЗ рд╣реИрдВред рджреЛ рдирдИ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ : BackupWaitWalArchiveрдФрд░ RecoveryPauseред рдФрд░ рдЕрдиреНрдп рджреЛ рдХреЛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдирд╛рдо рджрд┐рдП рдЧрдП: RecoveryWalStream -> RecoveryRetrieveRetryInterval, RecoveryWalAll -> RecoveryWalStreamред

рдФрд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рджреЛ рдФрд░ рдирдИ рдкреНрд░рддреАрдХреНрд╖рд╛ рдШрдЯрдирд╛рдПрдВ : RecoveryConflictSnapshot(VACUUM рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖, рдЬрд┐рд╕рдиреЗ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛) рдФрд░ RecoveryConflictTablespace(рддрд╛рд▓рд┐рдХрд╛ рд╕реНрдерд╛рди рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрдШрд░реНрд╖)ред

pg_stat_statements


рдЕрдм рддрдХ, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдиреЗ рдПрдХ рд╣реА рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреЗ pg_stat_statementsрд╕рд╛рде FOR UPDATEрдФрд░ рдЙрд╕рдХреЗ рдмрд┐рдирд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд┐рдпрд╛ рд╣реИ ред рдЕрдм рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдз FOR UPDATE рдЕрд▓рдЧ рд╕реЗ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╣реИрдВ ред

рдПрдХрддреНрд░ рдХреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдорд╛рддреНрд░рд╛ рдмрдврд╝ рдЧрдИ рд╣реИред рдЕрдм рд╕реЗ, рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рди рдХреЗрд╡рд▓ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рджрд░реНрдЬ рдХреА рдЬрд╛рддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдЙрддреНрдкрдиреНрди рдЬрд░реНрдирд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдкрд░ рднреА рдЖрдВрдХрдбрд╝реЗ рджрд░реНрдЬ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ ред рдирдИ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЙрд▓рдо: wal_bytes- рдЙрддреНрдкрдиреНрди рд░рд┐рдХреЙрд░реНрдб рдХреА рдорд╛рддреНрд░рд╛, wal_records- рдЙрддреНрдкрдиреНрди рд░рд┐рдХреЙрд░реНрдб рдХреА wal_num_fpwрд╕рдВрдЦреНрдпрд╛ , - рдкреВрд░реНрдг рдкреГрд╖реНрда рдЫрд╡рд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (рдкреВрд░реНрдг рдкреГрд╖реНрда рд▓рд┐рдЦрддреЗ рд╣реИрдВ)ред

рдпрд╣ рд╡рд╛рд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдзрдиреНрдпрд╡рд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдЗрд╕рд▓рд┐рдП, рдЕрдм EXPLAINрдПрдХ рдирдП рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдпрд╣ WALрдЙрддреНрдкрдиреНрди рд░рд┐рдХреЙрд░реНрдб рдХреА рдорд╛рддреНрд░рд╛ рджрд┐рдЦрд╛рдПрдЧрд╛:

CREATE TABLE t (id int);
EXPLAIN (ANALYZE, WAL, COSTS OFF, TIMING OFF, SUMMARY OFF)
    INSERT INTO t VALUES(1);

              QUERY PLAN              
--------------------------------------
 Insert on t (actual rows=0 loops=1)
   WAL:  records=1  bytes=59
   ->  Result (actual rows=1 loops=1)

рдПрдХреНрд╕рдЯреЗрдВрд╢рди auto_explain, VACUUMрдПрд╕ VERBOSE, рдФрд░ autovacuumрднреА рдмрдирд╛рдП рдЧрдП рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рд╡реЙрд▓реНрдпреВрдо рдХреЗ рд╡реЙрд▓реНрдпреВрдо рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдВрдЧреЗред

рд╡рд╛рдкрд╕ рдЖ рд░рд╣рд╛ рд╣реИ pg_stat_statementsред рдпрджрд┐ рдирдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ pg_stat_statements.track_planning рд╕рдХреНрд╖рдо рд╣реИ , рддреЛ рд╢реЗрдбреНрдпреВрд▓рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рджрд░реНрдЬ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ: рдпреЛрдЬрдирд╛ рдХреА рд╕рдВрдЦреНрдпрд╛; рдХреБрд▓ рдпреЛрдЬрдирд╛ рд╕рдордп; рдПрдХ рдирд┐рдпреЛрдЬрди рдХрд╛ рдиреНрдпреВрдирддрдо рдФрд░ рдЕрдзрд┐рдХрддрдо рд╕рдордп, рд╕рд╛рде рд╣реА рдорд╛рдзреНрдп рдФрд░ рдорд╛рдирдХ рд╡рд┐рдЪрд▓рдиред

рд╢реЗрдбреНрдпреВрд▓рд░ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрд╛рдВрдХрди рдПрдХ рдФрд░ рдкреИрдЪ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ pg_stat_statementsред EXPLAINрд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдпреЛрдЬрдирд╛ рд╕реНрддрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдмрдлрд╝рд░реЛрдВBUFFERS рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВрдЧреЗ :

EXPLAIN (ANALYZE, BUFFERS, COSTS OFF, TIMING OFF) 
    SELECT * FROM pg_class;

                   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

рдкрддреНрд░рд┐рдХрд╛


  • log_statement_sample_rate SQL, , log_min_duration_sample( ).
    , log_min_duration_statement , .. log_min_duration_statement , log_min_duration_sample, , log_statement_sample_rate.
    , log_transaction_sample_rate , , .
  • , ( log_min_error_statement), . log_parameter_max_length_on_error. 0, .
    log_parameter_max_length_on_error SQL, , .
    ( log_statements log_duration) , : log_parameter_max_length, , .
  • рдЕрдм рдЖрдк рд╕рд░реНрд╡рд░ рд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░ ( pg_stat_activity.backend_type) рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ ред рдЗрд╕рдХреЗ рд▓рд┐рдП log_line_prefix, рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рддреАрдХ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ %bред рдФрд░ рдЕрдЧрд░ рд▓реЙрдЧ рдХреЛ рд╕реАрдПрд╕рд╡реА ( log_destination=csvlog) рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ , рддреЛ рдХреЙрд▓рдо backend_typeрдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╣рд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реИред


рдкреНрд░рдЧрддрд┐


рдирдП рд╡рд┐рдЪрд╛рд░реЛрдВ pg_stat_progress_analyzeрдХреЛ рднреА pg_stat_progress_basebackupрдЖрдк рдХреА рдкреНрд░рдЧрддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдЖрдВрдХрдбрд╝реЗ рд╕рдВрдЧреНрд░рд╣ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ ANALYZEрдФрд░ рдХреА рдПрдХ рдмреИрдХрдЕрдк рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдЙрдкрдпреЛрдЧрд┐рддрд╛, pg_basebackupрдХреНрд░рдорд╢рдГред

рдЕрдиреБрдХреВрд▓рди


рдирд┐рдпреЛрдЬрди рдЪрд░рдг рдореЗрдВ FROM рдХреНрд▓реЙрдЬ рдореЗрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ред рд╣рд╛рдВрдЧреНрдЬреЛ
Kuzmenkov рдФрд░ рд╣рд╛рдВрдЧреНрдЬреЛ Parfyonov (рджреЛрдиреЛрдВ Postgres рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╕реЗ) рдХреЗ рдкреИрдЪ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВFROMрдХреЙрд▓ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЕрдиреБрд░реЛрдз рдХреЗ рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╕реНрдерд┐рд░ рдореВрд▓реНрдп рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдкреВрд░реНрдг-рдкрд╛рда рдЦреЛрдЬ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреНрд╡реЗрд░реА рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ:

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;

                              QUERY PLAN                              
------------------------------------------------------------------
 Sort
   Sort Key: (ts_rank_cd(mail_messages.tsv, '''tuple'''::tsquery)) DESC
   ->  Bitmap Heap Scan on mail_messages
         Recheck Cond: (tsv @@ '''tuple'''::tsquery)
         ->  Bitmap Index Scan on mail_messages_tsv_idx
               Index Cond: (tsv @@ '''tuple'''::tsquery)

рдХреЛрдИ рд╕рдВрдмрдВрдз рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпреЛрдЬрдирд╛ рдЪрд░рдг рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 'tuple' :: tsquery рдХреЛ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдВрд╕реНрдХрд░рдг 12 рдореЗрдВ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рддрд╕реНрд╡реАрд░ рдереА:

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;

                          QUERY PLAN                         
-----------------------------------------------------
 Sort
   Sort Key: (ts_rank_cd(mail_messages.tsv, q.q)) DESC
   ->  Nested Loop
         ->  Function Scan on q
         ->  Bitmap Heap Scan on mail_messages
               Recheck Cond: (tsv @@ q.q)
               ->  Bitmap Index Scan on mail_messages_tsv_idx
                     Index Cond: (tsv @@ q.q)


рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдЫрдБрдЯрд╛рдИ

рдЬрдм рдХрдИ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдЫрдБрдЯрд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (k1, k2, k3 ...), рддреЛ рд╢реЗрдбреНрдпреВрд▓рд░ рдЕрдм рдЗрд╕ рдЬреНрдЮрд╛рди рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдХреБрдВрдЬрд┐рдпреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, k1 рдФрд░ k2) рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╣реА рдЫрд╛рдБрдЯ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реЙрд░реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рд╕рдорд╛рди рд╕рдореВрд╣реЛрдВ k1 рдФрд░ k2 рдХреЗ рд╕рд╛рде рд▓рдЧрд╛рддрд╛рд░ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдВрдЬреА k3 рджреНрд╡рд╛рд░рд╛ "рд╕реЙрд░реНрдЯ" рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреВрд░реЗ рдЫрдВрдЯрд╛рдИ рдЫреЛрдЯреЗ рдЖрдХрд╛рд░ рдХреЗ рдХрдИ рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддреА рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд╣рд▓рд╛ рдбреЗрдЯрд╛ рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреА рджреЗрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯрд┐рдХрдЯ рдЯреЗрдмрд▓ рдкрд░ рдбреЗрдореЛрдмреЗрд╕ рдореЗрдВ рдЯрд┐рдХрдЯ_рдЖрдИрдбреА рдХреЙрд▓рдо рдкрд░ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реЛрддрд╛ рд╣реИред рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдЯрд┐рдХрдЯ_рдб рджреНрд╡рд╛рд░рд╛ рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд╡реЗрд░реА рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдЫрдБрдЯрд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧреА:

EXPLAIN (analyze, costs off, timing off)
SELECT * FROM tickets ORDER BY ticket_no, passenger_id;

                                  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
   ->  Index Scan using tickets_pkey on tickets (actual rows=2949857 loops=1)
 Planning Time: 2.137 ms
 Execution Time: 2230.019 ms

рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдЫрдБрдЯрд╛рдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ enable_incrementalsort рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЫрдВрдЯрд╛рдИ рдХрд╛рдлрд╝реА рд╕рдордп рд▓рдЧреЗрдЧрд╛:

SET enable_incrementalsort = off;
EXPLAIN (analyze, costs off, timing off)
SELECT * FROM tickets ORDER BY ticket_no, passenger_id;

                              QUERY PLAN                               
-----------------------------------------------------------------------
 Gather Merge (actual rows=2949857 loops=1)
   Workers Planned: 2
   Workers Launched: 2
   ->  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
         ->  Parallel Seq Scan on tickets (actual rows=983286 loops=3)
 Planning Time: 3.994 ms
 Execution Time: 12291.844 ms

2013 рдореЗрдВ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдЫрдБрдЯрд╛рдИ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдХреЛрд░реЛрдЯрдХреЛрд╡ (рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬрд╝ рдкреНрд░реЛрдлреЗрд╢рдирд▓) рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЕрдм, рд╕рд╛рдд рд╕рд╛рд▓ рдмрд╛рдж, рдкреИрдЪ рдХреЛ рдЬреЗрдореНрд╕ рдХреЛрд▓рдореИрди рджреНрд╡рд╛рд░рд╛ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЧрдП рд░рд╛рдЬреНрдп рдореЗрдВ рд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

TRUNCATE рддреНрд╡рд░рдг
рдЬрдм рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рд╕реЗ рдЯреЗрдмрд▓ рдмрдлрд╝рд░реНрд╕ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП TRUNCATEрд╕реНрдХреИрдирд┐рдВрдЧ рд╣реЛрддреА shared_buffersрд╣реИред рдкрд╣рд▓реЗ, рдкреНрд░рддреНрдпреЗрдХ рдЯреЗрдмрд▓ рд▓реЗрдпрд░ рдХреЗ рд▓рд┐рдП рддреАрди рдмрд╛рд░ рд╕реНрдХреИрдирд┐рдВрдЧ рдХреА рдЬрд╛рддреА рдереА: MAIN (рдореБрдЦреНрдп рдбреЗрдЯрд╛ рд▓реЗрдпрд░), FSM (рдлреНрд░реА рд╕реНрдкреЗрд╕ рдореИрдк), VM (рд╡рд┐рдЬрд┐рдмрд┐рд▓рд┐рдЯреА рдореИрдк)ред рдЕрдм рддрд░реНрдХ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдЯреНрд░рд┐рдкрд▓ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрдЬрд╛рдп, рдмрдлрд╝рд░реНрд╕ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╕реНрдХреИрди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдмрдбрд╝реЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде, shared_buffersрдпрд╣ рдПрдХ рдореВрд░реНрдд рд▓рд╛рдн рджреЗрддрд╛ рд╣реИред

рдЖрдВрд╢рд┐рдХ рд╡рд┐рдШрдЯрди рдЯреЛрд╕реНрдЯ
рдЬрдм рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЯреЛрд╕реНрдЯ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рд╢реБрд░реБрдЖрдд рдпрд╛ рд╢реБрд░реБрдЖрдд рдХреЗ рдХрд░реАрдм рдПрдХ рд╕реНрд▓рд╛рдЗрд╕ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред рд╕рдВрдкреАрдбрд┐рдд рдЯреЛрд╕реНрдЯ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ: рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдкрдврд╝реЗрдВ, рдпрджрд┐ рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕ рдкрд░ рдкрдврд╝реЗрдВред рдХреЛрдб рдЫрд╛рддреНрд░, рдПрдХ рднрд╛рд╖рд╛ рдХрд╛ рдПрдХ Google рд╕рдорд░ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛, рдЬреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ:

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;

Time: 28.123 ms

рдкреИрдЪ рдХреЗ рд╕рд╛рде, рддреАрд╡реНрд░рддрд╛ рдХрд╛ рдПрдХ рдХреНрд░рдо:

Time: 2.306 ms

рд╕рдорд╛рдирд╛рдВрддрд░ VACUUM рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░
рдЕрдкрдиреЗ рд▓реЗрдЦ рдореЗрдВ, рдпреЗрдЧреЛрд░ рд░реЛрдЧреЛрд╡ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЗрд╕ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрджрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рддреЗ рд╣реИрдВред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: тАЬрдкреИрдЪ рдорд╛рд╕рд╛рд╣рд┐рдХреЛ рд╕рд╛рд╡рд╛рдбрд╛, рдЬреЛ рдЖрдкрдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╕рдлрд╛рдИ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдЕрднреА рднреА рдПрдХ (рдЕрдЧреНрд░рдгреА) рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдлрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдм рдкреГрд╖реНрдарднреВрдорд┐ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рд╕реЗ рдПрдХред рдореИрдиреБрдЕрд▓ рдореЛрдб рдореЗрдВ, рдпрд╣ рдЖрдкрдХреЛ рдХрдИ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЗ рд╕рд╛рде рдмрдбрд╝реА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рд╕рдлрд╛рдИ рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ; рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдлрд╛рдИ рдЕрднреА рддрдХ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред "

рдЬрдм рдПрдХ рдЯреЗрдмрд▓ рдореЗрдВ рдЪрд┐рдкрдХрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдСрдЯреЛ рдХреНрд▓реАрди
рдЗрд╕ рдкреИрдЪ рдХреЗ рд▓рд┐рдП (рдЬрд┐рд╕реЗ рдмрд░реНрд╕рдХ рдСрдЯреЛ-рд╡реИрдХреНрдпреВрдо рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ), рд╣рдореЗрдВ рдбреЛрд░реЛрдлреА рдкреНрд░реЛрд▓реЗрд╕реНрдХреЛрд╡реНрд╕реНрдХреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛: рдСрдЯреЛ-рдХреНрд▓реАрдирд┐рдВрдЧ рдПрдкреЗрдВрдб-рдУрдирд▓реА рдЯреЗрдмрд▓ рдкрд░ рдирд╣реАрдВ рдЖрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ "рдореГрдд" рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рджреГрд╢реНрдпрддрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреЗрд╡рд▓ рдЗрдВрдбреЗрдХреНрд╕-рдХреЗрд╡рд▓ рд╕реНрдХреИрди рдЕрдкреНрд░рднрд╛рд╡реА рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рд╕рдлрд╛рдИ рдХрд╛рдЙрдВрдЯрд░ рдУрд╡рд░рдлреНрд▓реЛ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдмрд╣реБрдд рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЕрдм рдпрд╣ рд╕реНрдерд┐рддрд┐ рдареАрдХ рд╣реЛ рдЧрдИ рд╣реИ: рдСрдЯреЛ-рдХреНрд▓реАрдирд┐рдВрдЧ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рднреА рдХрд╛рдо рдХрд░реЗрдЧреАред рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП ( рдФрд░ ) рдХреЗ рд╕рдорд╛рди рджреЛ рдирдП рд╕рд░реНрд╡рд░ рдкреИрд░рд╛рдореАрдЯрд░ ( autovacuum_vacuum_insert_thresholdрдФрд░ autovacuum_vacuum_insert_scale_factor) рджрд┐рдЦрд╛рдИ рджрд┐рдП ред рд╣реИрд╢ рдПрдЧреНрд░реАрдЧреЗрдЯ рдореЗрдореЛрд░реА рдореИрдиреЗрдЬрдореЗрдВрдЯautovacuum_vacuum_thresholdautovacuum_vacuum_scale_factor


рд╣реИрд╢ рдПрдХрддреНрд░реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╢реЗрдбреНрдпреВрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд╕реЛрдЪрд╛ рдЧрдпрд╛ рдФрд░ рд╕рдВрдХреЗрддрд┐рдд рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд░реИрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ work_memред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕ рддрд░рд╣ рдХреЗ рд╢реЗрдбреНрдпреВрд▓рд░ рддреНрд░реБрдЯрд┐ рдиреЗ рдЗрд╕ рддрдереНрдп рдХреЛ рдЬрдиреНрдо рджрд┐рдпрд╛ рдХрд┐ рдЖрдХрд╛рд░ рдХреЛ work_memрдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдУрдУрдПрдо рдХрд┐рд▓рд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдпрд╛ рдЖрдЧрдорди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЧрдИ рдереАред рдЕрдм рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрд░реЗ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ work_mem, рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдбрд┐рд╕реНрдХ рдкрд░ рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЕрдиреБрд╕реВрдЪрдХ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рджрд┐рдЦрд╛рдИ рджрд┐рдП: enable_groupingsets_hash_diskрдФрд░ enable_hashagg_diskред

рдЙрддреНрдкрдиреНрди рдХреЙрд▓рдо рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди рдЕрджреНрдпрддрди
рд╕рдВрд╕реНрдХрд░рдг 12 рдореЗрдВ, рдЙрддреНрдкрдиреНрди рдХреЙрд▓рдо рдХрд┐рд╕реА рднреА рдкрдВрдХреНрддрд┐ рдЕрджреНрдпрддрди рдХреЗ рджреМрд░рд╛рди рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдереЗ, рднрд▓реЗ рд╣реА рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдиреЗ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реЛред рдЕрдм рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рддрднреА рдкреБрдирд░реНрдЧрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдЗрд╕рдХреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рдпрджрд┐ рдЙрдирдХреЗ рдЖрдзрд╛рд░ рд╕реНрддрдВрдн рдмрджрд▓ рдЧрдП рд╣реИрдВ)ред

рдпрд╣ рдЕрдиреБрдХреВрд▓рди, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЙрддреНрдкрдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреЙрд▓рдо рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдЕрджреНрдпрддрди рдХреЛ рддреЗрдЬ рдХрд░ рд╕рдХрддрд╛ рд╣реИ tsvector, рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди to_tsvector()рдХрд╛рдлреА рдорд╣рдВрдЧрд╛ рд╣реИред

рдмрджрд▓реЗ рд╣реБрдП рдХреЙрд▓рдо рдХреА рд╕реВрдЪреА рдореЗрдВ рдЯреНрд░рд┐рдЧрд░ рд╕реЗ рдкрд╣реБрдВрдЪ
рдПрдХ рдЫреЛрдЯрд╛ рдкреИрдЪ рдЬреЛ рд╕рдВрд░рдЪрдирд╛ TriggerDataрдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХреЙрд▓рдо рдХрд╛ рдПрдХ рдмрд┐рдЯрдореИрдк рдЬреЛрдбрд╝рддрд╛ рд╣реИ ред рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рдорд╛рдиреНрдп рдЯреНрд░рд┐рдЧрд░ рдХрд╛рд░реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ tsvector_update_trigger()рдпрд╛ lo_manage(), рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрд╛рдо рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╕рдордп рдХрдИ рдЙрдиреНрдирдд рдЖрдБрдХрдбрд╝реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ
PG12 рдореЗрдВ, рд╢реЗрдбреНрдпреВрд▓рд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рд╣реА рдЯреЗрдмрд▓ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрдиреНрдирдд рдЖрдВрдХрдбрд╝реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рд╕реНрддрдВрднреЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рджреЛ рдЙрдиреНрдирдд рдЖрдБрдХрдбрд╝реЗ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ, рдФрд░ рдПрдХ рд╕реЗрдЯ рд╕реЗ рдХреЙрд▓рдо рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ рдХреНрд╡реЗрд░реА рдореЗрдВ рднрд╛рдЧ рд▓реЗрддреЗ рд╣реИрдВред рдЕрдм рдпреЛрдЬрдирд╛рдХрд╛рд░ рдХреЗ рдкрд╛рд╕ рд╕рднреА рдЙрдкрд▓рдмреНрдз рд╕реВрдЪрдирд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред

рд╕рдорд╛рдирд╛рдВрддрд░рдХрд░рдг рдФрд░ COPY рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ ( рдпрд╣ рдкреИрдЪ рднреА рджреЗрдЦреЗрдВ ) ред
PostgreSQL рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдЕрднреА рднреА рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░реЛрдХрдирд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдп (рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдирд╛рдВрддрд░ рд╕рдореВрд╣ рдореЗрдВ рд╢рд╛рдорд┐рд▓) рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдРрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рддрд╛рд▓реЗ рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдПрдХ рд╣реА рдореЗрдЬ рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрд╛рд▓рд╛ рд▓рдЧрд╛ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд░реНрдиреЗрд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рд╡рд┐рд╢реЗрд╖ рджреЗрдЦрднрд╛рд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдпрдерд╛ рдЙрдирдХреЗ рдкрд╛рд╕ рд▓рдЧрд╛рддрд╛рд░ рдЧрддрд┐рд░реЛрдз рд╣реЛрддреЗред
рд▓реЗрдХрд┐рди рджреЛ рдЕрдкрд╡рд╛рдж рд╣реИрдВ:

  • рд░рд┐рд▓реЗрд╢рди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓реЙрдХ, рдЬрд┐рд╕реЗ рддрдм рдХреИрдкреНрдЪрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдбреЗрдЯрд╛ рдкреЗрдЬ рдХреЗ рдЕрдВрдд рдореЗрдВ рдирдП рдкреЗрдЬ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░
  • рдкреГрд╖реНрда рд▓реЙрдХ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реВрдЪреА рд╕реЗ рдореБрдЦреНрдп рдкреЗрдбрд╝ рдкрд░ GIN рд╕реВрдЪрдХрд╛рдВрдХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

(рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ ред )
рдЗрд╕ рддрд░рд╣ рдХреЗ рддрд╛рд▓реЗ рдХреЛ рд╕рдорд╛рди рд╕рдорд╛рдирд╛рдВрддрд░ рд╕рдореВрд╣ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рднреА рд╕рдВрдШрд░реНрд╖ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рдЬреЛ рдЗрд╕ рдкреИрдЪ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпреЗ рддрд╛рд▓реЗ рдХрднреА рдЧрддрд┐рд░реЛрдз рдкреИрджрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╕реНрдХреИрди рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреИрдЪ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╕рдорд╛рдирд╛рдВрддрд░ INSERT рдФрд░ COPY рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рдкреНрд░рд╢рд╕реНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдпрд╣ рдЙрдЪреНрдЪ рд▓реЛрдб рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рддрд╣рдд PostgreSQL рдмрд╛рдзрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ (рдЬрд┐рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рд╕реБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдПрдЪрдПрд▓ ++ )ред

рд╕реБрд░рдХреНрд╖рд╛


SKH PRH
рдкреНрд░рд┐рдЬреНрдореНрд╕ рдиреЗ рдЕрдм рдЦрд░рд╛рдм рд╣реЛ рдЪреБрдХреЗ SKIP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрджрд▓ рджрд┐рдП рдЧрдП EDH рдкреНрд░рд╛рдЗрдореНрд╕ (Diffie-Hellman Ephemeral Keys) рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ ред

initdb: рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕
рдмрджрд▓ рдЧрдИ рд╣реИрдВ initdb рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рд╕реНрдерд╛рдиреАрдп рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдХреНрд╕реЗрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрджрд▓ рдЧрдИ рд╣реИрдВред рдЕрдм рдореЗрдВpg_hba.confрдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рдХрдиреЗрдХреНрд╢рди рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рдзрд┐ рдХреЗ рдмрдЬрд╛рдпtrustрд╣реЛ рдЬрд╛рдПрдЧрд╛peer(рдпрд╛ md5 рдпрджрд┐ рд╕рд╣рдХрд░реНрдореА рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ), рдФрд░md5рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдПред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдЕрдзрд┐рдХ рдЙрджрд╛рд░ рдЙрдкрд╛рдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ: рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреАред рддреЛ рдореБрд╢реНрдХрд┐рд▓scram-sha-256:ред рдирддреАрдЬрддрди, рд╣рдордиреЗ рдЦреБрдж рдХреЛpeerрдФрд░рддрдХ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛md5ред

Clar_bzero рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреИрдЪред Bzero () рдФрд░ clar_bzero () OS рдлрд╝рдВрдХреНрд╢рди рд╕рдВрдХреЗрддрд┐рдд рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ '\0'( рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП , рд▓рд┐рдирдХреНрд╕)ред рдпреЗ рдкреИрдЪ рд╕рд┐рд░реНрдл рд╢реБрд░реБрдЖрдд рд╣реИрдВ: рдореЗрдореЛрд░реА рдХреЗ рдХрдИ рдЦрдВрдб рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рдЕрдиреНрдп рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рд░рд╣ рд╕рдХрддреА рд╣реИред рд╣рдордиреЗ libpq рдЬреИрд╕реА рдЬрдЧрд╣реЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдкреВрд░реА рдлрд╛рдЗрд▓ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдореЗрдореЛрд░реА рдореЗрдВ рд░рд╣ рд╕рдХрддреА рд╣реИред Be-Secure-common.c рдореЗрдВ рдЕрдм SSL рдореЗрдВ рджрд░реНрдЬ рдЧреБрдкреНрдд рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХрд╛ рдУрд╡рд░рд░рд╛рдЗрдЯрд┐рдВрдЧ рд╣реИ, рдЬреЛ рддреНрд░реБрдЯрд┐ рдХреА рд░реЗрдЦрд╛ (рдкрде) рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред

Libpq рдореЗрдВ "password_protocol" рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
рдпрд╣ рдкреИрдЪ libpq рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХрдиреЗрдХреНрд╢рди рдХреЗ рджреМрд░рд╛рди рдХрд┐рд╕ рдкрд╛рд╕рд╡рд░реНрдб рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, libpq рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рдордирд╛ рдХрд░ рджреЗрдЧрд╛ рдпрджрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдПрдХ рд╕реЗ рдХрдордЬреЛрд░ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ plaintext, рдЕрд░реНрдерд╛рдд, рд╕рднреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред

TRUNCATE рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд╡рд╛рд░реНрдп рдкрд╣реБрдБрдЪ
рдпрд╣ рдкреИрдЪ TRUNCATE рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд╡рд╛рд░реНрдп рдкрд╣реБрдБрдЪ рдирд┐рдпрдВрддреНрд░рдг (MAC) рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред рдЕрдм рдЗрд╕рдХреЗ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЬрд╛рдБрдЪ рд╕реАрдкреНрд╕рдЧреНрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рдПрдЧреА ред SELinux рд╕рдВрджрд░реНрдн рдиреАрддрд┐ рдФрд░ Redhat- рдЖрдзрд╛рд░рд┐рдд рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг db_table {truncate} рдкрд░ SELinux рдЬрд╛рдБрдЪ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, sepgsql рдХрд╛ рдЙрдкрдпреЛрдЧ 1 рдХреЗ рдмрд░рд╛рдмрд░ 'deny_unknown' рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ TRUNCATE рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

GUC ssl_passphrase_command рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛
рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧреА рдкреИрдЪред рдЕрдм ssl_passphrase_command рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорд╛рди рдХреЗрд╡рд▓ рд╕реБрдкрд░рдпреБрд╕рд░ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рдмрд╛рд╣рд░реА рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдПрдХ SSL рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рдЬреА рдХреБрдВрдЬреАред

рд╕реНрдерд╛рдиреАрдпрдХрд░рдг


рд╡рд░реНрдЬрдирд┐рдВрдЧ рд▓рд┐рдмрд╛рд╕ рдХреЛрд▓рд╛рдЬреЗрд╢рди рдирд┐рдпрдо
ICU рдХреЛрд▓рд╛рдЬреЗрд╢рди рд░реВрд▓реНрд╕ рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдЬрди рдирдВрдмрд░реЛрдВ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рднреА рдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЫрдБрдЯрд╛рдИ, рд╡рд░реНрдг рддреБрд▓рдирд╛), рд╕рд╣реЗрдЬреЗ рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдХреЛ OS рдореЗрдВ ICU рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрд╢реЛрдзрд┐рдд рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд┐рд░реНрдорд┐рдд рдХреБрдЫ рд╕реВрдЪрдХрд╛рдВрдХ рдЧрд▓рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рдХреЗALTER COLLATION ... REFRESH VERSION, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдирд┐рдпрдо рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЪреЗрддрд╛рд╡рдиреА рдЕрдм рдЬрд╛рд░реА рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред

рд▓реЗрдХрд┐рди рд╡рд╣ рдХреЗрд╡рд▓ рдЖрдИрд╕реАрдпреВ рдХреЗ рд▓рд┐рдП рдерд╛ред рдЕрдм рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рднреА libc рдЫрдБрдЯрд╛рдИ рдирд┐рдпрдореЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИ:

SELECT collname, collversion FROM pg_collation WHERE collname = 'ru_RU';

 collname | collversion
----------+-------------
 ru_RU    | 2.27

рдЬреЛ рдУрдПрд╕ рдореЗрдВ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдмрджрд▓рдиреЗ рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред 2.28 рдХреЗ рд╕рдВрдХреНрд░рдордг рдХреЗ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ рдмрд╣реБрдд рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рдЬрд╣рд╛рдВ рдХрдИ рдЫрдВрдЯрдиреА рдХреЗ рдирд┐рдпрдо рдмрджрд▓ рдЧрдП рд╣реИрдВ, рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рд╡реЗ 2.28 рдкрд░ рдирд╣реАрдВ рдЧрдП, рддрдм рддрдХ рд╕рдм рдХреБрдЫ рд╢рд╛рдВрдд рд╣реИ:
ALTER COLLATION "ru_RU" REFRESH VERSION;

NOTICE:  version has not changed
ALTER COLLATION

рдкреВрд░рд╛ рдкрд╛рда рдЦреЛрдЬреЗрдВ


рдЧреНрд░реАрдХ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдлреБрд▓рдЯреЗрдХреНрд╕реНрдЯ рдЦреЛрдЬ
рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВред

рддрд╛рдирд╛рд╢рд╛рд╣реЛрдВ рдиреЗ рдирд┐рд░рдкреЗрдХреНрд╖ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд╕реАрдЦрд╛ред
рддрд╛рдирд╛рд╢рд╛рд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╢рдмреНрджрдХреЛрд╢ (рдЙрд░реНрдл рдПрдХреНрд╕рдЯреЗрдВрд╢рди) рдиреЗ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╕рдВрдХреЗрдд рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ред


CREATE EXTENSION dict_int;
SELECT ts_lexize('intdict', '-123');

ts_lexize
-----------
 {-123}
(1 row)

ALTER TEXT SEARCH DICTIONARY intdict (ABSVAL = true);
SELECT ts_lexize('intdict', '-123');

ts_lexize
-----------
 {123}
(1 row)

рдпрд╣реА рд╣реИ, рдЗрд╕ рдмрд╛рд░ рдкреВрд░реНрдг рдореВрд▓реНрдп рдХреЛ рдорд╛рдиреНрдпрддрд╛ рджреА рдЧрдИ рдереАред

рд╡рд┐рднрд╛рдЬрди


рд╡рд┐рднрд╛рдЬрди рддрд╛рд▓рд┐рдХрд╛
рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдЕрдзрд┐рдХ рдкрдВрдХреНрддрд┐ рдЯреНрд░рд┐рдЧрд░BEFOREрд╣реЛрддреА рд╣реИрд╕рдВрд╕реНрдХрд░рдг 12 рдореЗрдВ, рдЖрдкрд╡рд┐рднрд╛рдЬрди рддрд╛рд▓рд┐рдХрд╛ рдкрд░рдкрдВрдХреНрддрд┐ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗред рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧреЛрдВ рдкрд░ - рдХреГрдкрдпрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдореЗрдВ рдкреВрд░реА рдореЗрдЬ рдкрд░ рдирд╣реАрдВред рдЕрдм, рдПрдХBEFORE FOR EACH ROWрд╡рд┐рднрд╛рдЬрди рддрд╛рд▓рд┐рдХрд╛ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛рдПрдХрдЯреНрд░рд┐рдЧрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗрдЧрд╛ рдФрд░ рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕ рд╢рд░реНрдд рдХреЗ рд╕рд╛рде рдХрд┐ рдпрджрд┐ рдпрд╣ рдПрдХ рдЯреНрд░рд┐рдЧрд░ рд╣реИUPDATE, рддреЛ рдЗрд╕рдореЗрдВ рд╡рд┐рднрд╛рдЬрди рдХреБрдВрдЬреА рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдЕрдиреБрднрд╛рдЧ рдХреЗ рднреАрддрд░ рд╣реА рдмрджрд▓ рд╕рдХрддреА рд╣реИред

рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░рддрд┐рдХреГрддрд┐ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди
рдкреВрд░реНрд╡ рдореЗрдВ, рдкреНрд░рдХрд╛рд╢рди рдореЗрдВ рд╡рд┐рднрд╛рдЬрди рддрд╛рд▓рд┐рдХрд╛ рд╕рд╣рд┐рдд рддреНрд░реБрдЯрд┐ рд╣реБрдИред

CREATE PUBLICATION pub FOR TABLE p;

ERROR:  "p" is a partitioned table
DETAIL:  Adding partitioned tables to publications is not supported.
HINT:  You can add the table partitions individually.

рдЕрдм рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред 11 рд╡реАрдВ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ

рдЕрдиреБрднрд╛рдЧреАрдп рдЬреЛрдЗрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рд╕реБрдзрд╛рд░
, рдЕрдиреБрд╕реВрдЪрдХ рд╡рд┐рднрд╛рдЬрди рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЕрдЧрд░ рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреА рд╕реАрдорд╛рдПрдВ рдмрд┐рд▓реНрдХреБрд▓ рдореЗрд▓ рдЦрд╛рддреА рд╣реИрдВред рдЕрдм рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЦрдВрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджреВрд╕рд░реЗ рдХреЗ рдЦрдВрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рднрд▓реЗ рд╣реА рдЙрдирдХреЗ рдЖрдХрд╛рд░ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рджрд┐рди рдФрд░ рджреВрд╕рд░реЗ рдорд╣реАрдиреЗ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддреА рд╣реИ)ред рдирдпрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрд░реНрд╡рддрдорд╛рд▓рд╛ рдФрд░ рд╕реВрдЪрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЕрдиреБрднрд╛рдЧреАрдп рдкреВрд░реНрдг OOO JOIN рдЕрдиреБрднрд╛рдЧреАрдп рдЬреБрдбрд╝рд╛рд╡
рдЕрдм рдПрдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП рдкреВрд░реНрдг рдмрд╛рд╣рд░реА рдЬреЛрдбрд╝ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ USINGред

tableam


рдЗрд╕ рдЖрдХрд░реНрд╖рдХ рдФрд░ рдЖрд╢рд╛рдЬрдирдХ, рд▓реЗрдХрд┐рди рдХрдард┐рди рдХреНрд╖реЗрддреНрд░ рдореЗрдВ, PostgreSQL 12. рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдХрдЯреНрдЯрд░рдкрдВрдереА рдЕрдЧреНрд░рд┐рдо рдирд╣реАрдВ рд╣реИрдВред zheapрдвреЗрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рддреИрдпрд╛рд░ рдкреНрд▓рдЧ-рдЗрди рд╕реНрдЯреЛрд░реЗрдЬ рдирд╣реАрдВ рд╣реИрдВ ), рд▓реЗрдХрд┐рди рдПрдкреАрдЖрдИ рдкрд░ рдХрд╛рдо рдЬрд╛рд░реА рд╣реИред

рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рдПрдХ рдЙрдЪреНрдЪ рд╕реНрддрд░
рд░реЙрдмрд░реНрдЯ рд╣рд╛рд╕ рдиреЗ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛, рддрд╛рдХрд┐ рдЗрд╕рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдЕрдореВрд░реНрдд рдкрд░рддреЛрдВ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдП, рддрд╛рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреЛрдб рдХреА рдирдХрд▓ рди рд╣реЛ рд╕рдХреЗред рдпрд╣ рдЯреБрдХрдбрд╝рд╛ estimate_rel_size- рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдкрд░рддреЛрдВ (рдХрд╛рдВрдЯреЗ) рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ ред

рдЖрдк рд░рд┐рд▓реЗ рдХреЗ рд╕рд╛рде рдЯреЗрдмрд▓ рдПрдХреНрд╕реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдкреИрдЪ рдЗрдВрдбреЗрдХреНрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЯреЗрдмрд▓ рдПрдХреНрд╕реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрди рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд▓рд╛рддрд╛ рд╣реИред

рдЯреИрдмреНрд▓реЗрдо рдФрд░ рдЯреЛрд╕реНрдЯ
рдЯреЛрд╕реНрдЯ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВheapрдЗрд╕рд▓рд┐рдП, рдирдП рдЯреЗрдмрд▓ рдПрдХреНрд╕реЗрд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдмрдирд╛рддреЗ рд╕рдордп , рдЖрдк рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: рдирдП рддрд░реАрдХреЛрдВ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреАрдХреГрдд рдХрд░реЗрдВ, рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЙрдирдореЗрдВ рдЯреЛрд╕реНрдЯ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдпрд╛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдХреНрдпреВрдПрд▓ рд╕реНрдЯреЛрд░реЗрдЬ - рд╣реАрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЯреЛрд╕реНрдЯ рдХреЛ рдХрд╛рдо рджреЗрдВред 5 рдкреИрдЪ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕рдореНрдорд┐рд▓рд┐рдд / рдЕрдкрдбреЗрдЯ / рдбрд┐рд▓реАрдЯ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреВрдкрд▓ рд╕реНрд▓реЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рдФрд░ рдЙрди рддрд░реАрдХреЛрдВ рд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИ рдЬреЛ рджреЛрдиреЛрдВ рддрд░рд╣ рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВред

fsync


Pg_receivewal рдФрд░ pg_recvlogical рдореЗрдВ fsync рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╣реИрдВрдбрд▓
рдХрд░рдирд╛ fsync () рдХреЗ рдЦрд┐рд▓рд╛рдл рд▓рдбрд╝рд╛рдИрдЬрд╛рд░реА рд╣реИред PostgreSQL рдХрд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдПрдХ рд╕рдлрд▓ fsync () рдХреЙрд▓ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕рд╛рд░рд╛ рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХ рдореЗрдВ рдлреНрд▓рд╢ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (OS рдирд┐рд░реНрднрд░) рдФрд░ рдбреЗрдЯрд╛ рд╣рд╛рдирд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред PG13 рдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИpg_receivewalрдФрд░pg_recvlogicalред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╣ рд╣реИ: рдпреЗ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рд▓реЙрдЧ рдореЗрдВ fsync рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдХрдиреЗрдХреНрд╢рди рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ рдЬреИрд╕реЗ рдХрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ред рдирддреАрдЬрддрди, рд╡рд╛рд▓ рдореЗрдВ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдбрд┐рд╕реНрдХ рдкрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдлреНрд▓рд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред Pg_dump, pg_basebackup, pg_rewind рдФрд░ pg_checksums рдХреЗ рднрд╛рдЧреНрдп рдкрд░ рднреА рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рдЕрдм рддрдХ рдЦреБрдж рдХреЛ рдЗрди рджреЛрдиреЛрдВ рддрдХ рд╣реА рд╕реАрдорд┐рдд рд░рдЦрд╛ рд╣реИред

Fsync рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рдлрд╝реНрд▓реИрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕реБрд░рдХреНрд╖рд╛ ()
рдпрд╣ рдкреИрдЪ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдлрд╝реНрд▓реИрдХреНрд╕ (fsync) рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рдлрд╝реНрд▓реИрдЧ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ - рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рд▓рд┐рдЦрдиреЗ рдпрд╛ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реА рд╣реИрдВред

рдмреИрдХрдЕрдк рдФрд░ рдкреНрд░рддрд┐рдХреГрддрд┐


рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдмрд┐рдВрджреБ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рджреМрд░рд╛рди рд░реБрдХреЗрдВ
рдпрджрд┐ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рджреМрд░рд╛рди рд╡рд╛рд▓реНрд╕ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рдиrecovery_target_timeрд╡реЗрдирд┐рд░реНрджрд┐рд╖реНрдЯрдПрдХ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗ рд╣реИрдВ, рддреЛ рд╕рд░реНрд╡рд░ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдСрдкрд░реЗрд╢рди рдореЛрдб рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИред рдЕрдм рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╡рд╕реВрд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд░реБрдХ рдЬрд╛рдПрдЧреА, рдЬреИрд╕рд╛ рдХрд┐ рд▓реЙрдЧ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЗ рдкрд╛рд╕ рд▓рд╛рдкрддрд╛ рд╡рд╛рд▓ рд╕реЗрдЧрдореЗрдВрдЯ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реЛрдЧрд╛ред

Ign_invalid_pages рдкреИрд░рд╛рдореАрдЯрд░
рдЬрдм рдкреНрд░рддрд┐рдХреГрддрд┐ рдкрд░ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд╛рд▓ рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдЕрдорд╛рдиреНрдп рдкреГрд╖реНрда рдХрд╛ рд▓рд┐рдВрдХ рдвреВрдВрдврддрд╛ рд╣реИ, рддреЛpanic-aрд╣реЛрддрд╛ рд╣реИред рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рд╕реЗ рдЗрд╕реЗ рджреВрд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАредignore_invalid_pagesред рдЕрдЦрдВрдбрддрд╛, рдбреЗрдЯрд╛ рдФрд░ рдЕрдиреНрдп рд╕рдмрд╕реЗ рдЧрдВрднреАрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдиреБрдХрд╕рд╛рди рдХреЗ рд╕рд╛рде рд╡рд╕реВрд▓реА рдЬрд╛рд░реА рд░рд╣реЗрдЧреАред рдкреИрд░рд╛рдореАрдЯрд░ рд╕рд░реНрд╡рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдЖрдкрдХреЛ рдЕрднреА рднреА рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕реЗрд░реНрдЧреЗрдИ

рдХреЛрд░реНрдирд┐рд▓реЛрд╡
рдХреЗ рдкреИрдЪ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдП рдмрд┐рдирд╛ рдкреНрд░рд╛рдЗрдорд░реА_рдХреЛрдирд┐рдирдлреЛ рдХреЛ рдмрджрд▓рдирд╛ , рдЬреЛ рдЖрдкрдХреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ primary_conninfo, primary_slot_nameрдФрд░ wal_receiver_create_temp_slotрд╕рд░реНрд╡рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд┐рдП рдмрд┐рдирд╛ред рджрд░рдЕрд╕рд▓, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЛрдВрдиреЗ recovery.conf12 рд╡реАрдВ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдлрд╛рдЗрд▓ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ ред Pg_basebackup

рдмреИрдХрдЕрдк
рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдЕрдм рдПрдХ "рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ" рдмрдирд╛рддрд╛ рд╣реИ - рдПрдХ JSON рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕рдореЗрдВ рдмреИрдХрдЕрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ (рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдФрд░ рдЖрдХрд╛рд░, рдЖрд╡рд╢реНрдпрдХ рд╡рд╛рд▓ рдлрд╝рд╛рдЗрд▓реЗрдВ, рд╕рд╛рде рд╣реА рд╕рдм рдХреБрдЫ рдФрд░ рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдЪреЗрдХрд╕рдо)ред
рдирдИ pg_validatebackup рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдмреИрдХрдЕрдк рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИ, рдФрд░ pg_waldump рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ WAL рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдФрд░ рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рднреА рдЬрд╛рдБрдЪ рдХрд░рддреА рд╣реИ (рдпрд╣ рдХреЗрд╡рд▓ рдмреИрдХрдЕрдк рдХреЗ рднреАрддрд░ рд╡рд╛рд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдирд╣реАрдВ)ред
рдпрд╣ рдЖрдкрдХреЛ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬрд╣рд╛рдВ рдмреИрдХрдЕрдк рдлрд╝рд╛рдЗрд▓реЗрдВ рдХреНрд╖рддрд┐рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдИрдВ рдпрд╛ рдЧрд╛рдпрдм рд╣реЛ рдЧрдИрдВ, рдпрд╛ рдЬрдм рдЖрд╡рд╢реНрдпрдХ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рд╡рд╕реВрд▓реА рдЕрд╕рдВрднрд╡ рд╣реЛ рдЧрдИред

рдЕрдкрдард┐рдд рдбреЗрдЯрд╛ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓реЙрдЯ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рдкреНрд░рддрд┐рдХреГрддрд┐
рд╕реНрд▓реЙрдЯ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓реЗрдХрд┐рди рдЦрддрд░рдирд╛рдХ рддрдВрддреНрд░ рд╣реИ: рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рдордп рдкрд░ рд╕реНрд▓реЙрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдирд╣реАрдВ рдкрдврд╝рддрд╛ рд╣реИ, рддреЛ рдмрд┐рдирд╛ рдкрдврд╝реЗ рд╡рд╛рд▓ рд░рд┐рдХреЙрд░реНрдб рд╕рд░реНрд╡рд░ рдкрд░ рд╕рднреА рдЬрдЧрд╣ рд▓реЗ рд╕рдХрддрд╛ рд╣реИред рдЕрдм рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░max_slot_wal_keep_sizeрдЖрдк рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдХреА рдЕрдзрд┐рдХрддрдо рдорд╛рддреНрд░рд╛ рдкрд░ рдПрдХ рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЕрдкрдард┐рдд рдбреЗрдЯрд╛ рджреНрд╡рд╛рд░рд╛ рдХрдмреНрдЬрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЕрдЧрд▓реЗ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдкрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЖрдХрд╛рд░ рдкрд╛рд░ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╕реНрд▓реЙрдЯ рдЕрдХреНрд╖рдо рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЬрдЧрд╣ рдореБрдХреНрдд рд╣реЛ рдЧрдИ рд╣реИред

рдЦрд┐рдбрд╝рдХрд┐рдпрд╛рдБ


рд╡рд┐рдВрдбреЛрдЬ рдпреВрдирд┐рдХреНрд╕ рдкрд░ рдпреВрдирд┐рдХреНрд╕ рд╕реЙрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди-
рдбреЛрдореЗрди рд╕реЙрдХреЗрдЯ рд╡рд┐рдВрдбреЛрдЬ 10 рдкрд░ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рд╣реИрдВред

рдкреНрд░рд▓реЗрдЦрди


рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рджреЛ рдирдП рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВред
рдПрдХ рд▓рдВрдмреА рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рдж , рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдПрдоред рдЧреНрд▓реЛрд╕рд░реА рджрд┐рдЦрд╛рдИ рджрд┐рдП ред рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ 101 рд╢рдмреНрдж рд╣реИрдВред

рдПрдХ рдЪрд░ PG_COLORрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдВрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд░рдВрдЧ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкрд╣рд▓реЗ рдереАред рдпрд╣ рдЕрдм рдкрд░рд┐рд╢рд┐рд╖реНрдЯ N. рд░рдВрдЧ рд╕рдорд░реНрдерди рдореЗрдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИ ред рдЗрд╕ рдкреИрдЪ рдореЗрдВ рдкреАрдЯрд░ рдЖрдЗрд╕реЗрдиреНрдЯреНрд░рд╛рдЙрдЯ рдХрд╛ рдореВрд▓ рдЗрд░рд╛рджрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд░рдВрдЧреАрди рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рдерд╛ред рдФрд░ рдЬреЛ рд▓реЛрдЧ рдРрд╕рд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдереЗ, рдЙрдирдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдерд╛NO_COLORред рд▓реЗрдХрд┐рди рдкреИрдЪ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдореЗрдВ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд░рдВрдЧ рднреЗрдж рдХреЗ рдЕрдзрд┐рдХ рд╡рд┐рд░реЛрдзреА рдереЗред рдЗрд╕рд▓рд┐рдП, рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреЗрд╡рд▓ рдЙрдкрд▓рдмреНрдз рдЕрд╡рд╕рд░реЛрдВ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдФрд░ рд╣рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╣рд▓реЗ рд╕реНрддрд░ рдХрд╛ рдПрдХ рдирдпрд╛ рдЦрдВрдб рдорд┐рд▓рд╛ред



PG13, , PG14 . , . .

All Articles