PG12: рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдкреНрд░реЛрдлреЗрд╢рдирд▓ рдХрд╛ рдПрдХ рдбреЛрдЬреЗрди рдкреИрдЪ

рдЖрдзрд┐рдХрд╛рд░рд┐рдХ PostgreSQL 12 рд░рд┐рд▓реАрдЬ рдХреА Acknowledgements рд╕реВрдЪреА рдкрд░ рдкрд░рд┐рдЪрд┐рдд рдирд╛рдореЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред рд╣рдордиреЗ рдЗрдиреЛрд╡реЗрд╢рди рдФрд░ рдХреБрдЫ рдмрдЧ рдлрд┐рдХреНрд╕ рдХреЛ рдПрдХ рд╕рд╛рде рд▓рд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛ред

1. JSONPath рд╕рдорд░реНрдерди


( рд░рд┐рд▓реАрдЬ рдиреЛрдЯреНрд╕ рдореЗрдВ, рдпрд╣ SQL / JSON рдкрде рднрд╛рд╖рд╛ (рдирд┐рдХрд┐рддрд╛ рдЧреНрд▓реВрдЦреЛрд╡, рдЯрд┐рдпреЛрдбреЛрд░ рд╕рд┐рдЧрд╛рд╡, рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдХреЛрд░реЛрдЯрдХреЛрд╡, рдУрд▓реЗрдЧ рдмрд╛рд░реНрдЯреБрдиреЛрд╡, рд▓рд┐рдпреБрдбрдорд┐рд▓рд╛ рдордВрдЯреНрд░реЛрд╡рд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВ) рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ

рдпрд╣ рдкреИрдЪ рд╣реА, JSONPath рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдФрд░ рдореБрджреНрджреЗ рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдкрд░ рдпрд╣рд╛рдВ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА JSONPath, Postgres Professional рдХреА рдПрдХ рдкреНрд░рдореБрдЦ рдЙрдкрд▓рдмреНрдзрд┐ рд╣реИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ PostgreSQL 12 рдХреЗ рдореБрдЦреНрдп рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред

2014 рдореЗрдВ, рдПред рдХреЛрд░реЛрдЯрдХреЛрд╡, рдУред рдмрд╛рд░реНрдЯреБрдиреЛрд╡ рдФрд░ рдПрдлред рд╕рд┐рдЧреЗрд╡ рдиреЗ jsquery рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдкреНрд░реЛ рд╕реНрдЯреИрдВрдбрд░реНрдб 9.5 (рдФрд░ рд╕реНрдЯреИрдВрдбрд░реНрдб рдФрд░ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рдХреЗ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ) рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ json (b) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд, рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдЬрдм рдорд╛рдирдХ SQL: 2016 рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЗрд╕рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рд╣рдорд╛рд░реЗ jsquery рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдЗрддрдиреЗ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реИрдВред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдорд╛рдирдХ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдиреЗ рднреА jsquery рдкрд░ рдирдЬрд╝рд░ рдбрд╛рд▓реА, JSONPath рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ред рд╣рдорд╛рд░реА рдЯреАрдо рдХреЛ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдерд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рдерд╛ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдмрд╣реБрдд рд╕реА рдирдИ рдЪреАрдЬреЗрдВ рднреАред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреИрдЪ рдЕрднреА рддрдХ рдкреНрд░рддрд┐рдмрджреНрдз рдирд╣реАрдВ рд╣реИ, JSONPath рдкреИрдЪ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА JSON (B) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдореБрдЦ рдХрд╛рд░реНрдп рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

jsonb_path_query('{"a": [1,2,3,4,5]}', '$.a[*] ? (@ > 2)')  3, 4, 5 jsonb_path_query('{"a": [1,2,3,4,5]}', '$.a[*] ? (@ > 5)')  0  

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рдХрд╛рд░реНрдп рдЬреЛ рдкрд╣рд▓реЗ JSON рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рдЪреБрдХреЗ рдереЗ, рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдпрд╣ рдирд┐рдХрд┐рддрд╛ рдЧреНрд▓реВрдЦреЛрд╡ рджреНрд╡рд╛рд░рд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, jsonb_each_text() рдФрд░ jsonb_array_elements_text() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдиреБрд░реВрдк рдСрдкрд░реЗрдЯрд░ #>> , рдЬрд▓реНрджреА рд╕реЗ JsonbValue рдХреЛ рдкрд╛рда рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдзреАрд░реЗ-рдзреАрд░реЗ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ред рдЕрдм рд╕рдм рдХреБрдЫ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

2. рдПрд╕рдкреА-рдЬреАрдПрд╕рдЯреА (рдХреЗрдПрдирдПрди) рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдирд┐рдХрдЯрддрдо рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреА рддреНрд╡рд░рд┐рдд рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди


(SP-GiST рдЗрдВрдбреЗрдХреНрд╕ рдХреА рдирд┐рдХрдЯрддрдо-рдкрдбрд╝реЛрд╕реА (KNN) рдЦреЛрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВред рдирд┐рдХрд┐рддрд╛ рдЧреНрд▓реБрдЦреЛрд╡, рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдХреЛрд░реЛрдЯрдХреЛрд╡, рд╡реНрд▓рд╛рдж рд╕реНрдЯрд░рдЭрд╛рдиреЛрд╡)

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

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

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

рдирд┐рдХрдЯрддрдо рдкрдбрд╝реЛрд╕реА рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ ORDER BY [, ] рд▓рд┐рдЦреЗрдВ, рдФрд░ рдлрд┐рд░ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

 SELECT * FROM polygons ORDER BY poly <-> point '(0,0)'; 

рдирд┐рдХрд┐рддрд╛ рдЧреНрд▓реБрдЦреЛрд╡ рджреНрд╡рд╛рд░рд╛ рдкреИрдЪ рдХреЛ рдЧреАрдереВрдм рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

3. рдмреА-рдЯреНрд░реА рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдореЗрдВ рд╕рдореНрдорд┐рд▓рди рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓реЛрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рди


( рд░рд┐рд▓реАрдЬ рдиреЛрдЯреНрд╕ рдореЗрдВ, рд▓реЙрдХрд┐рдВрдЧ рдУрд╡рд░рд╣реЗрдб рдХреЛ рдХрдо рдХрд░рдХреЗ btree рд╕реВрдЪрдХрд╛рдВрдХ рд╕рдореНрдорд┐рд▓рди рдХреА рдЧрддрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реИред рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдХреЛрд░реЛрдЯрдХреЛрд╡)

рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдХреЛрд░реЛрдЯрдХреЛрд╡, рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдкреНрд░реЛрдлреЗрд╢рдирд▓ рдХреЗ рдкреНрд░рдореБрдЦ рд╕рд┐рд╕реНрдЯрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЯ, рдмреА-рдЯреНрд░реА рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдкрд░ рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рд▓реЙрдХрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред рдЗрд╕ рдкреИрдЪ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд▓рд╛рдн рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдЬрд╣рд╛рдВ рд╕рдореНрдорд┐рд▓рди "рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ" рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рд╣реЛрддрд╛ рд╣реИред 72-рдХреЛрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдорд╛рдк рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓рд╛рдн 50% рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЕрд░рд╛рдЬрдХ рд╕рдореНрдорд┐рд▓рди рдХреЗ рд╕рд╛рде, рд▓рд╛рдн рдЗрддрдирд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред

4. рдХрд┐рдлрд╛рдпрддреА рд╡рд╛рд▓


(рдЬреАрдПрдПрд╕рдЯреА, рдЬреАрдЖрдИрдПрди рдФрд░ рдПрд╕рдкреА-рдЬреАрдИрдПрд╕рдЯреА рд╕реВрдЪрдХрд╛рдВрдХ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╡рд╛рд▓ рд░рд╛рдЗрдЯ рдХреЛ рдУрд╡рд░рд╣реЗрдб рдХрд░реЗрдВред рдЕрдирд╛рд╕реНрддрд╛рд╕рд┐рдпрд╛ рд▓реБрдмреЗрдирд┐рдХреЛрд╡рд╛, рдПрдВрдбреНрд░реА рд╡реАред рд▓реЗрдкрд┐рдХреЛрд╡)

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

xlog рдЖрдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ xlog рдЧрдпрд╛ рд╣реИред IMDB рдбреЗрдЯрд╛рдмреЗрд╕ (JSON рдлреЙрд░реНрдореЗрдЯ) рдкрд░ рдкрд░реАрдХреНрд╖рдг, рдЬрд┐рд╕рдореЗрдВ 4M + рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдореЗрдВ 4GB рдХрд╛ рдХрдмреНрдЬрд╛ рд╣реИ, рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 CREATE INDEX ON imdb USING gin(jb jsonb_path_ops); 

рдкреБрд░рд╛рдиреЗ рддрд░реАрдХреЗ рдиреЗ 205 рд╕реЗрдХрдВрдб, рд╡рд╛рд▓ 3.2 рдЬреАрдмреА, рдФрд░ рдирдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдиреЗ 133 рд╕реЗрдХрдВрдб рдФрд░ рд╡рд╛рд▓ 0.4 рдЬреАрдмреА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ред

5. рдХрдИ рд╕реНрддрдВрднреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ-рдХреЗрд╡рд▓ рд╕реНрдХреИрдирд┐рдВрдЧ рдХрд╛ рдЕрдиреБрдХреВрд▓рдиред


(рдЗрдВрдбреЗрдХреНрд╕-рдУрдирд▓реА рд╕реНрдХреИрди рдХреЛ рдХрдИ рдХреЙрд▓рдо рд╡рд╛рд▓реЗ рдЗрдВрдбреЗрдХреНрд╕ рдкрд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯрд┐рди рдирд╛рдЗрдЬрд╝рд╛рдирд┐рдХ)

рдЬрдм рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдХреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╕реНрдХреИрди (enable_indexonlyscan = off) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреЗрд╡рд▓ рд╕реНрдХреИрди рдХреЗ рд╕рд╛рде рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ 25% рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рддрдм рд╣реБрдЖ рдЬрдм рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдкрд░ SELECT рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЬреЛ рдЬреНрдпрд╛рджрд╛рддрд░ bytea рдкреНрд░рдХрд╛рд░ рдХреЗ рдереЗ, рдФрд░ рдЙрдирдХреЗ bytea рдХреЛ рдХреИрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕реЗ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдСрдлрд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдирд┐рдХреЛрд▓рд╛рдИ рд╢рд╛рдкрд▓реЛрд╡ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рднреА рджреЗрдЦреЗрдВ "рд╡реНрд╣рд╛рдЯреНрд╕ рдЗрдирд╕рд╛рдЗрдб рдЗрдЯ" )ред K-th рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд┐рдЫрд▓реЗ k-1 рдХреЛ рдЕрдирдкреИрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рджреНрд╡рд╛рд░рд╛ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдУ (рдПрди * рдПрди) рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд╣рд╛рдВ рдПрди рдлрд╝реАрд▓реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдпреЗ 25% рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 10 рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╣реБрдЖ рдерд╛ред

рдХреЛрдиреНрд╕реНрдЯреЗрдВрдЯрд┐рди рдирд┐рдЭрд╛рдирд┐рдХ рдиреЗ рдХреВрд▓реНрд╣реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛: рдХреЗ-рд╡реЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдкрд░, рдкрд┐рдЫрд▓реЗ рдХреЗ -1 рдХреЛ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдордп рдЦреЗрддреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИред рдкреИрдЪ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрдВрдбреЗрдХреНрд╕ рд╕реНрдХреИрди рдФрд░ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗрд╡рд▓ рд╕реНрдХреИрди рдХреЗ рд╕рд╛рде рд░рдирдЯрд╛рдЗрдо рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╣реИред

6. рдирд┐рдпрдВрддреНрд░рдг рдбрдВрдкрд┐рдВрдЧ рдбрд┐рд╕реНрдХ рдХреЗ рд▓рд┐рдП рд╕реЗрдЧрдореЗрдВрдЯ рдбрд┐рд╕реНрдХ


(рд╡рд╛рд▓ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ fsync рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдШрдЯрдирд╛ рдЬреЛрдбрд╝реЗрдВред рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯрд┐рди рдирд╛рдЗрдЬрд╝рд╛рдирд┐рдХ)

PostgreSQL рдХрд░реНрдиреЗрд▓ рд╡рд╛рд▓ рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрдореЛрд░реА рд╕реЗ рдбрд┐рд╕реНрдХ, рдпрд╛рдиреА fsync рддрдХ рд╡рд╛рд▓ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рдлреНрд▓рд╢рд┐рдВрдЧ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреЗред рдирд╛рдЗрдЬрд╝рд╛рдирд┐рдХ рдиреЗ рдПрдХ рдкреИрдЪ рдмрдирд╛рдпрд╛ рдЬреЛ рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХрд╛ рдИрд╡реЗрдВрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдЕрдм WALSync рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдЖрдВрддрд░рд┐рдХ рдирд╛рдо WAIT_EVENT_WAL_SYNC рд╣реИ)ред рдЖрдк рдЗрд╕реЗ рдкреАрдЬреА рдИрд╡реЗрдВрдЯ рд▓реЗрдмрд▓ рдореЗрдВ "рднрд░реЛрд╕реЗрдордВрдж рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд▓рд┐рдП рд╡реАрд▓ рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ" рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╣реИрдХрд░реНрд╕ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереАред

