PK เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚ เจŸเฉ‡เจฌเจฒ เจคเฉ‹เจ‚ เจ•เจฒเฉ‹เจจ เจฐเจฟเจ•เจพเจฐเจก เจ•เจฒเฉ€เจ…เจฐ เจ•เจฐเจจเจพ

เจ…เจœเจฟเจนเฉ€เจ†เจ‚ เจธเจฅเจฟเจคเฉ€เจ†เจ‚ เจนเฉเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจ เจœเจฆเฉ‹เจ‚ เจชเฉเจฐเจพเจ‡เจฎเจฐเฉ€ เจ•เฉเฉฐเจœเฉ€ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚ เจ‡เฉฑเจ• เจŸเฉ‡เจฌเจฒ เจคเฉ‡ เจœเจพเจ‚ เจ•เฉเจ เจนเฉ‹เจฐ เจตเจฟเจฒเฉฑเจ–เจฃ เจธเฉ‚เจšเจ•เจพเจ‚เจ•, เจ‡เฉฑเจ• เจจเจฟเจ—เจฐเจพเจจเฉ€ เจฆเฉ‡ เจ•เจพเจฐเจจ, เจชเจนเจฟเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจฎเฉŒเจœเฉ‚เจฆ เจฐเจฟเจ•เจพเจฐเจกเจพเจ‚ เจฆเฉ‡ เจชเฉ‚เจฐเฉ‡ เจ•เจฒเฉ‹เจจ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ‡ เจ—เจ เจนเจจเฅค

PK เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚ เจŸเฉ‡เจฌเจฒ เจคเฉ‹เจ‚ เจ•เจฒเฉ‹เจจ เจฐเจฟเจ•เจพเจฐเจก เจ•เจฒเฉ€เจ…เจฐ เจ•เจฐเจจเจพ

เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ‡เฉฑเจ• เจ•เจพเจฒเจ•เฉเจฐเจฎเจฟเจ• เจฎเฉˆเจŸเฉเจฐเจฟเจ• เจฆเฉ‡ เจฎเฉเฉฑเจฒ เจ‡เฉฑเจ• 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) เจ…เจคเฉ‡ เจ‡เจธ เจคเฉฑเจฅ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจจเจพเจฒ เจจเจœเจฟเฉฑเจ เฉ‹ เจœเฉ‡เจ•เจฐ เจ‰เจน เจชเฉˆเจฆเจพ เจนเฉเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจเฅค

"เจ•เจฒเฉ‹เจจเจฟเจ• เจฏเฉเฉฑเจง เจธเจผเฉเจฐเฉ‚ เจนเฉ‹ เจ—เจฟเจ† เจนเฉˆ"

เจ•เจฟเจธเฉ‡ เจ•เจฟเจธเจฎ เจฆเจพ เจนเจพเจฆเจธเจพ เจตเจพเจชเจฐเจฟเจ†, เจ…เจคเฉ‡ เจนเฉเจฃ เจธเจพเจจเฉ‚เฉฐ เจŸเฉ‡เจฌเจฒ เจคเฉ‹เจ‚ เจ•เจฒเฉ‹เจจ เจฐเจฟเจ•เจพเจฐเจก เจจเฉ‚เฉฐ เจจเจธเจผเจŸ เจ•เจฐเจจเจพ เจชเจเจ—เจพ.

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 เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚ เจŸเฉ‡เจฌเจฒ เจคเฉ‹เจ‚ เจ•เจฒเฉ‹เจจ เจฐเจฟเจ•เจพเจฐเจก เจ•เจฒเฉ€เจ…เจฐ เจ•เจฐเจจเจพ
[explanation.tensor.ru 'เจคเฉ‡ เจฆเฉ‡เจ–เฉ‹]

เจนเจพเจ‚, เจธเจญ เจ•เฉเจ เจธเจนเฉ€ เจนเฉˆ: เจธเจพเจกเฉ‡ 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;

PK เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚ เจŸเฉ‡เจฌเจฒ เจคเฉ‹เจ‚ เจ•เจฒเฉ‹เจจ เจฐเจฟเจ•เจพเจฐเจก เจ•เจฒเฉ€เจ…เจฐ เจ•เจฐเจจเจพ
[explanation.tensor.ru 'เจคเฉ‡ เจฆเฉ‡เจ–เฉ‹]

เจ‡เจธ เจฒเจˆ, เจตเจฟเจงเฉ€ เจธเจซเจฒเจคเจพเจชเฉ‚เจฐเจตเจ• เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ€ เจนเฉˆ, เจชเจฐ เจ‡เจธเจจเฉ‚เฉฐ เจ•เฉเจ เจธเจพเจตเจงเจพเจจเฉ€ เจจเจพเจฒ เจตเจฐเจคเจฟเจ† เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ. เจ•เจฟเจ‰เจ‚เจ•เจฟ เจฎเจฟเจŸเจพเจ เจœเจพเจฃ เจตเจพเจฒเฉ‡ เจนเจฐเฉ‡เจ• เจฐเจฟเจ•เจพเจฐเจก เจฒเจˆ, เจŸเจฟเจก เจธเจ•เฉˆเจจ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจกเฉ‡เจŸเจพ เจชเฉ‡เจœ เจชเฉœเฉเจนเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจฎเจฟเจŸเจพเจ“ เจตเจฟเฉฑเจšเฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