Π‘Π»Π΅Π΄ Π΅Π΄Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π±Π΅ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ Π½ΠΎΠ² ΡΡΠ°Π±ΠΈΠ»Π΅Π½ ΠΊΠ»ΠΎΠ½ Π½Π° Π‘Π£ΠΠ PostgreSQL 14. ΠΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈΡΠ΅ Π·Π° Π½ΠΎΠ²ΠΈΡ ΠΊΠ»ΠΎΠ½ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΏΡΡΠ½Π°ΡΠΈ Π² ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ΅Ρ Π³ΠΎΠ΄ΠΈΠ½ΠΈ Π΄ΠΎ Π½ΠΎΠ΅ΠΌΠ²ΡΠΈ 2026 Π³.
ΠΡΠ½ΠΎΠ²Π½ΠΈ ΠΈΠ½ΠΎΠ²Π°ΡΠΈΠΈ:
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ JSON Π΄Π°Π½Π½ΠΈ ΡΡΠ΅Π· ΠΈΠ·ΡΠ°Π·ΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π° ΠΌΠ°ΡΠΈΠ²: SELECT ('{ "postgres": { "release": 14 }}'::jsonb)['postgres']['release']; SELECT * FROM ΡΠ΅ΡΡ WHERE details['attributes']['size'] = '"medium"';
ΠΠΎΠ΄ΠΎΠ±Π΅Π½ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π΅ Π²Π½Π΅Π΄ΡΠ΅Π½ Π·Π° Π΄Π°Π½Π½ΠΈΡΠ΅ Π·Π° ΠΊΠ»ΡΡ/ΡΡΠΎΠΉΠ½ΠΎΡΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ΠΈ ΠΎΡ ΡΠΈΠΏΠ° hstore. Π’ΠΎΠ·ΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ Π±Π΅ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π½Π° ΡΠ°ΠΌΠΊΠ°, ΠΊΠΎΡΡΠΎ Π² Π±ΡΠ΄Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π΄ΡΡΠ³ΠΈ ΡΠΈΠΏΠΎΠ²Π΅. ΠΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠΈΠΏ hstore: INSERT INTO mytable VALUES ('a=>b, c=>d'); ΠΠΠΠΠ ΠΠ’Π h['a'] FROM mytable; ΠΠΠ’Π£ΠΠΠΠΠΠ ΠΠΠ mytable SET h['c'] = 'Π½ΠΎΠ²ΠΎ';
- Π‘Π΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΡΠΈΠΏΠΎΠ²Π΅ Π·Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π΅ Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ Π΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΎ Ρ Π½ΠΎΠ²ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ βΠΌΡΠ»ΡΠΈΠ΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½β, ΠΊΠΎΠΈΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ ΡΠΏΠΈΡΡΡΠΈ ΠΎΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ ΠΎΡ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ΅ ΠΏΡΠΈΠΏΠΎΠΊΡΠΈΠ²Π°Ρ. Π Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ Π²ΡΠ΅ΠΊΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ ΡΠΈΠΏ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π½Π΅Π³ΠΎΠ² ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΠΌΠ½ΠΎΠ³ΠΎΠ΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅Π½ ΡΠΈΠΏ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΈΠΏΡΡ βint4rangeβ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° βint4multirangeβ, Π° ΡΠΈΠΏΡΡ βdaterangeβ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° βdatemultirangeβ. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π½ΠΎΠ²ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ ΠΎΠΏΡΠΎΡΡΡΠ²Π° Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π½Π° Π·Π°ΡΠ²ΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠ°Ρ ΡΠ»ΠΎΠΆΠ½ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡΠΈ ΠΎΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ. SELECT '{[3,7), [8,9)}'::int4multirange; SELECT nummultirange(numrange(1.0, 14.0), numrange(20.0, 25.0));
- ΠΠ°ΠΏΡΠ°Π²Π΅Π½ΠΈ ΡΠ° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈ Ρ Π³ΠΎΠ»ΡΠΌΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅, ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΡΠΈ Π³ΠΎΠ»ΡΠΌ Π±ΡΠΎΠΉ Π²ΡΡΠ·ΠΊΠΈ. ΠΡΠΈ Π½ΡΠΊΠΎΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ ΡΠ΅ Π½Π°Π±Π»ΡΠ΄Π°Π²Π° Π΄Π²ΡΠΊΡΠ°ΡΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°.
- ΠΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ° Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ Π½Π° B-Π΄ΡΡΠ²ΠΎΡΠΎ Π΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡΡ Ρ ΡΠ°ΡΡΠ΅ΠΆΠ° Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΡΠ΅ΡΡΠΎ, Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΡΠ΅ΠΆΠΈΠΌΠ° Π½Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ½ΠΎ ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ ΠΎΡ ΡΡΡΠ°Π½Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° (Π²Π½Π΅Π΄ΡΠ΅Π½ΠΎ Π½Π° Π½ΠΈΠ²ΠΎ libpq), ΠΊΠΎΠ΅ΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π΄Π° ΡΡΠΊΠΎΡΠΈΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈΡΠ΅ Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π³ΠΎΠ»ΡΠΌ Π±ΡΠΎΠΉ ΠΌΠ°Π»ΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π° Π·Π°ΠΏΠΈΡ (INSERT/UPDATE/DELETE) ΡΡΠ΅Π· ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΡΠ»Π΅Π΄Π²Π°ΡΠ° Π·Π°ΡΠ²ΠΊΠ°, Π±Π΅Π· Π΄Π° ΡΠ°ΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ°. Π Π΅ΠΆΠΈΠΌΡΡ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΏΠΎΠΌΠ°Π³Π° Π·Π° ΡΡΠΊΠΎΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΏΡΠΈ Π²ΡΡΠ·ΠΊΠΈ Ρ Π³ΠΎΠ»Π΅ΠΌΠΈ Π·Π°ΠΊΡΡΠ½Π΅Π½ΠΈΡ ΠΏΡΠΈ Π΄ΠΎΡΡΠ°Π²ΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ.
- ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, Π²ΠΊΠ»ΡΡΠ²Π°ΡΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ PostgreSQL ΡΡΡΠ²ΡΡΠΈ. ΠΡΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ Π²Π΅ΡΠ΅ ΡΡΠ°Π²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ Π² ΠΏΠΎΡΠΎΡΠ½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π² ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. Π Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΡΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ, Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ΠΎ.
- ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡΡ Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° Π²ΡΠ½ΡΠ½ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ Foreign Data Wrapper (postgres_fdw) ΠΈΠΌΠ° Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠΈ, ΠΊΠΎΡΡΠΎ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌΠ° ΡΠ°ΠΌΠΎ ΠΏΡΠΈ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΊΡΠΌ Π΄ΡΡΠ³ΠΈ PostgreSQL ΡΡΡΠ²ΡΡΠΈ. postgres_fdw ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π΄ΠΎΠ±Π°Π²Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΊΡΠΌ Π²ΡΠ½ΡΠ½ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ ΡΡΠ΅Π· ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°ΡΠ° βIMPORT FOREIGN SCHEMAβ.
- ΠΠ°ΠΏΡΠ°Π²Π΅Π½ΠΈ ΡΠ° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ° VACUUM (ΡΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° Π±ΠΎΠΊΠ»ΡΠΊ ΠΈ ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ Π½Π° Π΄ΠΈΡΠΊΠΎΠ²ΠΎ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅). ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠΎΠΏΡΡΠΊΠ° Π½Π΅ΡΡΡΠ΅ΡΡΠ²Π΅Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅, Π°ΠΊΠΎ ΡΠ° ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ Π·Π° ΠΎΠ±Π²ΠΈΠ²Π°Π½Π΅ Π½Π° ID Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ. ΠΠ°ΠΌΠ°Π»Π΅Π½ΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈ Π²ΡΠ² ΡΠΎΡΠΌΠ°Ρ B-Tree. ΠΠ½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ° βANALYZEβ, ΠΊΠΎΡΡΠΎ ΡΡΠ±ΠΈΡΠ° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Π·Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π° Π·Π° ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Π½Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° TOAST, ΠΊΠΎΡΡΠΎ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π·Π° ΡΡΡ ΡΠ°Π½ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠ°ΡΠΎ Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΎΡ ΡΠ΅ΠΊΡΡ ΠΈΠ»ΠΈ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. Π Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° Π·Π° ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡ pglz, TOAST Π²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π°Π»Π³ΠΎΡΠΈΡΡΠΌΠ° LZ4.
- Π Π°Π·ΡΠΈΡΠ΅Π½ΠΈ ΡΠ° ΡΡΠ΅Π΄ΡΡΠ²Π°ΡΠ° Π·Π° Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° Π‘Π£ΠΠ. ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° ΠΈΠ·Π³Π»Π΅Π΄ΠΈ Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° Π½Π°ΠΏΡΠ΅Π΄ΡΠΊΠ° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ 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). Π‘ Π ΠΠΠ£Π Π‘ΠΠΠΠ 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 Π΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎΡΠΎ Π΄ΠΎΠ²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Ρ ΡΠ°Π±ΡΠ»Π°ΡΠΎΡΠΈ, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΊΡΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° β\dfβ, Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π°ΡΠ° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Π΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½Π° Π΄ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° β\dXβ.
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΠ²ΠΎΡΡ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ ΠΈΠ»ΠΈ ΡΠ°ΠΌΠΎ Π·Π° Π·Π°ΠΏΠΈΡ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅. ΠΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ Π·Π°Π΄Π°Π²Π°Ρ Π½Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ, ΠΈΠ·Π³Π»Π΅Π΄ΠΈ ΠΈ ΡΡ Π΅ΠΌΠΈ, ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈΡΠ΅ ΡΠΎΠ»ΠΈ pg_read_all_data ΠΈ pg_write_all_data. GRANT pg_read_all_data ΠΠ user1;
- ΠΠΎΠ²ΠΈΡΠ΅ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΡΠ²Π°Π½Π΅ Ρ ΠΏΠ°ΡΠΎΠ»Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° SCRAM-SHA-256 Π²ΠΌΠ΅ΡΡΠΎ md5 (ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΡΡ βpassword_encryptionβ ΠΏΡΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° postgresql.conf Π²Π΅ΡΠ΅ Π΅ Π½Π°ΡΡΡΠΎΠ΅Π½ Π½Π° βscram-sha-256β).
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru