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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╛рд▓рд╛рдиреБрдХреНрд░рдорд┐рдХ рдореАрдЯреНрд░рд┐рдХ рдХреЗ рдорд╛рди PostgreSQL COPY рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЕрдЪрд╛рдирдХ рд╡рд┐рдлрд▓рддрд╛, рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рди рдбреЗрдЯрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдлрд┐рд░ рд╕реЗ рдЖрддрд╛ рд╣реИред
рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреНрд▓реЛрди рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХреИрд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВ?
рдЬрдм рдкреАрдХреЗ рдПрдХ рд╕рд╣рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ
рдЗрд╕рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕рд╛ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрд╛ рдЬрд╛рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣реА рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдХреЛ рд░реЛрд▓ рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдореВрд▓ рдкреНрд░рдгрд╛рд▓реА рдХреА рд╕рдЯреАрдХрддрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреА рд╕рдЯреАрдХрддрд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ:
metric | ts | data -------------------------------------------------- cpu.busy | 2019-12-20 00:00:00 | {"value" : 12.34} cpu.busy | 2019-12-20 00:00:01 | {"value" : 10} cpu.busy | 2019-12-20 00:00:01 | {"value" : 11.2} cpu.busy | 2019-12-20 00:00:03 | {"value" : 15.7}
рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЧреМрд░ рдХрд┐рдпрд╛ рд╣реИ? 00:00:02 рдХреЗ рдмрдЬрд╛рдп рдЧрд┐рдирддреА рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдкрд╣рд▓реЗ ts рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд▓рд┐рдЦреА рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рдЖрд╡реЗрджрди рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХрд╛рдлреА рд╡реИрдз рдмрдиреА рд░рд╣реА (рдЖрдЦрд┐рд░рдХрд╛рд░, рдбреЗрдЯрд╛ рдорд╛рди рднрд┐рдиреНрди рд╣реИрдВ!)ред
рдмреЗрд╢рдХ, рдЖрдк
рдкреАрдХреЗ (рдореАрдЯреНрд░рд┐рдХ, рдЯреАрдПрд╕) рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ - рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╣рдореЗрдВ рд╡реИрдз рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╕рдореНрдорд┐рд▓рди рд╕рдВрдШрд░реНрд╖ рдорд┐рд▓реЗрдЧрд╛ред
рдЖрдк
рдкреАрдХреЗ (рдореАрдЯреНрд░рд┐рдХ, рдЯреАрдПрд╕, рдбреЗрдЯрд╛) рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ - рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдЗрд╕рдХреА рдорд╛рддреНрд░рд╛ рдмрд╣реБрдд рдмрдврд╝ рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
рдЗрд╕рд▓рд┐рдП, рд╕рдмрд╕реЗ рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рдПрдХ рдирд┐рдпрдорд┐рдд рдЧреИрд░-рдЕрджреНрд╡рд┐рддреАрдп рд╕реВрдЪрдХрд╛рдВрдХ
(рдореАрдЯреНрд░рд┐рдХ, рдЯреАрдПрд╕) рдмрдирд╛рдирд╛ рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рдж рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реИ, рдпрджрд┐ рд╡реЗ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
"рдХреНрд▓реЛрдирд┐рдХ рдпреБрджреНрдз рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рд╣реИ"
рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рджреБрд░реНрдШрдЯрдирд╛ рд╣реБрдИ, рдФрд░ рдЕрдм рд╣рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдХреНрд▓реЛрди рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдирд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВ:
CREATE TABLE tbl(k text, v integer); INSERT INTO tbl VALUES ('a', 1) , ('a', 3) , ('b', 2) , ('b', 2)
рдлрд┐рд░ рд╣рдорд╛рд░рд╛ рд╣рд╛рде рддреАрди рдмрд╛рд░ рдХрд╛рдВрдк рдЧрдпрд╛, Ctrl + V рдЕрдЯрдХ рдЧрдпрд╛, рдФрд░ рдЕрдм ...
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рд╕рдордЭреЗрдВ рдХрд┐ рд╣рдорд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЬрдм рд╣рдо рд╕рднреА рдХреНрд▓реЛрдиреЛрдВ рдХреЛ рдвреВрдВрдврддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рд╣рдо
рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдЦреЛрдЬреЗ рдмрд┐рдирд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ "рдПрдХ рдЙрдВрдЧрд▓реА рдХреЛ рджрдмрд╛рдПрдВ"ред
рдФрд░ рдРрд╕рд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ - рдпрд╣
ctid рджреНрд╡рд╛рд░рд╛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ , рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рднреМрддрд┐рдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ред
рдпрд╣реА рд╣реИ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдкрдВрдХреНрддрд┐ рдХреА рдкреВрд░реНрдг рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ ctid рд░рд┐рдХреЙрд░реНрдб рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╡рд┐рдХрд▓реНрдк рдкреВрд░реА рд▓рд╛рдЗрди рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдбрд╛рд▓рдирд╛ рд╣реИ:
SELECT T::text , array_agg(ctid) ctids FROM tbl T GROUP BY 1;
t | ctids --------------------------------- (e,5) | {"(0,9)"} (d,4) | {"(0,8)"} (c,3) | {"(0,5)","(0,6)","(0,7)"} (b,2) | {"(0,3)","(0,4)"} (a,3) | {"(0,2)"} (a,1) | {"(0,1)"}
рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд╛рд╕реНрдЯ рдХрд░реЗрдВ?рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдВрднрд╡ рд╣реИред рдЬрдм рддрдХ рдЖрдк
рд╕рдорд╛рдирддрд╛ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ
рдЯрд╛рдЗрдк рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ:
CREATE TABLE tbl(k text, v integer, x point); SELECT array_agg(ctid) ctids FROM tbl T GROUP BY T;
рд╣рд╛рдБ, рд╣рдо рддреБрд░рдВрдд рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рд╕рд░рдгреА рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВ, рддреЛ рд╕рднреА рдХреНрд▓реЛрди рд╣реИрдВред рдЪрд▓реЛ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рджреЗрдВ:
SELECT unnest(ctids[2:]) FROM ( SELECT array_agg(ctid) ctids FROM tbl T GROUP BY T::text ) T;
unnest ------ (0,6) (0,7) (0,4)
рдЫреЛрдЯрд╛ рдкреНрд░реЗрдореАрдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
SELECT unnest((array_agg(ctid))[2:]) FROM tbl T GROUP BY T::text;
рдЪреВрдВрдХрд┐ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬреНрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдореВрд▓реНрдп рд╣рдорд╛рд░реЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЗрд╕реЗ рдЙрдкрдирдЧрд░ рдХреЗ рджрд┐рдП рдЧрдП рдХреЙрд▓рдо рд╕реЗ рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджрд┐рдпрд╛ред
рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП DELETE рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИ:
DELETE FROM tbl WHERE ctid = ANY(ARRAY( SELECT unnest(ctids[2:]) FROM ( SELECT array_agg(ctid) ctids FROM tbl T GROUP BY T::text ) T )::tid[]);
рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЬрд╛рдВрдЪреЗрдВ:
[рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдкрд░ рджреЗрдЦреЗрдВ редensor.ru]рд╣рд╛рдВ, рд╕рдм рдХреБрдЫ рд╕рд╣реА рд╣реИ: рд╣рдорд╛рд░реЗ 3 рд░рд┐рдХреЙрд░реНрдб рдкреВрд░реЗ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдПрдХрдорд╛рддреНрд░ Seq рд╕реНрдХреИрди рдХреЗ рд▓рд┐рдП рдЪреБрдиреЗ рдЧрдП рдереЗ, рдФрд░ рд╣рдЯрд╛рдПрдБ рдиреЛрдб рдиреЗ
Tid рд╕реНрдХреИрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдПрдХ рдкрд╛рд╕ рдХрд╛
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ :
-> Tid Scan on tbl (actual time=0.050..0.051 rows=3 loops=1) TID Cond: (ctid = ANY ($0))
рдпрджрд┐ рдЖрдкрдиреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд░рд┐рдХреЙрд░реНрдб рд╕рд╛рдлрд╝ рдХрд░ рджрд┐рдП рд╣реИрдВ,
рддреЛ VACUUM ANALYZE рдбреНрд░рд╛рдЗрд╡ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ ред
рдЪрд▓реЛ рдПрдХ рдмрдбрд╝реА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЗрддрд╛ рд╣реИ:
TRUNCATE TABLE tbl; INSERT INTO tbl SELECT chr(ascii('a'::text) + (random() * 26)::integer) k
[рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдкрд░ рджреЗрдЦреЗрдВ редensor.ru]рддреЛ, рд╡рд┐рдзрд┐ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдереЛрдбрд╝реА рд╕рд╛рд╡рдзрд╛рдиреА рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпреЛрдВрдХрд┐ рд╣рдЯрд╛рдП рдЧрдП рд╣рд░ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, Tid рд╕реНрдХреИрди рдореЗрдВ рдбреЗрдЯрд╛ рдкреЗрдЬ рдХрд╛ рдПрдХ рд░реАрдбрд┐рдВрдЧ рд╣реИ, рдФрд░ рдПрдХ рдбрд┐рд▓реАрдЯ рдореЗрдВред