ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ áá áºááŸá áºá¡ááŒá¬ááœáẠPostgreSQL 14 DBMS á áááºááŒáááºáá±á¬áá¬áááœá²á¡áá áºááᯠáá¯ááºáá±ááá¯ááºáá«áááºá áááºááœá²á¡áá áºá¡ááœáẠá¡ááºááááºáá»á¬ážááᯠ2026 áá¯ááŸá Ạááá¯áááºáá¬áá¡áá áá«ážááŸá áºááŒá¬á¡á±á¬áẠáá¯ááºááŒááºáá±ážáá«áááºá
á¡ááá áá®ááœááºáááºážáá áºááŸá¯áá»á¬áž-
- áááºážáá»ááºážáá¯á¶áá°áá±á¬á¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á JSON áá±áá¬ááᯠáááºáá±á¬ááºá¡áá¯á¶ážááŒá¯ááẠáá¶á·ááá¯ážááŸá¯ áááºáá±á¬ááºážááá·áºááœááºážáá¬ážáááº- SELECT ('{ "postgres": { "release": 14 }}'::jsonb)['postgres']['release']; SELECT * FROM test WHERE details['attributes']['size'] = '"medium"';
á¡áá¬ážáá° syntax ááᯠhstore á¡áá»áá¯ážá¡á á¬ážá០áá¶á·ááá¯ážáá±ážáá±á¬ áá±á¬á·/áááºááá¯áž áá±áá¬á¡ááœáẠáá¯ááºáá±á¬ááºáá«áááºá ဠsyntax ááᯠuniversal framework ááᯠá¡áá¯á¶ážááŒá¯á áááŠážááœáẠá¡áá±á¬ááºá¡ááẠáá±á¬áºáá²á·ááŒá®ážá áá±á¬ááºááœáẠá¡ááŒá¬ážá¡áá»áá¯ážá¡á á¬ážáá»á¬ážá¡ááœáẠá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá hstore á¡áá»áá¯ážá¡á á¬ážá¡ááœáẠá¥ááá¬- mytable VALUES áá²ááá¯á· ááá·áºááœááºážáá« ('a=>b, c=>d'); mytable á០h['a'] ááᯠSELECT; UPDATE mytable SET h['c'] = 'á¡áá áº';
- á¡ááá¯ááºážá¡ááŒá¬ážáá»á¬áž áááºááŸááºááŒááºážá¡ááœáẠá¡áá»áá¯ážá¡á á¬ážáá»á¬ážá áááá¬ážá á¯ááᯠ"áá»áá¯ážá á¯á¶" á¡áá»áá¯ážá¡á á¬ážá¡áá áºáá»á¬ážááŒáá·áº áá»á²á·ááœááºáá¬ážááŒá®áž áááºááá¯ážáá»á¬áž áááºáá±ááŒááºážáááŸááá±á¬ á¡ááá¯ááºážá¡ááŒá¬ážáá»á¬ážá ááŸá¬áá°áá¬ážáá±á¬á á¬áááºážáá»á¬ážááᯠáááºááŸááºááá¯ááºá á±áá«áááºá ááŸáááŒá®ážáá¬áž á¡ááá¯ááºážá¡ááŒá¬áž á¡áá»áá¯ážá¡á á¬áž áá áºáá¯á á®á¡ááŒááºá áááºážá áá»áá¯ážá á¯á¶áá±á¬ á¡áá»áá¯ážá¡á á¬ážááᯠá¡ááá¯ááŒá¯áá¬ážáááºá á¥ááá¬á á¡áá»áá¯ážá¡á á¬áž "int4range" ááẠ"int4multirange" ááŸáá·áº ááá¯ááºáá®ááŒá®áž á¡áá»áá¯ážá¡á á¬áž "daterange" ááẠ"datemultirange" ááŸáá·áº áááºááá¯ááºáá«áááºá á¡áá»áá¯ážá¡á á¬ážá¡áá áºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááẠááŸá¯ááºááœá±ážáá±á¬á¡ááá¯ááºážá¡ááŒá¬ážáá»á¬ážá á á®á á¥áºááŸá¯áá»á¬ážááᯠá á®áá¶ááá·áºááœá²ááá·áº queries áá®ááá¯ááºážááᯠááá¯ážááŸááºážá á±áááºá SELECT '{[3,7), [8,9)}'::int4multirange; SELECT nummultirange(numrange(1.0á 14.0)á numrange(20.0á 25.0));
- áá»áááºáááºááŸá¯ á¡áá»á¬ážá¡ááŒá¬ážááᯠáá¯ááºáá±á¬ááºáá±áá±á¬ áááºá¡á¬ážááŒáá·áºáá±á¬ á áá áºáá»á¬ážá á áœááºážáá±á¬ááºáááºááᯠááŒáŸáá·áºáááºááẠá¡áá±á¬ááºážáá¯á¶ážááŒááºáááºááŸá¯áá»á¬áž ááŒá¯áá¯ááºáá¬ážáá«áááºá á¡áá»áá¯á·áá±á¬ á ááºážáááºááŸá¯áá»á¬ážááœáẠá áœááºážáá±á¬ááºááẠááŸá áºáááá¯ážáá¬áááºááᯠááœá±á·ááŸáááááºá
- B-tree á¡ááœáŸááºážááááºážáá»á¬ážá á áœááºážáá±á¬ááºáááºááᯠááŒáŸáá·áºáááºáá¬ážááŒá®áž ááá¬ážáá»á¬ážááᯠáááŒá¬áá ááœááºážáá¶ááŒááºáááºááá·áºá¡áá« á¡ááœáŸááºážááááºáž ááŒá®ážááœá¬ážááŸá¯ááŸáá·áº ááŒá¿áá¬ááᯠááŒá±ááŸááºážááŒá®ážááŒá áºáááºá
- áá±ážááá¯á·ááŸá¯ááŒáá·áº áá±ážáááºáá±á¬ á á¬áá±ážááŒááºážáá¯ááºáááºážáá±á¬ááºááœááºááŸá¯áá»á¬ážá áœá¬ááᯠáá¯ááºáá±á¬ááºááŒááºážááŸáá·áº áááºá ááºáá±áá±á¬ áá±áá¬áá±á·á áºá¡ááŒá±á¡áá±áá»á¬ážááᯠáááááá¬áᬠá¡ááŸáááºááŒáŸáá·áºááá¯ááºá á±ááá·áº áá±á¬ááºážááá¯ááŸá¯áá»á¬ážá ááá¯ááºááá¯ááºážáá±ážááá¯á·ááŒááºážáá¯ááºá client-side (libpq á¡ááá·áºááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºáááº) áá¯ááºá¡ááœáẠáá¶á·ááá¯ážááŸá¯áááºááŒáá·áºáá¬ážáááºá ááááºáá áºáá¯áááááºááᯠáá á±á¬áá·áºáá² áá±á¬ááºáá±á¬ááºážááá¯áá»ááºá áá¯ááºááẠááŸááºáá»á¬ážáá±á¬ packet áá±ážááá¯á·ááŸá¯ááŸá±á¬áá·áºááŸá±ážááŸá¯áá»á¬ážááŸáá·áºá¡áá° áá»áááºáááºááŸá¯áá»á¬ážááᯠá¡ááŸáááºááŒáŸáá·áºáá±ážáá«áááºá
- PostgreSQL áá¬áá¬áá»á¬ážá áœá¬áá« á ááºáá±á¬ááŒáá·áºáá±ááŸá¯ááœá²á·á ááºážáá¯á¶áá»á¬ážá¡ááœááºááá¯ážááŒáŸáá·áºáá¯ááºáá±á¬ááºááá¯ááºááŸá¯á áá¯áá¹áááááºáá±á¬áá¯á¶áá°áá°ážáá»ááŒááºážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááẠááá¯á¡áá« áá¯ááºááœáŸáá·áºááŸá¯áá¯ááºááœáẠáá¯ááºáá±á¬ááºáá±áá±á¬ ááœá±ááœáŸá²ááá¯á·ááŸá¯áá»á¬ážááᯠáá±ážááá¯á·ááá¯ááºá áœááºážááŸáááŒá®áž ááŒá®ážáá¬ážáá±á¬ááœáŸá²ááŒá±á¬ááºážááŸá¯áá»á¬ážá á áœááºážáá±á¬ááºáááºááᯠáááááá¬áᬠááá¯ážáááºáá±á¬ááºážááœááºáá¬á á±ááá¯ááºáá«áááºá ááá¯á·á¡ááŒááºá áá¯áá¹áááá¯á¶áá°ááœá¬ážááŸá¯á¡ááœááºáž áááºáá¶áááŸááá±á¬ áá±áá¬áá»á¬ážá áá¯áá¹áááá¯ááºááŒáá·áº áá¯ááºááᯠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠááŒá¯áá¯ááºáá¬ážáá«áááºá
- ááŒááºáááá¬ážáá»á¬ážááᯠáá»áááºáááºáááºá¡ááœáẠForeign Data Wrapper (postgres_fdw) ááẠá¡ááŒá¬ážáá±á¬ PostgreSQL áá¬áá¬áá»á¬ážááá¯á· áá»áááºáááºááá·áºá¡áá«ááœááºáᬠáááºááŸáááœááºáᬠáááºááá¯ááºááá·áº á¡ááŒáá¯ááºáá±ážááŒááºážááŸá¯ áá¯ááºáá±á¬ááºááŒááºážá¡ááœáẠáá¶á·ááá¯ážááŸá¯ áááºáá±á¬ááºážáá±ážáá¬ážáááºá postgres_fdw ááẠá¡á á¯ááá¯ááºáá¯ááºááœáẠááŒááºáááá¬ážáá»á¬ážááá¯á· áá±áá¬ááá·áºááœááºážááŒááºážááŸáá·áº âIMPORT FOREIGN scheMAâ ááœáŸááºááŒá¬ážáá»ááºááᯠáááºááŸááºááŒááºážááŒáá·áº ááá¯ááºážááŒá¬ážáá¬ážáá±á¬ááá¬ážáá»á¬ážááᯠáááºááœááºážááá¯ááºááŸá¯ááá¯áááºáž áá¶á·ááá¯ážáá±ážáá«áááºá
- VACUUM áááºáááºááŸá¯ (á¡ááŸáá¯ááºá á¯áá±á¬ááºážááŒááºážááŸáá·áº áá áºááá¯ááŸá±á¬ááºááŸá¯ áá¯ááºááá¯ážááŒááºáž) ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáááºá¡ááœáẠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠááŒá¯áá¯ááºáá¬ážáá«áááºá ááœá±áá±ážááœá±áá° ID áááºáááºážáá»ááºá¡ááŒá±á¡áá±áá»á¬ážááᯠáááºáá®ážáá«á áááŸááááŒá áºááá¯á¡ááºáá±á¬ ááŸááºážáááºážáá±ážáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááᯠáá»á±á¬áºááœá¬ážááá·áº á¡áá±ážáá±á«áºááŸááºážáááºážáá±ážáá¯ááºááᯠááá·áºááœááºážáá¬ážáá«áááºá B-Tree áá±á¬áºáááºááœáẠá¡ááœáŸááºážááááºážáá»á¬ážááᯠáá¯ááºáá±á¬ááºááá·áºá¡áá« áá±á«áºáá±ááᯠáá»áŸá±á¬á·áá»áááºá áá±áá¬áá±á·á áºááááºáááºááŸá¯ááŸáá·áºáááºáááºáá±á¬ á á¬áááºážá¡ááºážáá»á¬ážááᯠá á¯áá±á¬ááºážáá±ážááá·áº "ANALYZE" áá¯ááºáá±á¬ááºáá»ááºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááẠáááááá¬áᬠá¡ááŸáááºááŒáŸáá·áºáá²á·áááºá
- á á¬áá¬ážáá¯á¶ážáá»á¬áž ááá¯á·ááá¯áẠáá»á®á©áá±ááŒá®á¡áá»ááºá¡áááºáá»á¬ážáá²á·ááá¯á·áá±á¬ ááŒá®ážáá¬ážáá±á¬áá±áá¬ááᯠááááºážáááºážááẠáá¬áááºááŸáááá·áº TOAST á áá áºááœáẠá¡áá¯á¶ážááŒá¯ááá·áº ááááááºááŸá¯áááºážáááºážááᯠááŒááºáááºáááºááŸááºááá¯ááºááá·áº á áœááºážáááºááᯠááá·áºááœááºážáá¬ážáááºá pglz ááááááºááŸá¯áááºážáááºážá¡ááŒáẠTOAST ááẠLZ4 algorithm ááᯠááá¯á¡áá¯á¶ážááŒá¯ááá¯ááºáá«ááŒá®á
- DBMS á áááºáááºááŸá¯ááᯠá á±á¬áá·áºááŒáá·áºááẠáááááá¬áá»á¬ážááᯠááá¯ážáá»á²á·áá¬ážáááºá COPY ááœáŸááºááŒá¬ážáá»ááºáá»á¬áž (pg_stat_progress_copy)á áá¯á¶áá°á¡áá±á«ááºáá»á¬áž (pg_stat_replication_slots) ááŸáá·áº WAL ááœá±áá±ážááœá±áá°ááŸááºáááºáž (pg_stat_wal) ááŸáá·áº áááºá ááºááá·áº áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá¡ááŒá±á¬ááºáž á á¬áááºážááá¬ážáá»á¬áž ááá¯ážáááºááŸá¯ááᯠááŒá±áá¬áá¶ááẠááŒááºááœááºážáá»á¬ážááᯠááá·áºááœááºážáá¬ážáááºá pg_stat_activity ááŸáá·áº EXPLAIN VERBOSE áá²á·ááá¯á· á¡áá»áá¯ážáá»áá¯ážáá±á¬ á áá áºááœá²áá»á¬ážááŒá áºááá·áº compute_query_id áá¯ááºáá±á¬ááºáá»ááºááᯠááá·áºááœááºážáá¬ážááŒá®áž áá±á¬ááºážááá¯áá»ááºáá áºáá¯á á®á¡ááœáẠáá®ážááŒá¬ážáááºááŸááºáááºááŸááºáá±ážááŒááºážááŒáá·áº áá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠááŒá±áá¬áá¶ááá¯ááºáááºá
- áá±ážááŒááºážáá»ááºáá»á¬ážá á¡ááŒáá¯ááºáá¯ááºáá±á¬ááºááŸá¯ááᯠááá¯ááá¯áá±á¬ááºážááœááºá á±áááºááŸáá·áº áááºááá¯ááºáá¯ááºáá±á¬ááºááá·áº ááŸááºáááºážá áááºááºáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááᯠáá áºááŒáá¯ááºáááºáááºážáá¯ááºáá±á¬ááºááŸá¯á âRETURN QUERYâ ááœáŸááºááŒá¬ážáá»ááºááᯠá¡áá¯á¶ážááŒá¯á PL/pgSQL ááœáẠáá±ážááŒááºážáá»ááºáá»á¬ážá á¡ááŒáá¯ááºáá¯ááºáá±á¬ááºááŸá¯á ááŸáá·áº "ááŸááá±ážááœááºážáá»á¬ážá á¡ááŒáá¯ááºáá¯ááºáá±á¬ááºááŸá¯ááá¯á·ááᯠááá¯ážáááºá á±ááẠquery planner ááœáẠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážáá»á¬ážááᯠquery planner ááœáẠááá·áºááœááºážáá¬ážáá«áááºá áá¯ááºááá¯ááºážááá¯ááºáá¬á¡ááŒááºááᯠááŒááºáááºá áááºáá«á" cyclic nested integrates (join) á á áœááºážáá±á¬ááºáááºááᯠááŒáŸáá·áºáááºáááºá áááºááá¯áž áááºááŸáºá¡ááœáẠáá¶á·ááá¯ážááŸá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá²á·áááºá
- ááá¯á¡áá«ááœáẠáá±á¬áºááŒáá»ááºáá»á¬ážááᯠá¡áá±á¬ááºážáá¯á¶ážááŒá áºá¡á±á¬áẠáá¯ááºáá±á¬ááºááẠá¡ááá·áºááŒáá·áºá á¬áááºážá¡ááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºááŒá®ážá ááá¯ážááŒáá·áºá á®á á®ááŒááºážááᯠááᯠwindow áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡áá±á¬ááºážáá¯á¶ážááŒá áºá¡á±á¬áẠáá¯ááºáá±á¬ááºááá¯ááºáá«ááŒá®á
- áá¯ááºáá¯á¶ážáá»á¬ážááœáẠááœá±áá±ážááœá±áá°áá»á¬ážááᯠá á®áá¶ááá·áºááœá²ááœáá·áºááŒá¯ááá·áº ááááºážáááºážáá¬ážáá±á¬ áá¯ááºáá¯á¶ážáá¯ááºáááºážáá»á¬ážááẠááá¯á¡áá« "OUT" áá±á¬ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áá±áá¬ááŒááºááá¯á·ááŒááºážááᯠáááºááŸááºááŒááºážááᯠáá¶á·ááá¯ážáá±ážáá«áááºá
- áááºááŸááºáá¬ážáá±á¬á¡áá»áááºá¡ááá¯ááºážá¡ááŒá¬ážá¡ááá¯áẠá¡áá»áááºáá¶ááááºáááºááá¯ážáá»á¬ážááᯠá¡ááá¯ááºážááá¯ááºááŒá¯áá¯ááºáááºá¡ááœáẠdate_bin áá¯ááºáá±á¬ááºáá»ááºááᯠááá·áºááœááºážáá¬ážáááºá SELECT date_bin('15 áááá áº'á TIMESTAMP '2020-02-11 15:44:17'á TIMESTAMP '2001-01-01'); 2020-02-11 áá :áá:áá
- áááºáá«áááºáá« Common Table Expressions (CTE) ááœáẠáá¶ááá¬áá»á¬ážááᯠá á®á á¥áºáááºááŸáá·áº ááœá²ááŒá¬ážáááºááŸááºááẠááá¯ááá¯ááœááºáá°á á±ááẠSQL á á¶ááŸá¯ááºážááœáẠáááºááŸááºáá¬ážáá±á¬ SEARCH ááŸáá·áº CYCLE á¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážááᯠáááºááá·áºáá¬ážáááºá RECURSIVE search_tree(id, link, data) ááŒáá·áº AS ( SELECT t.id, t.link, t.data FROM tree t UNION ALL SELECT t.id, t.link, t.data FROM tree t, search_tree st WHERE t. id = st.link ) id á¡ááá¯áẠááááá¯á¶áž ááŸá¬ááœá±ááŸá¯ á¡áá±ážá ááẠSET ordercol SELECT * FROM search_tree ORDER BY ordercol;
- psql utility ááœááºá tabs áá»á¬ážáá«ááŸááá±á¬ command áá»á¬ážá á¡ááá¯á¡áá»á±á¬ááºááŒáá·áºá áœááºááŒááºážááᯠááŒáŸáá·áºáááºáá¬ážááŒá®ážá function arguments áá»á¬ážááᯠ"\df" command ááá¯á· ááá·áºááœááºážáá¬ážááŒá®ážá ááŒááá¬ážáá±á¬ á á¬áááºážááá¬ážáá»á¬ážááᯠ"\dX" command ááá¯á· ááá¯ážáá»á²á·áá¬ážáá«áááºá
- á¡áá¯á¶ážááŒá¯áá°áá»á¬ážá¡ááœáẠáááºááŸá¯áááºáá®ážááá·áº ááá¯á·ááá¯áẠáá±ážáá¬áá®ážááá·áºá¡ááœáá·áºá¡áá±ážáá»á¬ážááᯠáááºááŸááºáá±ážááá¯ááºáááºá pg_read_all_data ááŸáá·áº pg_write_all_data ááŒáá¯áááºáááºááŸááºáá¬ážáá±á¬ á¡áááºážááá¹ááá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á ááá¬ážáá áºáá¯áá»ááºážá á®á ááŒáá·áºááŸá¯ááŸá¯áá»á¬ážááŸáá·áº schemas áá»á¬ážááœáẠáá¶á á¬ážááœáá·áºáá»á¬ážááᯠáááºááŸááºááá¯ááºáá«áááºá pg_read_all_data ááᯠuser1 ááá¯á· GRANT;
- á¡áá áºááá·áºááœááºážááŸá¯á¡áá áºáá»á¬ážááẠmd256 á¡á á¬áž SCRAM-SHA-5 ááᯠá¡áá¯á¶ážááŒá¯á á áá¬ážááŸááºá á áºááŸááºááŒá±á¬ááºážá¡áá±á¬ááºá¡áá¬ážá¡ááŒá Ạáá¯á¶áá±ááŒá áºááẠ(postgresql.conf ááá¯áá¯ááºáá±ážáá±á¬á¡áá« ááá¯á¡áá« "scram-sha-256" ááá¯á· áááºááŸááºáá¬ážáááº)á
source: opennet.ru