เจ เจเจฟเจนเฉเจเจ เจธเจฅเจฟเจคเฉเจเจ เจนเฉเฉฐเจฆเฉเจเจ เจนเจจ เจเจฆเฉเจ เจชเฉเจฐเจพเจเจฎเจฐเฉ เจเฉเฉฐเจเฉ เจคเฉเจ เจฌเจฟเจจเจพเจ เจเฉฑเจ เจเฉเจฌเจฒ เจคเฉ เจเจพเจ เจเฉเจ เจนเฉเจฐ เจตเจฟเจฒเฉฑเจเจฃ เจธเฉเจเจเจพเจเจ, เจเฉฑเจ เจจเจฟเจเจฐเจพเจจเฉ เจฆเฉ เจเจพเจฐเจจ, เจชเจนเจฟเจฒเจพเจ เจคเฉเจ เจฎเฉเจเฉเจฆ เจฐเจฟเจเจพเจฐเจกเจพเจ เจฆเฉ เจชเฉเจฐเฉ เจเจฒเฉเจจ เจธเจผเจพเจฎเจฒ เจเฉเจคเฉ เจเจ เจนเจจเฅค
เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจเฉฑเจ เจเจพเจฒเจเฉเจฐเจฎเจฟเจ เจฎเฉเจเฉเจฐเจฟเจ เจฆเฉ เจฎเฉเฉฑเจฒ เจเฉฑเจ COPY เจธเจเฉเจฐเฉเจฎ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ 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 เจฆเฉ เจฌเจเจพเจ เจเจพเจเจเจเจกเจพเจเจจ เจเฉฑเจ เจธเจเจฟเฉฐเจ เจชเจนเจฟเจฒเจพเจ ts เจฆเฉ เจจเจพเจฒ เจกเฉเจเจพเจฌเฉเจธ เจตเจฟเฉฑเจ เจฐเจฟเจเจพเจฐเจก เจเฉเจคเจพ เจเจฟเจ เจธเฉ, เจชเจฐ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฆเฉ เจฆเฉเจฐเจฟเจธเจผเจเฉเจเฉเจฃ เจคเฉเจ เจเจพเจซเจผเฉ เจตเฉเจง เจฐเจฟเจนเจพ (เจเจเจผเจฐเจเจพเจฐ, เจกเฉเจเจพ เจฆเฉ เจฎเฉเฉฑเจฒ เจตเฉฑเจเจฐเฉ เจนเจจ!)
เจฌเฉเจธเจผเฉฑเจ เจคเฉเจธเฉเจ เจเจน เจเจฐ เจธเจเจฆเฉ เจนเฉ PK(เจฎเฉเจเฉเจฐเจฟเจ, ts) - เจชเจฐ เจซเจฟเจฐ เจธเจพเจจเฉเฉฐ เจตเฉเจง เจกเฉเจเจพ เจฒเจ เจธเฉฐเจฎเจฟเจฒเจจ เจตเจฟเจตเจพเจฆ เจชเฉเจฐเจพเจชเจค เจนเฉเจฃเจเฉเฅค
เจเจฐ เจธเจเจฆเจพ เจนเฉ PK(เจฎเฉเจเฉเจฐเจฟเจ, ts, เจกเฉเจเจพ) - เจชเจฐ เจเจน เจเจธเจฆเฉ เจตเจพเจฒเฉเจ เจฎ เจจเฉเฉฐ เจฌเจนเฉเจค เจตเจงเจพ เจฆเฉเจตเฉเจเจพ, เจเจฟเจธเจฆเฉ เจ เจธเฉเจ เจตเจฐเจคเฉเจ เจจเจนเฉเจ เจเจฐเจพเจเจเฉ.
เจเจธ เจฒเจ, เจธเจญ เจคเฉเจ เจธเจนเฉ เจตเจฟเจเจฒเจช เจจเจฟเจฏเจฎเจค เจเฉเจฐ-เจตเจฟเจฒเฉฑเจเจฃ เจธเฉเจเจเจพเจเจ เจฌเจฃเจพเจเจฃเจพ เจนเฉ (เจฎเฉเจเฉเจฐเจฟเจ, ts) เจ เจคเฉ เจเจธ เจคเฉฑเจฅ เจคเฉเจ เจฌเจพเจ เจฆ เจธเจฎเฉฑเจธเจฟเจเจตเจพเจ เจจเจพเจฒ เจจเจเจฟเฉฑเจ เฉ เจเฉเจเจฐ เจเจน เจชเฉเจฆเจพ เจนเฉเฉฐเจฆเฉเจเจ เจนเจจเฅค
"เจเจฒเฉเจจเจฟเจ เจฏเฉเฉฑเจง เจธเจผเฉเจฐเฉ เจนเฉ เจเจฟเจ เจนเฉ"
เจเจฟเจธเฉ เจเจฟเจธเจฎ เจฆเจพ เจนเจพเจฆเจธเจพ เจตเจพเจชเจฐเจฟเจ, เจ เจคเฉ เจนเฉเจฃ เจธเจพเจจเฉเฉฐ เจเฉเจฌเจฒ เจคเฉเจ เจเจฒเฉเจจ เจฐเจฟเจเจพเจฐเจก เจจเฉเฉฐ เจจเจธเจผเจ เจเจฐเจจเจพ เจชเจเจเจพ.
เจเจ เจ
เจธเจฒเฉ เจกเฉเจเจพ เจฆเจพ เจฎเจพเจกเจฒ เจเจฐเฉเจ:
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 เจเจฐเฉ:
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 เจฐเจฟเจเจพเจฐเจก เจชเฉเจฐเฉ เจธเจพเจฐเจฃเฉ เจฆเฉ เจธเจฟเจฐเจซ เจธเฉเจ เจธเจเฉเจจ เจฒเจ เจเฉเจฃเฉ เจเจ เจธเจจ, เจ เจคเฉ เจฎเจฟเจเจพเจ เจจเฉเจก เจฆเฉ เจตเจฐเจคเฉเจ เจกเฉเจเจพ เจฆเฉ เจเฉเจ เจฒเจ เจเฉเจคเฉ เจเจ เจธเฉ เจเจฟเจก เจธเจเฉเจจ เจจเจพเจฒ เจธเจฟเฉฐเจเจฒ เจชเจพเจธ:
-> 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