PK เด‡เดฒเตเดฒเดพเดคเต† เด’เดฐเต เดŸเต‡เดฌเดฟเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เตเดฒเดฟเดฏเตผ เดฑเต†เด•เตเด•เต‹เตผเดกเตเด•เตพ เดฎเดพเดฏเตโ€Œเด•เตเด•เตเดจเตเดจเต

เดŽเดชเตเดชเต‹เตพ เดธเดพเดนเดšเดฐเตเดฏเด™เตเด™เดณเตเดฃเตเดŸเต เดชเตเดฐเดพเดฅเดฎเดฟเด• เด•เต€ เด‡เดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เดฎเต‡เดถเดฏเดฟเดฒเต‡เด•เตเด•เต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเดฑเตเดฑเต‡เดคเต†เด™เตเด•เดฟเดฒเตเด‚ เด…เดฆเตเดตเดฟเดคเต€เดฏ เดธเต‚เดšเดฟเด•, เด’เดฐเต เดฎเต‡เตฝเดจเต‹เดŸเตเดŸเด‚ เด•เดพเดฐเดฃเด‚, เด‡เดคเดฟเดจเด•เด‚ เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ เดฑเต†เด•เตเด•เต‹เตผเดกเตเด•เดณเตเดŸเต† เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เด•เตเดฒเต‹เดฃเตเด•เตพ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต.

PK เด‡เดฒเตเดฒเดพเดคเต† เด’เดฐเต เดŸเต‡เดฌเดฟเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เตเดฒเดฟเดฏเตผ เดฑเต†เด•เตเด•เต‹เตผเดกเตเด•เตพ เดฎเดพเดฏเตโ€Œเด•เตเด•เตเดจเตเดจเต

เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด’เดฐเต เด•เตเดฐเต‹เดฃเต‹เดณเดœเดฟเด•เตเด•เตฝ เดฎเต†เดŸเตเดฐเดฟเด•เตเด•เดฟเตปเตเดฑเต† เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เด’เดฐเต เด•เต‹เดชเตเดชเดฟ เดธเตเดŸเตเดฐเต€เด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 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(เดฎเต†เดŸเตเดฐเดฟเด•เต, เดŸเดฟเดŽเดธเต, เดกเดพเดฑเตเดฑ) - เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เด…เดคเดฟเตปเตเดฑเต† เด…เดณเดตเต เดตเดณเดฐเต†เดฏเดงเดฟเด•เด‚ เดตเตผเดฆเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚, เด…เดคเต เดžเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฟเดฒเตเดฒ.

เด…เดคเดฟเดจเดพเตฝ, เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ เดจเต‹เตบ-เด…เดฆเตเดตเดฟเดคเต€เดฏ เดธเต‚เดšเดฟเด• เด‰เดฃเตเดŸเดพเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต เดเดฑเตเดฑเดตเตเด‚ เดถเดฐเดฟเดฏเดพเดฏ เด“เดชเตเดทเตป (เดฎเต†เดŸเตเดฐเดฟเด•เต, เดŸเดฟเดŽเดธเต) เดชเตเดฐเดถเตโ€Œเดจเด™เตเด™เตพ เด‰เดฃเตเดŸเดพเดฏเดพเตฝ เด…เดคเดฟเดจเต เดถเต‡เดทเด‚ เด…เดต เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเด•.

"เด•เตเดฒเต‹เดฃเดฟเด•เต เดฏเตเดฆเตเดงเด‚ เด†เดฐเด‚เดญเดฟเดšเตเดšเต"

เดšเดฟเดฒ เด…เดชเด•เดŸเด™เตเด™เตพ เดธเด‚เดญเดตเดฟเดšเตเดšเต, เด‡เดชเตเดชเต‹เตพ เดžเด™เตเด™เตพ เดŸเต‡เดฌเดฟเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เตเดฒเต‹เตบ เดฑเต†เด•เตเด•เต‹เตผเดกเตเด•เตพ เดจเดถเดฟเดชเตเดชเดฟเด•เตเด•เดฃเด‚.

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 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 เด‡เดฒเตเดฒเดพเดคเต† เด’เดฐเต เดŸเต‡เดฌเดฟเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เตเดฒเดฟเดฏเตผ เดฑเต†เด•เตเด•เต‹เตผเดกเตเด•เตพ เดฎเดพเดฏเตโ€Œเด•เตเด•เตเดจเตเดจเต
[explain.tensor.ru-เตฝ เด•เดพเดฃเตเด•]

เด…เดคเต†, เดŽเดฒเตเดฒเดพเด‚ เดถเดฐเดฟเดฏเดพเดฃเต: เดžเด™เตเด™เดณเตเดŸเต† 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;

PK เด‡เดฒเตเดฒเดพเดคเต† เด’เดฐเต เดŸเต‡เดฌเดฟเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เตเดฒเดฟเดฏเตผ เดฑเต†เด•เตเด•เต‹เตผเดกเตเด•เตพ เดฎเดพเดฏเตโ€Œเด•เตเด•เตเดจเตเดจเต
[explain.tensor.ru-เตฝ เด•เดพเดฃเตเด•]

เด…เดคเดฟเดจเดพเตฝ, เดฐเต€เดคเดฟ เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต, เดชเด•เตเดทเต‡ เด‡เดคเต เด•เตเดฑเดšเตเดšเต เดœเดพเด—เตเดฐเดคเดฏเต‹เดŸเต† เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฃเด‚. เด•เดพเดฐเดฃเด‚ เดกเดฟเดฒเต€เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจ เด“เดฐเต‹ เดฑเต†เด•เตเด•เต‹เตผเดกเดฟเดจเตเด‚ เดŸเดฟเดกเต เดธเตเด•เดพเดจเดฟเตฝ เด’เดฐเต เดกเดพเดฑเตเดฑ เดชเต‡เดœเตเด‚ เดกเดฟเดฒเต€เดฑเตเดฑเต เดŽเดจเตเดจเดคเดฟเตฝ เด’เดจเตเดจเตเดฎเดพเดฃเต.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•