ืžื”ื“ื•ืจืช PostgreSQL 14 DBMS

ืœืื—ืจ ืฉื ื” ืฉืœ ืคื™ืชื•ื—, ืคื•ืจืกื ืกื ื™ืฃ ื™ืฆื™ื‘ ื—ื“ืฉ ืฉืœ DBMS PostgreSQL 14. ืขื“ื›ื•ื ื™ื ืœืกื ื™ืฃ ื”ื—ื“ืฉ ื™ืฉื•ื—ืจืจื• ื‘ืžืฉืš ื—ืžืฉ ืฉื ื™ื ืขื“ ืœื ื•ื‘ืžื‘ืจ 2026.

ื—ื™ื“ื•ืฉื™ื ืขื™ืงืจื™ื™ื:

  • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ื’ื™ืฉื” ืœื ืชื•ื ื™ JSON ื‘ืืžืฆืขื•ืช ื‘ื™ื˜ื•ื™ื™ื ื“ืžื•ื™ื™ ืžืขืจืš: SELECT ('{ "postgres": { "release": 14 }}'::jsonb)['postgres']['release']; SELECT * FROM test WHERE details['attributes']['size'] = '"ื‘ื™ื ื•ื ื™"';

    ืชื—ื‘ื™ืจ ื“ื•ืžื” ืžื™ื•ืฉื ืขื‘ื•ืจ ื ืชื•ื ื™ ื”ืžืคืชื—/ืขืจืš ื”ืžืกื•ืคืงื™ื ืขืœ ื™ื“ื™ ืกื•ื’ hstore. ืชื—ื‘ื™ืจ ื–ื” ื™ื•ืฉื ื‘ืชื—ื™ืœื” ื‘ืืžืฆืขื•ืช ืžืกื’ืจืช ืื•ื ื™ื‘ืจืกืœื™ืช, ืฉื‘ืขืชื™ื“ ืขืฉื•ื™ื” ืœืฉืžืฉ ืขื‘ื•ืจ ืกื•ื’ื™ื ืื—ืจื™ื. ื“ื•ื’ืžื” ืœืกื•ื’ hstore: INSERT INTO mytable VALUES ('a=>b, c=>d'); SELECT h['a'] FROM mytable; ืขื“ื›ื•ืŸ mytable SET h['c'] = 'ื—ื“ืฉ';

  • ืžืฉืคื—ืช ื”ื˜ื™ืคื•ืกื™ื ืœื”ื’ื“ืจืช ื˜ื•ื•ื—ื™ื ื”ื•ืจื—ื‘ื” ื‘ื˜ื™ืคื•ืกื™ื ื—ื“ืฉื™ื ืฉืœ "ืจื‘-ื˜ื•ื•ื—ื™ื", ื”ืžืืคืฉืจื™ื ืœืฆื™ื™ืŸ ืจืฉื™ืžื•ืช ืžืกื•ื“ืจื•ืช ืฉืœ ื˜ื•ื•ื—ื™ ืขืจื›ื™ื ืฉืื™ื ื ื—ื•ืคืคื™ื. ื‘ื ื•ืกืฃ ืœื›ืœ ืกื•ื’ ื˜ื•ื•ื— ืงื™ื™ื, ืžื•ืฆืข ืกื•ื’ ืจื™ื‘ื•ื™ ื˜ื•ื•ื—ื™ื ืžืฉืœื•, ืœื“ื•ื’ืžื”, ื”ืกื•ื’ "int4range" ืžืชืื™ื ืœ"int4multirange", ื•ื”ืกื•ื’ "daterange" ืžืชืื™ื ืœ"datemultirange". ื”ืฉื™ืžื•ืฉ ื‘ืกื•ื’ื™ื ื—ื“ืฉื™ื ืžืคืฉื˜ ืืช ื”ืขื™ืฆื•ื‘ ืฉืœ ืฉืื™ืœืชื•ืช ื”ืžื‘ืฆืขื•ืช ืžื ื™ืคื•ืœืฆื™ื•ืช ื‘ืจืฆืคื™ื ืžื•ืจื›ื‘ื™ื ืฉืœ ื˜ื•ื•ื—ื™ื. ื‘ื—ืจ '{[3,7), [8,9)}'::int4multirange; SELECT nummultirange(numrange(1.0, 14.0), numrange(20.0, 25.0));
  • ื‘ื•ืฆืขื• ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ืœืฉื™ืคื•ืจ ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ืžืขืจื›ื•ืช ืขื•ืžืก ื’ื‘ื•ื” ื”ืžืขื‘ื“ื•ืช ืžืกืคืจ ืจื‘ ืฉืœ ื—ื™ื‘ื•ืจื™ื. ื‘ื—ืœืง ืžื”ืžื‘ื—ื ื™ื, ื ืฆืคื™ืช ืขืœื™ื” ืฉืœ ืคื™ ืฉื ื™ื™ื ื‘ื‘ื™ืฆื•ืขื™ื.
  • ื”ื™ืขื™ืœื•ืช ืฉืœ ืžื“ื“ื™ B-tree ืฉื•ืคืจื” ื•ื”ื‘ืขื™ื” ื‘ืฆืžื™ื—ืช ื”ืื™ื ื“ืงืก ื›ืืฉืจ ื˜ื‘ืœืื•ืช ืžืชืขื“ื›ื ื•ืช ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื ืคืชืจื”.
  • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืžืฆื‘ ืฆื“ ื”ืœืงื•ื— (ืžื™ื•ืฉื ื‘ืจืžืช libpq) ืฉืœ ืฉื™ื“ื•ืจ ื‘ืงืฉื•ืช ื‘ืฆื™ื ื•ืจ, ื”ืžืืคืฉืจ ืœืš ืœื”ืื™ืฅ ืžืฉืžืขื•ืชื™ืช ืืช ืชืจื—ื™ืฉื™ ืžืกื“ ื”ื ืชื•ื ื™ื ื”ืงืฉื•ืจื™ื ืœื‘ื™ืฆื•ืข ืžืกืคืจ ืจื‘ ืฉืœ ืคืขื•ืœื•ืช ื›ืชื™ื‘ื” ืงื˜ื ื•ืช (INSERT/UPDATE/DELETE) ืขืœ ื™ื“ื™ ืฉืœื™ื—ืช ื”ื‘ืงืฉื” ื”ื‘ืื” ืžื‘ืœื™ ืœื”ืžืชื™ืŸ ืœืชื•ืฆืื” ืฉืœ ื”ื‘ืงืฉื” ื”ืงื•ื“ืžืช. ื”ืžืฆื‘ ื’ื ืขื•ื–ืจ ืœื”ืื™ืฅ ืืช ื”ืขื‘ื•ื“ื” ืขืœ ื—ื™ื‘ื•ืจื™ื ืขื ืขื™ื›ื•ื‘ื™ื ืืจื•ื›ื™ื ืฉืœ ืžืฉืœื•ื— ืžื ื•ืช.
  • ื™ื›ื•ืœื•ืช ืžืฉื•ืคืจื•ืช ืขื‘ื•ืจ ืชืฆื•ืจื•ืช ืžื‘ื•ื–ืจื•ืช ื”ื›ื•ืœืœื•ืช ืฉืจืชื™ PostgreSQL ืžืจื•ื‘ื™ื. ื‘ื”ื˜ืžืขืช ืฉื›ืคื•ืœ ืœื•ื’ื™, ื ื™ืชืŸ ื›ืขืช ืœืฉืœื•ื— ืขืกืงืื•ืช ื‘ืขื™ืฆื•ืžืŸ ื‘ืžืฆื‘ ืกื˜ืจื™ืžื™ื ื’, ืžื” ืฉื™ื›ื•ืœ ืœืฉืคืจ ืžืฉืžืขื•ืชื™ืช ืืช ื‘ื™ืฆื•ืขื™ ื”ืฉื›ืคื•ืœ ืฉืœ ืขืกืงืื•ืช ื’ื“ื•ืœื•ืช. ื‘ื ื•ืกืฃ, ื”ืคืขื ื•ื— ื”ืœื•ื’ื™ ืฉืœ ื ืชื•ื ื™ื ืฉื”ืชืงื‘ืœื• ื‘ืžื”ืœืš ืฉื›ืคื•ืœ ืœื•ื’ื™ ืขื‘ืจ ืื•ืคื˜ื™ืžื™ื–ืฆื™ื”.
  • ื”ืžื ื’ื ื•ืŸ ืœื—ื™ื‘ื•ืจ ื˜ื‘ืœืื•ืช ื—ื™ืฆื•ื ื™ื•ืช Foreign Data Wrapper (postgres_fdw) ื”ื•ืกื™ืฃ ืชืžื™ื›ื” ื‘ืขื™ื‘ื•ื“ ืฉืื™ืœืชื•ืช ืžืงื‘ื™ืœ, ืืฉืจ ื™ืฉื™ื ื›ืจื’ืข ืจืง ื‘ืขืช ื—ื™ื‘ื•ืจ ืœืฉืจืชื™ PostgreSQL ืื—ืจื™ื. postgres_fdw ื’ื ืžื•ืกื™ืฃ ืชืžื™ื›ื” ื‘ื”ื•ืกืคืช ื ืชื•ื ื™ื ืœื˜ื‘ืœืื•ืช ื—ื™ืฆื•ื ื™ื•ืช ื‘ืžืฆื‘ ืืฆื•ื•ื” ื•ื™ื›ื•ืœืช ืœื™ื™ื‘ื ื˜ื‘ืœืื•ืช ืžื—ื•ืœืงื•ืช ืขืœ ื™ื“ื™ ืฆื™ื•ืŸ ื”ื”ื ื—ื™ื” "IMPORT FOREIGN SCHEMA".
  • ื‘ื•ืฆืขื• ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ืœื™ื™ืฉื•ื ืคืขื•ืœืช ื”-VACUUM (ืื™ืกื•ืฃ ืืฉืคื” ื•ืืจื™ื–ืช ืื—ืกื•ืŸ ื“ื™ืกืง). ื ื•ืกืฃ ืžืฆื‘ ื ื™ืงื•ื™ ื—ื™ืจื•ื ืฉืžื“ืœื’ ืขืœ ืคืขื•ืœื•ืช ื ื™ืงื•ื™ ืœื ื—ื™ื•ื ื™ื•ืช ืื ื ื•ืฆืจื• ืชื ืื™ ืขื•ืงืฃ ืฉืœ ืžื–ื”ื” ืขืกืงื”. ืชืงื•ืจื” ืžื•ืคื—ืชืช ื‘ืขืช ืขื™ื‘ื•ื“ ืื™ื ื“ืงืกื™ื ื‘ืคื•ืจืžื˜ B-Tree. ื‘ื™ืฆื•ืข ืคืขื•ืœืช "ANALYZE", ื”ืื•ืกืคืช ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ืขืœ ืคืขื•ืœืช ื‘ืกื™ืก ื”ื ืชื•ื ื™ื, ื”ื•ืืฅ ืžืฉืžืขื•ืชื™ืช.
  • ื ื•ืกืคื” ืืคืฉืจื•ืช ืœื”ื’ื“ื™ืจ ืืช ืฉื™ื˜ืช ื”ื“ื—ื™ืกื” ื”ืžืฉืžืฉืช ื‘ืžืขืจื›ืช TOAST, ื”ืื—ืจืื™ืช ืขืœ ืื—ืกื•ืŸ ื ืชื•ื ื™ื ื’ื“ื•ืœื™ื, ื›ืžื• ื‘ืœื•ืงื™ื ืฉืœ ื˜ืงืกื˜ ืื• ืžื™ื“ืข ื’ื™ืื•ืžื˜ืจื™. ื‘ื ื•ืกืฃ ืœืฉื™ื˜ืช ื”ื“ื—ื™ืกื” pglz, TOAST ื™ื›ื•ืœ ื›ืขืช ืœื”ืฉืชืžืฉ ื‘ืืœื’ื•ืจื™ืชื LZ4.
  • ื”ื•ืจื—ื‘ื• ื”ื›ืœื™ื ืœื ื™ื˜ื•ืจ ืคืขื•ืœืช ื”-DBMS. ื ื•ืกืคื• ืชืฆื•ื’ื•ืช ืœืžืขืงื‘ ืื—ืจ ื”ื”ืชืงื“ืžื•ืช ืฉืœ ืคืงื•ื“ื•ืช COPY (pg_stat_progress_copy), ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ืœื’ื‘ื™ ืžืฉื‘ืฆื•ืช ืฉื›ืคื•ืœ (pg_stat_replication_slots) ื•ืคืขื™ืœื•ืช ื”ืงืฉื•ืจื” ืœื™ื•ืžืŸ ื”ืขืกืงืื•ืช ืฉืœ WAL (pg_stat_wal). ื ื•ืกืคื” ื”ืคื•ื ืงืฆื™ื” compute_query_id, ื”ืžืืคืฉืจืช ืœืชืช-ืžืขืจื›ื•ืช ืฉื•ื ื•ืช, ื›ื’ื•ืŸ pg_stat_activity ื•-EXPLAIN VERBOSE, ืœืขืงื•ื‘ ืื—ืจ ื‘ืงืฉื•ืช ืขืœ ื™ื“ื™ ื”ืงืฆืืช ืžื–ื”ื” ื™ื™ื—ื•ื“ื™ ืœื›ืœ ื‘ืงืฉื”.
  • ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ื ื•ืกืคื• ืœืžืชื›ื ืŸ ื”ืฉืื™ืœืชื•ืช ื›ื“ื™ ืœืฉืคืจ ืืช ื”ืขื™ื‘ื•ื“ ื”ืžืงื‘ื™ืœ ืฉืœ ืฉืื™ืœืชื•ืช ื•ืœืฉืคืจ ืืช ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ื‘ื™ืฆื•ืข ืกื™ืžื•ืœื˜ื ื™ ืฉืœ ืคืขื•ืœื•ืช ืกืจื™ืงืช ืจืฉื•ืžื•ืช ืขื•ืงื‘ื•ืช, ื‘ื™ืฆื•ืข ืžืงื‘ื™ืœ ืฉืœ ืฉืื™ืœืชื•ืช ื‘-PL/pgSQL ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” "RETURN QUERY" ื•ื‘ื™ืฆื•ืข ืžืงื‘ื™ืœ ืฉืœ ืฉืื™ืœืชื•ืช ื‘-" ืจืขื ืŸ ืชืฆื•ื’ื” ื—ื•ืžืจื™ืช". ื›ื“ื™ ืœืฉืคืจ ืืช ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ืžื™ื–ื•ื’ื™ื ืžืงื•ื ื ื™ื ืžื—ื–ื•ืจื™ื™ื (ื”ืฆื˜ืจืคื•ืช), ื”ื•ื˜ืžืขื” ืชืžื™ื›ื” ื‘ืฉืžื™ืจืช ืžื˜ืžื•ืŸ ื ื•ืกืคืช.
  • ื›ืขืช ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืกื˜ื˜ื™ืกื˜ื™ืงื” ืžืชืงื“ืžืช ื›ื“ื™ ืœื™ื™ืขืœ ื‘ื™ื˜ื•ื™ื™ื, ื•ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื›ืขืช ื‘ืžื™ื•ืŸ ืžืฆื˜ื‘ืจ ื›ื“ื™ ืœื™ื™ืขืœ ืืช ืคื•ื ืงืฆื™ื•ืช ื”ื—ืœื•ื ื•ืช.
  • ืคืจื•ืฆื“ื•ืจื•ืช ืžืื•ื—ืกื ื•ืช ื”ืžืืคืฉืจื•ืช ืœืš ืœื ื”ืœ ืขืกืงืื•ืช ื‘ืงื•ื‘ื™ื•ืช ืงื•ื“ ืชื•ืžื›ื•ืช ื›ืขืช ื‘ื”ื’ื“ืจืช ื ืชื•ื ื™ ื”ื—ื–ืจื” ื‘ืืžืฆืขื•ืช ืคืจืžื˜ืจื™ื ืฉืœ "OUT".
  • ื ื•ืกืคื” ืคื•ื ืงืฆื™ื™ืช date_bin ืœืขื’ืœ ืขืจื›ื™ ื—ื•ืชืžืช ื–ืžืŸ ื‘ื”ืชืื ืœืžืจื•ื•ื— ืฉืฆื•ื™ืŸ. SELECT date_bin('15 ื“ืงื•ืช', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-01-01'); 2020-02-11 15:30:00
  • ื ื•ืกืคื• ื‘ื™ื˜ื•ื™ื™ SEARCH ื•- CYCLE ื”ืžื•ื’ื“ืจื™ื ื‘ืชืงืŸ SQL ื›ื“ื™ ืœื”ืงืœ ืขืœ ืกื“ืจ ื•ื–ื™ื”ื•ื™ ืžื—ื–ื•ืจื™ื ื‘ื‘ื™ื˜ื•ื™ื™ ื˜ื‘ืœื” ืจืงื•ืจืกื™ื‘ื™ื™ื (CTE). WITH 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 ) SEARCH DEPTH FIRST BY ID SET ordercol SELECT * FROM search_tree ORDER BY ordercol;
  • ื‘ื›ืœื™ ื”ืฉื™ืจื•ืช psql ืฉื•ืคืจื” ื”ื”ืฉืœืžื” ื”ืื•ื˜ื•ืžื˜ื™ืช ืฉืœ ืคืงื•ื“ื•ืช ืขื ื›ืจื˜ื™ืกื™ื•ืช, ื”ื™ื›ื•ืœืช ืœื”ืฆื™ื’ ืืจื’ื•ืžื ื˜ื™ื ืฉืœ ืคื•ื ืงืฆื™ื” ื ื•ืกืคื” ืœืคืงื•ื“ืช "\df" ื•ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืžื•ืฆื’ืช ื”ื•ืจื—ื‘ื” ืœืคืงื•ื“ื” "\dX".
  • ืืคืฉืจ ืœื”ืงืฆื•ืช ื”ืจืฉืื•ืช ืงืจื™ืื” ื‘ืœื‘ื“ ืื• ื›ืชื™ื‘ื” ื‘ืœื‘ื“ ืœืžืฉืชืžืฉื™ื. ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ื”ืจืฉืื•ืช ื‘ื˜ื‘ืœืื•ืช, ืชืฆื•ื’ื•ืช ื•ืกื›ืžื•ืช ื‘ื•ื“ื“ื•ืช ื‘ืืžืฆืขื•ืช ื”ืชืคืงื™ื“ื™ื ื”ืžื•ื’ื“ืจื™ื ืžืจืืฉ ืฉืœ pg_read_all_data ื•-pg_write_all_data. GRANT pg_read_all_data ืœืžืฉืชืžืฉ1;
  • ื”ืชืงื ื•ืช ื—ื“ืฉื•ืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ืœืื™ืžื•ืช ืกื™ืกืžื” ื‘ืืžืฆืขื•ืช SCRAM-SHA-256 ื‘ืžืงื•ื md5 (ืคืจืžื˜ืจ "password_encryption" ื‘ืขืช ื™ืฆื™ืจืช postgresql.conf ืžื•ื’ื“ืจ ื›ืขืช ืœ'scram-sha-256').

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”