เดเดชเตเดชเตเตพ เดธเดพเดนเดเดฐเตเดฏเดเตเดเดณเตเดฃเตเดเต เดชเตเดฐเดพเดฅเดฎเดฟเด เดเต เดเดฒเตเดฒเดพเดคเตเดค เดเดฐเต เดฎเตเดถเดฏเดฟเดฒเตเดเตเดเต เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดฎเดฑเตเดฑเตเดคเตเดเตเดเดฟเดฒเตเด เด เดฆเตเดตเดฟเดคเตเดฏ เดธเตเดเดฟเด, เดเดฐเต เดฎเตเตฝเดจเตเดเตเดเด เดเดพเดฐเดฃเด, เดเดคเดฟเดจเดเด เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ เดฑเตเดเตเดเตเตผเดกเตเดเดณเตเดเต เดชเตเตผเดฃเตเดฃเดฎเดพเดฏ เดเตเดฒเตเดฃเตเดเตพ เดเตพเดชเตเดชเตเดเตเดคเตเดคเดฟเดฏเดฟเดเตเดเตเดฃเตเดเต.
เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดเดฐเต เดเตเดฐเตเดฃเตเดณเดเดฟเดเตเดเตฝ เดฎเตเดเตเดฐเดฟเดเตเดเดฟเตปเตเดฑเต เดฎเตเดฒเตเดฏเดเตเดเตพ เดเดฐเต เดเตเดชเตเดชเดฟ เดธเตเดเตเดฐเตเด เดเดชเดฏเตเดเดฟเดเตเดเต PostgreSQL-เตฝ เดเดดเตเดคเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต, เดคเตเดเตผเดจเตเดจเต เดชเตเดเตเดเตเดจเตเดจเต เดเดฐเต เดชเดฐเดพเดเดฏเด เดธเดเดญเดตเดฟเดเตเดเตเดเดฏเตเด เดชเตเตผเดฃเตเดฃเดฎเดพเดฏเตเด เดธเดฎเดพเดจเดฎเดพเดฏ เดกเดพเดฑเตเดฑเดฏเตเดเต เดเดฐเต เดญเดพเดเด เดตเตเดฃเตเดเตเด เดเดคเตเดคเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต.
เด
เดจเดพเดตเดถเตเดฏเดฎเดพเดฏ เดเตเดฒเตเดฃเตเดเดณเตเดเต เดกเดพเดฑเตเดฑเดพเดฌเตเดธเต เดเดเตเดเดจเต เดเดดเดฟเดตเดพเดเตเดเดพเด?
เดธเดนเดพเดฏเดฟ เด เดฒเตเดฒเดพเดคเตเดคเดชเตเดชเตเตพ เดชเดฟ.เดเต
เด เดคเตเดคเดฐเดฎเตเดฐเต เดธเดพเดนเดเดฐเตเดฏเด เดเดฆเตเดฏเด เดเดฃเตเดเดพเดเตเดจเตเดจเดคเต เดคเดเดฏเตเด เดเดจเตเดจเดคเดพเดฃเต เดเดฑเตเดฑเดตเตเด เดเดณเตเดชเตเดชเดฎเตเดณเตเดณ เดฎเดพเตผเดเด. เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดฑเตเตพ เดชเตเดฐเตเดฎเดฑเดฟ เดเต. เดเดจเตเดจเดพเตฝ เดธเดเดญเดฐเดฟเดเตเด เดกเดพเดฑเตเดฑเดฏเตเดเต เด เดณเดตเต เดตเตผเดฆเตเดงเดฟเดชเตเดชเดฟเดเตเดเดพเดคเต เดเดคเต เดเดฒเตเดฒเดพเดฏเตเดชเตเดชเตเดดเตเด เดธเดพเดงเตเดฏเดฎเดฒเตเดฒ.
เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดเดฑเดตเดฟเด เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเตปเตเดฑเต เดเตเดคเตเดฏเดค เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเดฒเต เดซเตเตฝเดกเดฟเตปเตเดฑเต เดเตเดคเตเดฏเดคเดฏเตเดเตเดเดพเตพ เดเตเดเตเดคเดฒเดพเดฃเตเดเตเดเดฟเตฝ:
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 เดเดจเตเดจเดคเดฟเดจเตเดชเดเดฐเด เดเตเดฃเตเดเตเดกเตเตบ เดเดฐเต เดธเตเดเตเดเตปเดกเต เดฎเตเดฎเตเดชเต เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเตฝ เดฐเตเดเดชเตเดชเตเดเตเดคเตเดคเดฟเดฏเดฟเดเตเดเตเดฃเตเดเต, เดชเดเตเดทเต เดเดฐเต เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดตเตเดเตเดทเดฃเดเตเดฃเดฟเตฝ เดจเดฟเดจเตเดจเต เดคเดฟเดเดเตเดเตเด เดธเดพเดงเตเดตเดพเดฏเดฟ เดคเตเดเตผเดจเตเดจเต (เดเดฒเตเดฒเดพเดคเตเดคเดฟเดจเตเดฎเตเดชเดฐเดฟ, เดกเดพเดฑเตเดฑ เดฎเตเดฒเตเดฏเดเตเดเตพ เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฃเต!).
เดคเตเตผเดเตเดเดฏเดพเดฏเตเด เดจเดฟเดเตเดเตพเดเตเดเดคเต เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเตเด เดชเดฟเดเต(เดฎเตเดเตเดฐเดฟเดเต, เดเดฟเดเดธเต) - เดเดจเตเดจเดพเตฝ เดธเดพเดงเตเดตเดพเดฏ เดกเดพเดฑเตเดฑเดฏเตโเดเตเดเดพเดฏเดฟ เดเดเตเดเตพเดเตเดเต เดเตพเดชเตเดชเตเดเตเดคเตเดคเตฝ เดตเตเดฐเตเดฆเตเดงเตเดฏเดเตเดเตพ เดฒเดญเดฟเดเตเดเตเด.
เดเตเดฏเตเดฏเดพเดจเต เดเดดเดฟเดฏเตเด PK(เดฎเตเดเตเดฐเดฟเดเต, เดเดฟเดเดธเต, เดกเดพเดฑเตเดฑ) - เดเดจเตเดจเดพเตฝ เดเดคเต เด เดคเดฟเตปเตเดฑเต เด เดณเดตเต เดตเดณเดฐเตเดฏเดงเดฟเดเด เดตเตผเดฆเตเดงเดฟเดชเตเดชเดฟเดเตเดเตเด, เด เดคเต เดเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเดฟเดฒเตเดฒ.
เด เดคเดฟเดจเดพเตฝ, เดเดฐเต เดธเดพเดงเดพเดฐเดฃ เดจเตเตบ-เด เดฆเตเดตเดฟเดคเตเดฏ เดธเตเดเดฟเด เดเดฃเตเดเดพเดเตเดเตเด เดเดจเตเดจเดคเดพเดฃเต เดเดฑเตเดฑเดตเตเด เดถเดฐเดฟเดฏเดพเดฏ เดเดชเตเดทเตป (เดฎเตเดเตเดฐเดฟเดเต, เดเดฟเดเดธเต) เดชเตเดฐเดถเตโเดจเดเตเดเตพ เดเดฃเตเดเดพเดฏเดพเตฝ เด เดคเดฟเดจเต เดถเตเดทเด เด เดต เดเตเดเดพเดฐเตเดฏเด เดเตเดฏเตเดฏเตเด.
"เดเตเดฒเตเดฃเดฟเดเต เดฏเตเดฆเตเดงเด เดเดฐเดเดญเดฟเดเตเดเต"
เดเดฟเดฒ เด เดชเดเดเดเตเดเตพ เดธเดเดญเดตเดฟเดเตเดเต, เดเดชเตเดชเตเตพ เดเดเตเดเตพ เดเตเดฌเดฟเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดเตเดฒเตเตบ เดฑเตเดเตเดเตเตผเดกเตเดเตพ เดจเดถเดฟเดชเตเดชเดฟเดเตเดเดฃเด.
เดจเดฎเตเดเตเดเต เดฏเดฅเดพเตผเดคเตเดฅ เดกเดพเดฑเตเดฑ เดฎเดพเดคเตเดเดฏเดพเดเตเดเดพเด:
CREATE TABLE tbl(k text, v integer);
INSERT INTO tbl
VALUES
('a', 1)
, ('a', 3)
, ('b', 2)
, ('b', 2) -- oops!
, ('c', 3)
, ('c', 3) -- oops!!
, ('c', 3) -- oops!!
, ('d', 4)
, ('e', 5)
;
เดเดตเดฟเดเต เดเดเตเดเดณเตเดเต เดเต เดฎเตเดจเตเดจเต เดคเดตเดฃ เดตเดฟเดฑเดเตเดเต, Ctrl+V เดเตเดเตเดเตเดเดฟ, เดเดชเตเดชเตเตพ...
เดเดฆเตเดฏเด, เดจเดฎเตเดฎเตเดเต เดชเดเตเดเดฟเด เดตเดณเดฐเต เดตเดฒเตเดคเดพเดฏเดฟเดฐเดฟเดเตเดเตเดฎเตเดจเตเดจเต เดฎเดจเดธเดฟเดฒเดพเดเตเดเดพเด, เด เดคเดฟเดจเดพเตฝ เดเดฒเตเดฒเดพ เดเตเดฒเตเดฃเตเดเดณเตเด เดเดฃเตเดเตเดคเตเดคเดฟเดฏ เดถเตเดทเด, เดเดฒเตเดฒเดพเดคเดพเดเตเดเดพเตป เด เดเตเดทเดฐเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ โเดจเดฎเตเดฎเตเดเต เดตเดฟเดฐเตฝ เดเตเดคเตเดคเตเดจเตเดจเดคเตโ เดเดเดฟเดคเดฎเดพเดฃเต. เดชเตเดฐเดคเตเดฏเตเด เดฐเตเดเดเตพ เดตเตเดฃเตเดเตเด เดคเดฟเดฐเดฏเดพเดคเต.
เด
เดคเตเดคเดฐเดฎเตเดฐเต เดตเดดเดฟเดฏเตเดฃเตเดเต - เดเดคเต
เด เดคเดพเดฏเดคเต, เดเดจเตเดจเดพเดฎเดคเดพเดฏเดฟ, เดชเดเตเดเดฟเด เดตเดฐเดฟเดฏเตเดเต เดชเตเตผเดฃเตเดฃเดฎเดพเดฏ เดเดณเตเดณเดเดเตเดเดคเตเดคเดฟเตปเตเดฑเต เดชเดถเตเดเดพเดคเตเดคเดฒเดคเตเดคเดฟเตฝ เดเดเตเดเตพ เดฑเตเดเตเดเตเตผเดกเตเดเดณเตเดเต 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;
-- ERROR: could not identify an equality operator for type tbl
เด เดคเต, เด เดฑเตเดฏเดฟเตฝ เดเดจเตเดจเดฟเดฒเดงเดฟเดเด เดเตปเดเตเดฐเดฟเดเตพ เดเดฃเตเดเตเดเตเดเดฟเตฝ, เดเดตเดฏเตเดฒเตเดฒเดพเด เดเตเดฒเตเดฃเตเดเดณเดพเดฃเตเดจเตเดจเต เดเดเตเดเตพ เดเดเตป เดเดพเดฃเตเดจเตเดจเต. เดจเดฎเตเดเตเดเต เด เดตเดฐเต เดตเตเดฑเตเดคเต เดตเดฟเดเดพเด:
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 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[]);
เดจเดฎเตเดเตเดเต เดธเตเดตเดฏเด เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเดพเด:
เด เดคเต, เดเดฒเตเดฒเดพเด เดถเดฐเดฟเดฏเดพเดฃเต: เดเดเตเดเดณเตเดเต 3 เดฑเตเดเตเดเตเตผเดกเตเดเตพ เดฎเตเดดเตเดตเตป เดเตเดฌเดฟเดณเดฟเดฒเตเดฏเตเด เดเดฐเตเดฏเตเดฐเต Seq เดธเตเดเดพเดจเดฟเดจเดพเดฏเดฟ เดคเดฟเดฐเดเตเดเตเดเตเดคเตเดคเต, เดเตเดเดพเดคเต เดกเดพเดฑเตเดฑ เดคเดฟเดฐเดฏเดพเตป เดกเดฟเดฒเตเดฑเตเดฑเต เดจเตเดกเต เดเดชเดฏเตเดเดฟเดเตเดเต เดเดฟเดกเต เดธเตเดเดพเดจเตเดเตเดเตเดเดฟเดฏ เดเดฑเตเดฑ เดชเดพเดธเต:
-> Tid Scan on tbl (actual time=0.050..0.051 rows=3 loops=1)
TID Cond: (ctid = ANY ($0))
เดจเดฟเดเตเดเตพ เดเดฐเตเดชเดพเดเต เดฑเตเดเตเดเตเตผเดกเตเดเตพ เดฎเดพเดฏเตโเดเตเดเตเดเตเดเดฟเตฝ,
เดจเดฎเตเดเตเดเต เดเดฐเต เดตเดฒเดฟเดฏ เดชเดเตเดเดฟเดเดฏเตเด เดเตเดเตเดคเตฝ เดกเตเดฏเตเดชเตเดฒเดฟเดเตเดเตเดฑเตเดฑเตเดเดณเตเด เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเดพเด:
TRUNCATE TABLE tbl;
INSERT INTO tbl
SELECT
chr(ascii('a'::text) + (random() * 26)::integer) k -- a..z
, (random() * 100)::integer v -- 0..99
FROM
generate_series(1, 10000) i;
เด
เดคเดฟเดจเดพเตฝ, เดฐเตเดคเดฟ เดตเดฟเดเดฏเดเดฐเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต, เดชเดเตเดทเต เดเดคเต เดเตเดฑเดเตเดเต เดเดพเดเตเดฐเดคเดฏเตเดเต เดเดชเดฏเตเดเดฟเดเตเดเดฃเด. เดเดพเดฐเดฃเด เดกเดฟเดฒเตเดฑเตเดฑเต เดเตเดฏเตเดฏเตเดจเตเดจ เดเดฐเต เดฑเตเดเตเดเตเตผเดกเดฟเดจเตเด เดเดฟเดกเต เดธเตเดเดพเดจเดฟเตฝ เดเดฐเต เดกเดพเดฑเตเดฑ เดชเตเดเตเด เดกเดฟเดฒเตเดฑเตเดฑเต เดเดจเตเดจเดคเดฟเตฝ เดเดจเตเดจเตเดฎเดพเดฃเต.
เด
เดตเดฒเดเดฌเด: www.habr.com