рд░реАрд╕реЗрдЯ рдХрд┐рддрдирд╛ рд╕рдордп рд▓реЗрддрд╛ рд╣реИ рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЕрдЬреНрдЮрд╛рдд рд╣реИ: рдорд╛рдирдХ PostgreSQL рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рдХреИрд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд▓реЗрдХрд┐рди Postgres Professional рдореЗрдВ рдПрдХ pg_wait_sampling рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд┐рдЦрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЯреНрд╕ рдХрд┐рди рдШрдЯрдирд╛рдУрдВ рдкрд░ рд╕рдордп рдмрд┐рддрд╛рддреЗ рд╣реИрдВред рдЕрдм рдЬрдм рдИрд╡реЗрдВрдЯ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдк fsync рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

7. рд╕реНрдЯреЗрдо рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдореЗрдВ рдирдИ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди


(рдЕрдкрдбреЗрдЯ рд╕реНрдиреЛрдмреЙрд▓ рд╕реНрдЯреЗрдорд░ рдирдИ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рд╢рдмреНрджрдХреЛрд╢ред рдЖрд░реНрдерд░ рдЬрдХреАрд░реЛрд╡)

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

8. рдХрд╛рд░реНрдп to_timestamp () / to_date () рдбреЗрдЯрд╛ рдХреЗ рдЕрдзрд┐рдХ рд╕рд╣рд┐рд╖реНрдгреБ рд╣реЛ рдЧрдП рд╣реИрдВ


