ืืืจ ืืึธืื ืืฆืืื ืืืืืื ื ืื ืกืืจืืงืืืจ ืคืื ืืื ืืืขืจ PostgreSQL ืืึทืืึทืืืืก ืคึฟืึทืจ ืกืืึธืจืื ื ืงืึธืจืขืกืคึผืึธื ืืขื ืฅ, ืึท ืืึธืจ ืืื ืืืจืืืขืืื ืืขื, ืืืืขืจื ืืขื ืขื ืึทืงืืืืืื ืคืืืื ื ืขืก, ืืื ืืืฆื ืขืก ืึผืืื ืืืืืึทื ื ืคืื ืจืขืงืึธืจืืก, ืืื ... ืขืคึผืขืก ืื ืืขืืืืื ืฆื ืคึผืึทืืขืืขื.
ืืืื 1: ืืืืืื ืื ื ืื ืืึทืืข ืจืึทื - ืืืื 2: ืกืขืงืฉืึทื "ืคึฟืึทืจ ื ืืฅ"
ืคืึทืงื ืืื ืึทื ืืื ืื ืืืฉ ืืจืืืก ืืืืงืกื, ืึทืืื ืืืื ืื "ืืืคืงืืึทื" ืคืื ืื ืื ืืขืงืกืื. โ ืืืืฉ ืืืืืจืืืืืฉ. ืึธืืขืจ ืืื ืฆืืื, ืืึธืก ืคืึธืจืกืขืก ืื ืกืขืจืืืขืจ ืฆื ืืืจืืคืืจื ืื ืืขืืืข ืืืืขื ืขื / ืฉืจืืึทืื ืืึทืกืงืก ืคึผืจืึธืฆืขืก ืคืืืข ืืึธื ืืขืจ ืืืขืืขืจ ืคืื ืืึทืืืืื ืืื ืื ืึธื ืืืื.
ืืึธืก ืืื ืืื ืขืก ืงืืื ืฆื ืจืึทืืขืืืขื ืกืขืงืฆืืข.
ืืึธืื ืืืจ ืืึธื ืึทื ืืืจ ืืขื ืขื ื ืืฉื ืืขืจืขืื ืืืขืื ืฉืึทืจืืื ื, ืืึธืก ืืื, ืืืกืืจืืืืืืื ื ืืึทืื ืฆืืืืฉื ืคืึทืจืฉืืืขื ืข ืืึทืืึทืืืืกืื ืึธืืขืจ ืกืขืจืืืขืจืก. ืืืืึทื ืืคืืื ืืืืืืื ืื ืืึทืื ืืื ืขืืืขืืข ืกืขืจืืืขืจืก, ืืืจ ืืืขื ื ืืฉื ืืึทืงืืืขื ืืึทืคืจืืึทืขื ืคืื ืื ืคึผืจืึธืืืขื ืคืื "ืฉืืืขืื" ืื ืืขืงืกืื ืืืืขืจ ืฆืืึทื. ืขืก ืืื ืงืืึธืจ ืึทื ืืืื ืืืจ ืงืขื ืขื ืคืึทืจืืื ืขื ืืื ืฆื ืฉืืขืื ืึท ื ืืึท ืกืขืจืืืขืจ ืืื ืึธืคึผืขืจืึทืฆืืข ืืขืืขืจ ืืึธื, ืืืื ืคึผืจืึธืืืขืืก ืืืขื ื ืื ืืขืจ ืืืื ืืื ืื ืคืืึทื ืคืื ืึท ืกืคึผืขืฆืืคืืฉ ืืึทืืึทืืืืก.
ืืืจ ืืืขืื ืืึทืืจืึทืืื ื ืื ืกืคึผืขืฆืืคืืฉ ืกืงืจืืคึผืก ืคึฟืึทืจ ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืคึผืึทืจืืืฉืึทื ืื ื "ืืื ืืึทืื ืืืึทืจื", ืึธืืขืจ ืืขืจ ืฆืืืึทื ื ืืื - ืืืึธืก ืืื ืืื ืืึธื ืืืื "ืฉื ืืึทืื ืืื ืกืืืืกืื", ืืื ืืืึธืก ืึทืืึท ืึท ืคืึทืจืืึทื ื ืคืืจื ืฆื.
ืืึทืืจืืฃ
ืืึธืืืจ ืืขืคืื ืืจื ืืื ืืืขืจ ืฆืื ืืืืืขืจ: ืืืจ ืืืืื ืฆื ืืึทืื ืืืืขืจ ืึทื ืืืึทื ื, ืืึธืจืื ืืื ืืื ืึท ืืึธืจ, ืื ืกืืืข ืคืื โโโโืืึทืื ืืืืขื ืขื ืืืจื PostgreSQL ืืขืฉืึทืก ืงืืื ืืืืขื ืขื / ืฉืจืืึทืื ืึธืคึผืขืจืึทืฆืืข ืืืืืื ืืขืขืจืขื ืืขืจ ืืขืืืืงืขืจ.
ืคึฟืึทืจ ืงืืื ืงืจืึทื ืึทืืึทืืืฉืืงืื ืึทืงืืืืืึทืืืืืื ืืึทืื ( ืึทืจืืืงืืขื, ืืึธืงืืืขื ืื, ืืึธืืก, ืึทืจืงืืืืื, ...) ืื ื ืึทืืืจืืขื ืืจืืจื ืืื ืึท ืคึผืึทืจืืืฉืึทื ืื ื ืฉืืืกื ืืื ืืขืฉืขืขื ืืฉ ืืึธื / ืฆืืื. ืืื ืืื ืืืขืจ ืคืึทื, ืึทืืึท ืึท ืืขืฉืขืขื ืืฉ ืืื ืืึธืืขื ื ืคืื ืฉืืงื ืืขื ืึธื ืืึธื.
ืืึทืืขืจืงืื ื ืึทื ื ืืฆืขืจืก ืึผืืขื ืฉืืขื ืืืง ืึทืจืืขื ืืืืื ืืื ืื "ืืขืฆืืข" ืึธื ืขืก ืึทืืึท ืืึทืื - ืืื ืืืืขื ืขื ืื ืืขืฆืืข ืึทืจืืืงืืขื, ืึทื ืึทืืืื ืื ืืขืฆืืข ืืึธืืก, ... ื ืืื, ืึทืืืืื, ืืื ืงืขื ืขื ืืขืืืืข ืืืืึทืืขืจ ืฆืืจืืง ืืื ืฆืืื, ืึธืืขืจ ืืื ืืึธื ืืึธืก ืืืืขืจ ืืขืืื.
ืคืื ืื ืงืึทื ืกืืจืืื ืฅ ืขืก ืืื ืงืืึธืจ ืึทื ืื ืึธืคึผืืืืึทื ืึธื ืืึธื ืืืืืื ื ืืืึธืื ืืืื "ืืขืืืขื" ืกืขืงืฉืึทื ื - ื ืึธื ืึทืืข, ืืื ืืืขืจ ืืึทื ืืฆืขืจ ืืืขื ืึผืืขื ืฉืืขื ืืืง ืืืืขื ืขื ืืืึธืก ืืขืงืืืขื ืฆื ืืื "ืืืึทื ื" ืึธืืขืจ "ื ืขืืื".
ืืืื ืืืจ ืฉืจืืืื ืืื ืืืืขื ืขื ืึผืืขื ืืืืื ืืื ืืืื ืึธืคึผืืืืืื ื ืืขืฉืึทืก ืืขื ืืึธื, ืืึธืก ืืื ืืื ืื ืืืื ืืขืจ ืขืคืขืงืืืื ื ืืฆื ืคืื ืืึผืจืื ืืื ืืืกืง - ืืื ื ืึทืืข ืึธืคึผืืืืืื ื ืื ืืขืงืกืื ืืืืื ืคึผืึทืกืืง ืืื ืื ืืึทืจืึทื, ืืื ืงืึทื ืืจืึทืกื ืฆื ืื "ืืจืืืก ืืื ืคืขื" ืึธื ืขืก ืืืืขืจ ืื ืืืฉ.
ืฉืจืื-ืคึฟืึทืจ-ืฉืจืื
ืืื ืึทืืืขืืืื, ืึทืืฅ ืืขืืึธืื ืืืืื ืกืึธืื ืืก ืืื ืืืื ืงืขืกืืืืขืจืืืง ื ืืฅ. ืืื ืขืก ืืื ืึทืืฉืืืืึทืืึทื, ืึธืืขืจ ืคึฟืึทืจ ืืขื ืืืจ ืืืขืื ืืึธืื ืฆื ืคึผืจืืืืจื ืฉืืืขืจ - ืืืืึทื ืืขืจ ืืึทืฉืืืก ืฆื ืฆืขืืืืื ืืืื ืขืจ ืคืื ืื ืขื ืืืืื ืคืืจื ืฆื ืื ื ืืื ืฆื "ืืขืืขื" ืื ืคึฟืึทืจืืื ืื.
ืึธื ืืึธื, ืืืึทื ืคึผืจืึธืคึผืขืจืืืขืก ืืื ืคึผืจืึทืืืฉืขืงืฉืึทื ื
ืืื ื ืืืจ ืืึทืฉืืึธืกื ืฆื ืฉื ืืึทืื ืึทืจืืืงืืขื ืืืจื ืืึทืืขืก, ืขืก ืืืื ืืื ืขื ืฆื ืืืืื ืื ืขื ืืืืื-ืคึผืจืึธืคึผืขืจืืืขืก ืืืึธืก ืึธืคืขื ืืขื ืืืืฃ ืืื (ืึทืืึทืืฉื ืืขืงืขืก, ืจืฉืืื ืคืื ืจืืกืืคึผืืึทื ืฅ), ืืื ืืืื ืืืจื ืืึทืืข ืคืื โโืึธื ืืึธื.
ืืื ื ืืืื ืขืจ ืคืื ืืื ืืืขืจ ืืืคึผืืฉ ืืึทืกืงืก ืืื ืคึผืื ืงื ืืืืืื ื ืึธื ืืึธื ืจืขืืืฉืืกืืขืจื (ืึทื ืจืขื, ืื ืงืึทืืื ื, ืึทืืข), ืขืก ืืื ืืืื ืืึทืืืฉืืงืึทื ืฆื "ืฆืืขื ืืื ืืื" ืืื ืคึผืึทืจืืืฉืึทื ืื ื ืืืจื ืึธื ืืึธื ืืึทืืขืก.
ืืืจ ืืืืื ืื ืคึผืึทืจืืืฉืึทื ืื ื ืฉืืืกื (ืึธื ืืึธื ืืึทืืข) ืฆื ืึทืืข ืืืฉื: ืจืืกืืคึผืืึทื ืฅ, ืืขืงืข, ืจืขืืืกืืจืื. ืืืจ ืืึธื ื ืื ืืึธืื ืฆื ืืืืื ืขืก ืฆื ืื ืึธื ืืึธื ืืื, ืึธืืขืจ ื ืืฆื ืื ืืืืืกืืื ื DateTime.
ืกืืืืืช
ืืื ื ืขืก ืืื ืืืืื ืืืื ืืขืืข ืคึฟืึทืจ ืขืืืขืืข ืึทืจืืืงืืขื, ืขืก ืืื ืงืืื ืืืขื ืฆื "ืฉื ืืึทืื" ืขืก ืืื ืืขืจ ืืขืืืืงืขืจ ืืึธืืขื; ืืืจ ืืึธืื ืฆื ืคืึทืจืืึธืื ืืืืฃ ืขืคึผืขืก ืึทื ืืขืจืฉ. ืืื ืืื ืืืขืจ ืคืึทื ืขืก ืืื ืืืขืึทื ืืึทืืข ืคืื โโืขืจืฉืืขืจ ืึธื ืืึธื ืืื ืงืึธืจืขืกืคึผืึธื ืืขื ืฅ โ ืืึธืก ืืฒืกื, ืืขืจ ืืึธืืขื ื ืคึฟืื ืฉืึทืคืื ื, ืืื ืืขืจ ืืืชื, ืคึฟืื ืืขืจ ืืขืืข.
ืืืื ืื ืคึผืึทืจืืืฉืึทื ืื ื ืฉืืืกื (ืืขืืข ืืึทืืข) ืฆื ืึทืืข ืืืฉื: ืืขืืข, ืืึทืืืืืืงืืขืจ.
ืืืขืจ ืืืฆื ืืืจ ืืึธืื ืฆืืืื ืคืจืืืืขืืขื ืืื ืึทืืึธื:
- ืืื ืืืึธืก ืึธืคึผืืืืืื ื ืืึธื ืืื ืงืืงื ืคึฟืึทืจ ืึทืจืืืงืืขื ืืืืฃ ืืขืจ ืืขืืข?
- ืืื ืืืขืืืข ืึธืคึผืืืืืื ื ืืึธื ืืื ืืืื ืื ืืขืืข ืคึฟืื ืืขืจ ืึธื ืืึธื?
ืืืจ ืงืขื ืขื, ืคืื ืงืืจืก, ืคืึธืจืืขืฆื ืฆื ืืืื ืืื ืึทืืข ืกืขืงืฉืึทื ื, ืึธืืขืจ ืืึธืก ืืืขื ืืืื ืืืืขืจ ืืจืืืขืจืืง ืืื ืืืขื ืึธืคึผื ืืืื ืึทืืข ืืื ืืืขืจ ืืืื ืื ืื. ืืขืจืืืขืจ, ืืื ืกืืจ ืฆื ืืืืกื ืืื ืคึผืื ืงื ืฆื ืงืืงื, ืืืจ ืืืขืื ืืึทืื ืืึทืืืฉืืงืึทื ืคึฟืึทืจืืื ืืื ืืขื / ืคึผืืื ืืขืจื ืฆื ืกืขืงืฉืึทื ื:
- ืืืจ ืืืขืื ืืืืื ืืื ืื ืึธื ืืึธื ืืขืืข ืืึทืืข ืคืขืื
- ืืึธืืืจ ืฆืืืขืื ืฆื ืืขืจ ืืขืืข ืึธื ืืึธื ืืึทืืข ืฉืืขืื ืืขื ืงืึธืจืขืกืคึผืึธื ืืขื ืฅ (ืงืขื ืืืื ืึท ืืึทืืื ืืขืจ ืืืฉ ืึธืืขืจ ืึท ืงืืื ืคืื ืืึทืืขืก)
ืืื ื ืขืก ืืืขื ืืืื ืืืืื ืืง ืืึธืืืคืืงืึทืืืึธื ืก ืฆื ืืขืจ ืจืฉืืื ืคืื ืึธื ืืึธื ืืึทืืขืก ืคึฟืึทืจ ืืขืืขืจ ืืืื ืงืึธืจืขืกืคึผืึธื ืืขื ืฅ (ื ืึธื ืึทืืข, ืึผืืขื ืึทืืข ืึทืจืืืงืืขื ืคืึทืื ืืืืฃ 1-2 ืฉืืืื ืืฉ ืืขื), ืืื ืืืขื ืคืึธืงืืก ืืืืฃ ืืขื ืึธืคึผืฆืืข.
ืืื ืืึทื ืฅ, ืื ืกืืจืืงืืืจ ืคืื ืืื ืืืขืจ ืืึทืืึทืืืืก ืืขื ืืืขื ืื ืคืืืืขื ืืข ืคืึธืจืขื, ืืขื ืืืขื ืืื ืืฉืืื ืคึผืึทืจืืืฉืึทื ื:
ืืืฉื: RU, ืืืื ืืืจ ืืึธืื ืึท ืขืงื ืฆื ืื ืกืืจืืืืืง ืืืคืืืขื ืืื ืื ื ืขืืขื ืคืื ืืืฉื / ืคืขืืืขืจ, ืขืก ืืื ืืขืกืขืจ ื ืืฉื ืฆื ืงืืงื
-- ัะตะบัะธะธ ะฟะพ ะดะฐัะต ัะพะพะฑัะตะฝะธั
CREATE TABLE "ะกะพะพะฑัะตะฝะธะต_YYYYMMDD"(
"ะกะพะพะฑัะตะฝะธะต"
uuid
PRIMARY KEY
, "ะขะตะผะฐ"
uuid
, "ะะฐัะฐะขะตะผั"
date
, "ะะฒัะพั"
uuid
, "ะะฐัะฐะัะตะผั" -- ะธัะฟะพะปัะทัะตะผ ะบะฐะบ ะดะฐัั
timestamp
, "ะขะตะบัั"
text
);
CREATE TABLE "ะะดัะตัะฐั_YYYYMMDD"(
"ะะฐัะฐะกะพะพะฑัะตะฝะธั"
date
, "ะกะพะพะฑัะตะฝะธะต"
uuid
, "ะะตััะพะฝะฐ"
uuid
, PRIMARY KEY("ะกะพะพะฑัะตะฝะธะต", "ะะตััะพะฝะฐ")
);
CREATE TABLE "ะคะฐะนะป_YYYYMMDD"(
"ะะฐัะฐะกะพะพะฑัะตะฝะธั"
date
, "ะคะฐะนะป"
uuid
PRIMARY KEY
, "ะกะพะพะฑัะตะฝะธะต"
uuid
, "BLOB"
uuid
, "ะะผั"
text
);
CREATE TABLE "ะ ะตะตัััะกะพะพะฑัะตะฝะธะน_YYYYMMDD"(
"ะะฐัะฐะกะพะพะฑัะตะฝะธั"
date
, "ะะปะฐะดะตะปะตั"
uuid
, "ะขะธะฟะ ะตะตัััะฐ"
smallint
, "ะะฐัะฐะัะตะผั"
timestamp
, "ะกะพะพะฑัะตะฝะธะต"
uuid
, PRIMARY KEY("ะะปะฐะดะตะปะตั", "ะขะธะฟะ ะตะตัััะฐ", "ะกะพะพะฑัะตะฝะธะต")
);
CREATE INDEX ON "ะ ะตะตัััะกะพะพะฑัะตะฝะธะน_YYYYMMDD"("ะะปะฐะดะตะปะตั", "ะขะธะฟะ ะตะตัััะฐ", "ะะฐัะฐะัะตะผั" DESC);
-- ัะตะบัะธะธ ะฟะพ ะดะฐัะต ัะตะผั
CREATE TABLE "ะขะตะผะฐ_YYYYMMDD"(
"ะะฐัะฐะขะตะผั"
date
, "ะขะตะผะฐ"
uuid
PRIMARY KEY
, "ะะพะบัะผะตะฝั"
uuid
, "ะะฐะทะฒะฐะฝะธะต"
text
);
CREATE TABLE "ะฃัะฐััะฝะธะบะขะตะผั_YYYYMMDD"(
"ะะฐัะฐะขะตะผั"
date
, "ะขะตะผะฐ"
uuid
, "ะะตััะพะฝะฐ"
uuid
, PRIMARY KEY("ะขะตะผะฐ", "ะะตััะพะฝะฐ")
);
CREATE TABLE "ะะฐััะกะพะพะฑัะตะฝะธะนะขะตะผั_YYYYMMDD"(
"ะะฐัะฐะขะตะผั"
date
, "ะขะตะผะฐ"
uuid
PRIMARY KEY
, "ะะฐัะฐ"
date
);
ืืื ืึท ืฉืืื ืคึผืขื ื
ื ื, ืืืึธืก ืืืื ืืืจ ื ืืฆื ื ืื
ืึทืืื ืืืื ืืืจ ืืขื ื ืึทืืื ืืขื ื ืืืจ ืืืืขืจ ืืึทืืึธืจืื ืืืขืื ืื ืกืืืข ืคืื โโืืึทืื ืกืืึธืจื?, ืืขืืึธืื ืืืจ ืงืขื ืขื ืืึทืงืืืขื ืืึทืคืจืืึทืขื ืคืื ืื "ืขืงืกืืจืข" ืคืขืืืขืจ ืืื ืึทืืจืขืก ืกืคึผืขืฆืืคืืฉ ืืืฉื. ืืืช, ืึทืืข ืกืึทืืขืงืฉืึทื ื ืคืื ืขืืืขืืข ืกืขืงืฉืึทื ื ืืื ืืขื ืคืึทื ืืืขื ืืืื ืืจืึทื ืกืคืขืจื ืฆื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืืึทื.
ืืงืืจ: www.habr.com