แƒ™แƒšแƒแƒœแƒ˜แƒก แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒฃแƒคแƒ—แƒแƒ•แƒ”แƒ‘แƒ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒ“แƒแƒœ PK-แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”

แƒแƒ แƒ˜แƒก แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ”แƒ‘แƒ˜, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ›แƒแƒ’แƒ˜แƒ“แƒแƒ–แƒ” แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“แƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒแƒœ แƒกแƒฎแƒ•แƒ แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜, แƒ–แƒ”แƒ“แƒแƒ›แƒฎแƒ”แƒ“แƒ•แƒ”แƒšแƒแƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒ, แƒจแƒ”แƒ“แƒ˜แƒก แƒฃแƒ™แƒ•แƒ” แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒ แƒฃแƒšแƒ˜ แƒ™แƒšแƒแƒœแƒ”แƒ‘แƒ˜.

แƒ™แƒšแƒแƒœแƒ˜แƒก แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒฃแƒคแƒ—แƒแƒ•แƒ”แƒ‘แƒ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒ“แƒแƒœ PK-แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒฅแƒ แƒแƒœแƒแƒšแƒแƒ’แƒ˜แƒฃแƒ แƒ˜ แƒ›แƒ”แƒขแƒ แƒ˜แƒ™แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒ˜แƒฌแƒ”แƒ แƒ”แƒ‘แƒ PostgreSQL-แƒจแƒ˜ COPY แƒœแƒแƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒแƒฃแƒšแƒแƒ“แƒœแƒ”แƒšแƒ˜ แƒ›แƒแƒ แƒชแƒฎแƒ˜ แƒ“แƒ แƒกแƒ แƒฃแƒšแƒ˜แƒแƒ“ แƒ˜แƒ“แƒ”แƒœแƒขแƒฃแƒ แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒ™แƒ•แƒšแƒแƒ• แƒ›แƒแƒ“แƒ˜แƒก.

แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒ•แƒแƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒšแƒแƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ แƒแƒ แƒแƒกแƒแƒญแƒ˜แƒ แƒ แƒ™แƒšแƒแƒœแƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ?

แƒ แƒแƒ“แƒ”แƒกแƒแƒช PK แƒแƒ  แƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”

แƒฃแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒกแƒ˜ แƒ’แƒ–แƒแƒ แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒแƒ˜แƒชแƒ˜แƒšแƒแƒ— แƒแƒกแƒ”แƒ—แƒ˜ แƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ’แƒแƒ“แƒแƒแƒฎแƒ•แƒ˜แƒ”แƒ— PRIMARY KEY. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒจแƒ”แƒœแƒแƒฎแƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒชแƒฃแƒšแƒแƒ‘แƒ˜แƒก แƒ’แƒแƒ–แƒ แƒ“แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”.

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ—แƒฃ แƒฌแƒงแƒแƒ แƒแƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒกแƒ˜แƒ–แƒฃแƒกแƒขแƒ” แƒฃแƒคแƒ แƒ แƒ›แƒแƒฆแƒแƒšแƒ˜แƒ, แƒ•แƒ˜แƒ“แƒ แƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ•แƒ”แƒšแƒ˜แƒก แƒกแƒ˜แƒ–แƒฃแƒกแƒขแƒ”:

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) แƒ“แƒ แƒ’แƒแƒฃแƒ›แƒ™แƒšแƒแƒ•แƒ“แƒ”แƒ— แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒก แƒคแƒแƒฅแƒขแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ—แƒฃ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ.

"แƒ™แƒšแƒแƒœแƒฃแƒ แƒ˜ แƒแƒ›แƒ˜ แƒ“แƒแƒ˜แƒฌแƒงแƒ"

แƒ›แƒแƒฎแƒ“แƒ แƒ แƒแƒฆแƒแƒช แƒฃแƒ‘แƒ”แƒ“แƒฃแƒ แƒ˜ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ แƒ“แƒ แƒแƒฎแƒšแƒ แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ•แƒแƒœแƒแƒ“แƒ’แƒฃแƒ แƒแƒ— แƒ™แƒšแƒแƒœแƒ˜แƒก แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒ“แƒแƒœ.

แƒ™แƒšแƒแƒœแƒ˜แƒก แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒฃแƒคแƒ—แƒแƒ•แƒ”แƒ‘แƒ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒ“แƒแƒœ 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โ€“ แƒ˜แƒ—, แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒคแƒ˜แƒ–แƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ˜.

แƒแƒœแƒฃ, แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜, แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ•แƒแƒ’แƒ แƒแƒ•แƒแƒ— แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก 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[]);

แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒแƒ›แƒแƒฌแƒ›แƒแƒ— แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒ—แƒแƒ•แƒ˜:

แƒ™แƒšแƒแƒœแƒ˜แƒก แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒฃแƒคแƒ—แƒแƒ•แƒ”แƒ‘แƒ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒ“แƒแƒœ PK-แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”
[แƒœแƒแƒฎแƒ”แƒ— description.tensor.ru]

แƒ“แƒ˜แƒแƒฎ, แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒกแƒฌแƒแƒ แƒ˜แƒ: แƒฉแƒ•แƒ”แƒœแƒ˜ 3 แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜ แƒจแƒ”แƒ˜แƒ แƒฉแƒ แƒ›แƒ—แƒ”แƒšแƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒ”แƒ แƒ—แƒแƒ“แƒ”แƒ แƒ—แƒ˜ Seq Scan-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ Delete แƒ™แƒ•แƒแƒœแƒซแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒแƒ“แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒกแƒแƒซแƒ˜แƒ”แƒ‘แƒšแƒแƒ“ แƒ”แƒ แƒ—แƒฏแƒ”แƒ แƒแƒ“แƒ˜ แƒกแƒแƒจแƒ•แƒ˜ Tid Scan-แƒ˜แƒ—:

->  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 -- a..z
, (random() * 100)::integer v -- 0..99
FROM
  generate_series(1, 10000) i;

แƒ™แƒšแƒแƒœแƒ˜แƒก แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒฃแƒคแƒ—แƒแƒ•แƒ”แƒ‘แƒ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒ“แƒแƒœ PK-แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”
[แƒœแƒแƒฎแƒ”แƒ— description.tensor.ru]

แƒแƒกแƒ” แƒ แƒแƒ›, แƒ›แƒ”แƒ—แƒแƒ“แƒ˜ แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒก แƒฃแƒœแƒ“แƒ แƒ˜แƒฅแƒœแƒแƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒกแƒ˜แƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ˜แƒ—. แƒ แƒแƒ“แƒ’แƒแƒœ แƒงแƒ•แƒ”แƒšแƒ แƒฌแƒแƒจแƒšแƒ˜แƒšแƒ˜ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒแƒ แƒ˜แƒก แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒ˜ Tid Scan-แƒจแƒ˜ แƒ“แƒ แƒ”แƒ แƒ—แƒ˜ แƒฌแƒแƒจแƒšแƒแƒจแƒ˜.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