(To_timestamp () / to_date () рдЯреЗрдореНрдкрд▓реЗрдЯ рдорд┐рд╕рдореИрдЪ рдХреЗ рдЕрдзрд┐рдХ рдХреНрд╖рдорд╛рд╢реАрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрддреБрд░ рдЬрдХреАрд░реЛрд╡, рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдХреЛрд░реЛрдЯрдХреЛрд╡, рд▓рд┐рдпреБрдбрдорд┐рд▓рд╛ рдордВрдЯреНрд░реЛрд╡рд╛)

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

9. рд▓реЙрдЧ рдХреЛ pg_ctl рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШреБрдорд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ


(Pg_ctl рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рд░реЛрдЯреЗрд╢рди рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред Kyotaro Horiguchi, рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдХреБрдЬрд╝рдореЗрдирдХреЛрд╡, рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдХреЛрд░реЛрдЯрдХреЛрд╡)

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, pg_ctl рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдиреЗ рдПрдХ рдирдпрд╛ рд╡рд┐рдХрд▓реНрдк рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ:

 pg_ctl logrotate [-D _] [-s] 

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

10. рдирдП рдкреНрд░рдХрд╛рд░ рдХреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ (рдкреНрд▓рдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рднрдВрдбрд╛рд░рдг)


(рдирдИ рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП CREATE ACCESS METHOD рдХрдорд╛рдВрдб рдЬреЛрдбрд╝реЗрдВред Andres Freund, Haribabu Kommi, errlvaro Herrera, Alexander Korotkov, Dmitry Dolgov)

рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреИрдЪ рдкреНрд▓рдЧрдЧреЗрдмрд▓ рд╕реНрдЯреЛрд░реЗрдЬ рдПрдкреАрдЖрдИ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХрд╛ рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреИрдЪ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдп рд░рдЪрдирд╛ рд╣реИред рдХреНрд░реЗрдЯ рдПрдХреНрдЯреЗрд╕ рдореЗрдереЛрдб рдХрдорд╛рдВрдб рд╕рдВрд╕реНрдХрд░рдг 9.6 рдХреЗ рдмрд╛рдж рд╕реЗ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди 12 рд╡реАрдВ рддрдХ, рдЖрдк рдХреЗрд╡рд▓ рдЗрдВрдбреЗрдХреНрд╕ рдПрдХреНрд╕реЗрд╕ рдХреЗ рддрд░реАрдХреЗ рдмрдирд╛ рд╕рдХрддреЗ рдереЗред рдпрд╣рд╛рдБ 11 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рд╣реИ :

 CREATE ACCESS METHOD  TYPE __ HANDLER _ < ... > __       .      INDEX. 

рдФрд░ 12 рд╡реАрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрдврд╝рд╛ рдЧрдпрд╛ рд╣реИ : рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ TABLE рдФрд░ INDEX рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рд╕рдВрдпреЛрдЧ рд╕реЗ, 11 рд╡реАрдВ рдХреНрд░рд┐рдПрдЯ рдПрд╕реАрд╕реА рдореЗрдереЛрдб рдХрдорд╛рдВрдб рдореЗрдВ рдкреЛрд╕реНрдЯрдЧреНрд░реИрд╕ рдкреНрд░реЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ 12 рд╡реАрдВ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдХреНрдпреВрдПрд▓ред

рдСрдкрд░реЗрд╢рди рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдПрдХреНрд╕реЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ; рдпрджрд┐ рдпрд╣ рдПрдХ TABLE рдкреНрд░рдХрд╛рд░ рд╣реИ, рддреЛ table_am_handler рдЗрд╕реЗ table_am_handler , рдФрд░ рдпрджрд┐ рдпрд╣ рдПрдХ INDEX рдкреНрд░рдХрд╛рд░ рд╣реИ, рддреЛ index_am_handler (рдкрд╣рд▓реЗ: рдкреНрд░рдХрд╛рд░ INDEX рдХреЗ рдПрдХреНрд╕реЗрд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ index_am_handler рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдПрдХ рдкреВрд░рд╛ рдЕрдзреНрдпрд╛рдп рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рд╣реИ ред

рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рддреЗ рд╕рдордп, рдЕрдм рдЖрдк рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] _ ( [ < ... > [ USING  ] 

рд╡рд┐рдзрд┐ рдЯрд╛рдЗрдк рдЯреЗрдмрд▓ рдХреА рд╣реИ - рдпрд╣ рдкреНрд▓рдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн рд╣реИред рдЕрдм рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ heap рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдирд╣реАрдВ рдерд╛ред рдСрдкрд░реЗрдЯрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдБ

default_table_access_method (string)

рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд╛рд▓рд┐рдХрд╛ рдкрд╣реБрдВрдЪ рд╡рд┐рдзрд┐ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдпрд╛ рднреМрддрд┐рдХ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдмрдирд╛рддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рдкрд╣реБрдВрдЪ рд╡рд┐рдзрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ CREATE рдХрдорд╛рдВрдб рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдЬрдм SELECT ... INTO рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдкрд╣реБрдВрдЪ рд╡рд┐рдзрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди heap ред рд╣реИрдХрд░реНрд╕ рдХреА рдмрдбрд╝реА рдЪрд░реНрдЪрд╛ рд╕реЗ рд╡рд┐рд╡рд░рдг рдирд┐рдХрд╛рд▓рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИред

рдЗрд╕ рдХреНрд╖рдг рддрдХ, рд╣рдордиреЗ рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреАред рд▓реЗрдХрд┐рди рдмрдЧ рдлрд┐рдХреНрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреЗ рд╕рдордп рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рджреВрд░ рдХрд░ рджреЗрддрд╛ рд╣реИред рдореБрдЦреНрдп рд╣реИрдВ:

11. рдмрдЧ: рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐


_DumpOptions рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд quot_all_identifiersред рдЖрд░реНрдерд░ рдЬрд╝рд╛рдХрд┐рд░реЛрд╡)

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдирд╣реАрдВ, рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдкрд╛рдИ рдЧрдИ рдЬреЛ pg_dump рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ - рдпрд╣ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЪреВрдХ рдЧрдИ рдереАред рд▓реЗрдХрд┐рди рдмреНрд░реВрд╕ рдореЛрдореНрдЬреНрдпрд╛рди рдиреЗ рдЦреБрдж рдХреЛ рдвреВрдВрдврдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рдВрд╕рд╛ рдХреА ред

DumpOptions рд╕рд╛рде рдЕрдиреНрдп рдореБрджреНрджреЛрдВ рдХреЛ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

12. рдкреНрд░рддрд┐рдХреГрддрд┐ рдореЗрдВ рдмрдЧ:


(xlogreader: рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмреНрд▓реЙрдХ рдХреЛ рджреЛ рдмрд╛рд░ рди рдкрдврд╝реЗрдВред рдЖрд░реНрдерд░ рдЬрдХреАрд░реЛрд╡)

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

рдпрджрд┐ рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдХреЛ рдЕрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рджрд░реНрд╢рди рдЦрд░рд╛рдм рд╣реИред рдмреНрд▓реЙрдХ рдХрд╛ рдмрд╛рд░-рдмрд╛рд░ рдкрдврд╝рдирд╛ рд╣рдореЗрд╢рд╛ рдЕрд╕рдВрдЧрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ gzseek() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдкрд╛рд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд╛рдкрд╕ рд▓реМрдЯрдирд╛ рд╣реЛрдЧрд╛ред рдЕрдм рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реА-рд░реАрдбрд┐рдВрдЧ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

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

Source: https://habr.com/ru/post/hi472072/


All Articles