เบ›เบฐเป€เบžเบ”เบ—เบตเปˆเบชเบปเบ‡เปƒเบช

เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบชเบปเบ‡เปƒเบชเบเปˆเบฝเบงเบเบฑเบšเบฎเบนเบšเบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบเบฑเบ‡เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเบ—เปˆเบฒเบ™เบ”เบตเปเบฅเบฐเป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ”เบปเบ™เบ™เบฒเบ™. เปเบ•เปˆเบงเปˆเบฒเบžเบฝเบ‡เปเบ•เปˆเบˆเบปเบ™เบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบžเบงเบเบกเบฑเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ insidious เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ, เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบกเบปเบ”เบเปˆเบงเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ„เบฒเบ”เบซเบงเบฑเบ‡. เปเบฅเบฐเบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบžเบงเบเป€เบ‚เบปเบฒเป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบœเบปเบกเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบขเบทเบ™เบขเบนเปˆเบ›เบฒเบ - เบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบงเบเป€เบ‚เบปเบฒเบชเบนเบ™เป€เบชเบเบ‚เปเป‰เบกเบนเบ™เบฅเบฑเบšเบ—เบตเปˆเบ–เบทเบเบกเบญเบšเปƒเบซเป‰. เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ›เบฐเป€เบŠเบตเบ™เบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒ, เบžเบงเบเป€เบ‚เบปเบฒเบญเป‰เบฒเบ‡เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบšเปเปˆเบฎเบนเป‰เบเบฑเบ™เปเบฅเบฐเบเบฑเบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบขเบนเปˆเปƒเบ™เป€เบ‡เบปเบฒเบžเบงเบเป€เบ‚เบปเบฒเป€เบฎเบฑเบ”เบงเบฝเบเบซเบ™เบฑเบเบžเบฒเบเปƒเบ•เป‰เบœเป‰เบฒเบ„เบธเบกเบ”เบฝเบงเบเบฑเบ™. เบกเบฑเบ™เป€เบ–เบดเบ‡เป€เบงเบฅเบฒเปเบฅเป‰เบงเบ—เบตเปˆเบˆเบฐเป€เบญเบปเบฒเบžเบงเบเบกเบฑเบ™เบกเบฒเบฅเป‰เบฒเบ‡เบ™เป‰เปเบฒเบชเบฐเบญเบฒเบ”. เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบ›เบฐเป€เบžเบ”เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ‡เป„เบชเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป€เบŠเบฑเปˆเบ™เบเบฑเบ™.

เบเบฒเบ™เบžเบดเบกเบ‚เปเป‰เบกเบนเบ™เปƒเบ™ PostgreSQL, เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบกเบฑเบ™, เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบเปเปˆเบกเบตเบ„เบงเบฒเบกเปเบ›เบเปƒเบˆเบ—เบตเปˆเปเบ›เบเบ›เบฐเบซเบผเบฒเบ”เบซเบผเบฒเบ. เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเบŠเบตเป‰เปเบˆเบ‡เบšเบฒเบ‡ quirks เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ, เป€เบ‚เบปเป‰เบฒเปƒเบˆเป€เบซเบ”เบœเบปเบ™เบชเปเบฒเบฅเบฑเบšเบžเบถเบ”เบ•เบดเบเปเบฒเบ—เบตเปˆเปเบ›เบเบ›เบฐเบซเบฅเบฒเบ”เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปเบฅเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบšเปเปˆเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบšเบฑเบ™เบซเบฒเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ›เบฐเบˆเปเบฒเบงเบฑเบ™. เป€เบžเบทเปˆเบญเบšเบญเบเบ„เบงเบฒเบกเบˆเบดเบ‡, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบฅเบงเบšเบฅเบงเบกเบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เป€เบ›เบฑเบ™เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบซเบ™เบฑเบ‡เบชเบทเบญเป‰เบฒเบ‡เบญเบตเบ‡เบชเปเบฒเบฅเบฑเบšเบ•เบปเบ™เป€เบญเบ‡, เบซเบ™เบฑเบ‡เบชเบทเบญเป‰เบฒเบ‡เบญเบตเบ‡เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบญเป‰เบฒเบ‡เบญเบตเบ‡เป„เบ”เป‰เบ‡เปˆเบฒเบเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ‚เบฑเบ”เปเบเป‰เบ‡. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบกเบฑเบ™เบˆเบฐเบ–เบทเบเบ•เบทเปˆเบกเบเป‰เบญเบ™เบงเปˆเบฒเบ„เบงเบฒเบกเปเบ›เบเปƒเบˆเปƒเบซเบกเปˆเบˆเบฒเบเบ›เบฐเป€เบžเบ”เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ‡เป„เบชเป„เบ”เป‰เบ–เบทเบเบ„เบปเป‰เบ™เบžเบปเบš. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป„เบ›, เป‚เบญเป‰, เบšเบปเบšเบ•เบดเบ”เบ•เบฒเบกเบฅเบธเบ”เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบšเปเปˆเบญเบดเบ”เป€เบกเบทเปˆเบญเบ!

Dossier เป€เบฅเบเบซเบ™เบถเปˆเบ‡. เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ / เบ„เบงเบฒเบกเปเบกเปˆเบ™เบเปเบฒเบชเบญเบ‡เป€เบ—เบปเปˆเบฒ / เบ•เบปเบงเป€เบฅเบ / เป€เบ‡เบดเบ™

เบกเบฑเบ™เบˆเบฐเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ›เบฐเป€เบžเบ”เบ•เบปเบงเป€เบฅเบเปเบกเปˆเบ™เบšเบฑเบ™เบซเบฒเบซเบ™เป‰เบญเบเบ—เบตเปˆเบชเบธเบ”เบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเปเบ›เบเปƒเบˆเปƒเบ™เบžเบถเบ”เบ•เบดเบเปเบฒ. เปเบ•เปˆเบšเปเปˆเบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”. เบชเบฐเบ™เบฑเป‰เบ™เปƒเบซเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบžเบงเบเบกเบฑเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™โ€ฆ

เบฅเบทเบกเบงเบดเบ—เบตเบเบฒเบ™เบ™เบฑเบš

SELECT 0.1::real = 0.1

?column?
boolean
---------
f

เปเบกเปˆเบ™เบซเบเบฑเบ‡? เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบงเปˆเบฒ PostgreSQL เบ›เปˆเบฝเบ™เบ„เปˆเบฒเบ„เบปเบ‡เบ—เบตเปˆเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบžเบดเบก 0.1 เปƒเบซเป‰เป€เบ›เบฑเบ™เบชเบญเบ‡เป€เบ—เบปเปˆเบฒเบ„เบงเบฒเบกเปเบกเปˆเบ™เบเปเบฒเปเบฅเบฐเบžเบฐเบเบฒเบเบฒเบกเบ›เบฝเบšเบ—เบฝเบšเบเบฑเบš 0.1 เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡. เปเบฅเบฐเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบ„เบงเบฒเบกเบซเบกเบฒเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบกเบปเบ”! เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เบ•เบปเบงเป€เบฅเบเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ 0.1 เบšเปเปˆเบชเบฒเบกเบฒเบ”เบชเบฐเปเบ”เบ‡เป€เบ›เบฑเบ™เป€เบชเบ”เบชเปˆเบงเบ™เบ–เบฒเบ™เบชเบญเบ‡เบ—เบตเปˆเบˆเบณเบเบฑเบ”เป„เบ”เป‰ (เบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™ 0.0(0011) เปƒเบ™เบ–เบฒเบ™เบชเบญเบ‡), เบ•เบปเบงเป€เบฅเบเบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเป€เบฅเบดเบเบšเบดเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบˆเบฐเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบšเปเปˆเป€เบ—เบปเปˆเบฒเบ—เบฝเบกเบเบฑเบ™. เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบง, เบ™เบตเป‰เปเบกเปˆเบ™เบซเบปเบงเบ‚เปเป‰เบชเปเบฒเบฅเบฑเบšเบšเบปเบ”เบ„เบงเบฒเบกเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ; เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบšเปเปˆเบ‚เบฝเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ—เบตเปˆเบ™เบตเป‰.

เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบกเบฒเบˆเบฒเบเปƒเบช?

SELECT double precision(1)

ERROR:  syntax error at or near "("
LINE 1: SELECT double precision(1)
                               ^
********** ะžัˆะธะฑะบะฐ **********
ERROR: syntax error at or near "("
SQL-ัะพัั‚ะพัะฝะธะต: 42601
ะกะธะผะฒะพะป: 24

เบซเบผเบฒเบเบ„เบปเบ™เบฎเบนเป‰เบงเปˆเบฒ PostgreSQL เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เปƒเบŠเป‰ notation เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบชเบฑเบ™เบเบฒเบ™เบ›เบฐเป€เบžเบ”. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆ 1:: int, เปเบ•เปˆเบเบฑเบ‡ int (1), เป€เบŠเบดเปˆเบ‡เบˆเบฐเบ—เบฝเบšเป€เบ—เบปเปˆเบฒ. เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบ›เบฐเป€เบžเบ”เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบซเบผเบฒเบเบ„เปเบฒ! เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบปเปˆเบ‡เบ„เปˆเบฒเบ•เบปเบงเป€เบฅเบเป„เบ›เบซเบฒเบ›เบฐเป€เบžเบ”เบ„เบงเบฒเบกเปเบกเปˆเบ™เบเปเบฒเบชเบญเบ‡เป€เบ—เบปเปˆเบฒเปƒเบ™เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”, เปƒเบŠเป‰เบ™เบฒเบกเปเบเบ‡เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบ™เบตเป‰ float8, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, SELECT float8(1).

เบญเบฑเบ™เปƒเบ”เปƒเบซเบเปˆเบเบงเปˆเบฒเบญเบฑเบ™เป€เบ›เบฑเบ™เบ™เบดเบ”?

SELECT 'Infinity'::double precision < 'NaN'::double precision

?column?
boolean
---------
t

เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”! เบกเบฑเบ™เบ›เบฐเบเบปเบ”เบงเปˆเบฒเบกเบตเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปƒเบซเบเปˆเบเบงเปˆเบฒเบญเบฑเบ™เป€เบ›เบฑเบ™เบ™เบดเบ”, เปเบฅเบฐเบกเบฑเบ™เบ„เบท NaN! เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เป€เบญเบเบฐเบชเบฒเบ™ PostgreSQL เป€เบšเบดเปˆเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ”เป‰เบงเบเบชเบฒเบเบ•เบฒเบ—เบตเปˆเบŠเบทเปˆเบชเบฑเบ”เปเบฅเบฐเบญเป‰เบฒเบ‡เบงเปˆเบฒ NaN เปเบกเปˆเบ™เปเบ™เปˆเบ™เบญเบ™เบซเบผเบฒเบเบเปˆเบงเบฒเบ•เบปเบงเป€เบฅเบเบญเบทเปˆเบ™เป†, เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, infinity. เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบกเบเบฑเบ‡เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡เบชเปเบฒเบฅเบฑเบš -NaN. เบชเบฐเบšเบฒเบเบ”เบต, เบ„เบปเบ™เบฎเบฑเบเบ„เบฐเบ™เบดเบ”เบชเบฒเบ”! เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™เบ‚เบญเบ‡เบ•เบปเบงเป€เบฅเบเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡.

เบ•เบฒเบกเบปเบ™

SELECT round('2.5'::double precision)
     , round('2.5'::numeric)

      round      |  round
double precision | numeric
-----------------+---------
2                | 3

เบญเบตเบเบ„เบณเบ—เบฑเบเบ—เบฒเบเบ—เบตเปˆเบšเปเปˆเบ„เบฒเบ”เบ„เบดเบ”เบˆเบฒเบเบ–เบฒเบ™. เบญเบตเบเป€เบ—เบทเปˆเบญ เปœเบถเปˆเบ‡, เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบ„เบงเบฒเบกเปเบกเปˆเบ™เบเปเบฒเบชเบญเบ‡เป€เบ—เบปเปˆเบฒเปเบฅเบฐเบ›เบฐเป€เบžเบ”เบ•เบปเบงเป€เบฅเบเบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบเบฒเบ™เบฎเบญเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเป€เบฅเบ - เบ•เบปเบงเป€เบฅเบเบ›เบปเบเบเบฐเบ•เบด, เป€เบกเบทเปˆเบญ 0,5 เบ–เบทเบเบกเบปเบ™เบ‚เบถเป‰เบ™, เปเบฅเบฐเบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเปเบกเปˆเบ™เบเปเบฒเบชเบญเบ‡เป€เบ—เบปเปˆเบฒ - 0,5 เปเบกเปˆเบ™เบกเบปเบ™เป„เบ›เบซเบฒเบˆเปเบฒเบ™เบงเบ™เบ—เบตเปˆเปƒเบเป‰เบ—เบตเปˆเบชเบธเบ”.

เป€เบ‡เบดเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบดเป€เบชเบ”

SELECT '10'::money::float8

ERROR:  cannot cast type money to double precision
LINE 1: SELECT '10'::money::float8
                          ^
********** ะžัˆะธะฑะบะฐ **********
ERROR: cannot cast type money to double precision
SQL-ัะพัั‚ะพัะฝะธะต: 42846
ะกะธะผะฒะพะป: 19

เบญเบตเบ‡เบ•เบฒเบก PostgreSQL, เป€เบ‡เบดเบ™เบšเปเปˆเปเบกเปˆเบ™เบ•เบปเบงเป€เบฅเบเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡. เบญเบตเบ‡เบ•เบฒเบกเบšเบฒเบ‡เบšเบธเบเบ„เบปเบ™, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™. เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบˆเบทเปˆเบˆเปเบฒเป„เบงเป‰เบงเปˆเบฒเบเบฒเบ™เบซเบฅเปเปˆเบ›เบฐเป€เบžเบ”เป€เบ‡เบดเบ™เปเบกเปˆเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบžเบฝเบ‡เปเบ•เปˆเบ›เบฐเป€เบžเบ”เบ•เบปเบงเป€เบฅเบ, เบžเบฝเบ‡เปเบ•เปˆเป€เบ›เบฑเบ™เบ›เบฐเป€เบžเบ”เบ•เบปเบงเป€เบฅเบเบชเบฒเบกเบฒเบ”เป‚เบเบ™เบเบฑเบšเบ›เบฐเป€เบžเบ”เป€เบ‡เบดเบ™. เปเบ•เปˆเบ•เบญเบ™เบ™เบตเป‰เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบซเบผเบดเป‰เบ™เบเบฑเบšเบกเบฑเบ™เป„เบ”เป‰เบ•เบฒเบกเบ—เบตเปˆเปƒเบˆเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™. เปเบ•เปˆเบกเบฑเบ™เบˆเบฐเบšเปเปˆเป€เบ›เบฑเบ™เป€เบ‡เบดเบ™เบ”เบฝเบงเบเบฑเบ™.

เบเบฒเบ™เบœเบฐเบฅเบดเบ”เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเปเบฅเบฐเบฅเปเบฒเบ”เบฑเบš

SELECT *
  FROM generate_series(1::smallint, 5::smallint, 1::smallint)

ERROR:  function generate_series(smallint, smallint, smallint) is not unique
LINE 2:   FROM generate_series(1::smallint, 5::smallint, 1::smallint...
               ^
HINT:  Could not choose a best candidate function. You might need to add explicit type casts.
********** ะžัˆะธะฑะบะฐ **********
ERROR: function generate_series(smallint, smallint, smallint) is not unique
SQL-ัะพัั‚ะพัะฝะธะต: 42725
ะŸะพะดัะบะฐะทะบะฐ: Could not choose a best candidate function. You might need to add explicit type casts.
ะกะธะผะฒะพะป: 18

PostgreSQL เบšเปเปˆเบกเบฑเบเบ—เบตเปˆเบˆเบฐเป€เบชเบเป€เบงเบฅเบฒเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เป€เบฅเบฑเบเป†เบ™เป‰เบญเบเป†. เบฅเบณเบ”เบฑเบšเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบญเบตเบ‡เปƒเบชเปˆเบญเบฑเบ™เปƒเบ”เปเบ”เปˆ? int, เบšเปเปˆเบซเบ™เป‰เบญเบ! เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเบžเบฐเบเบฒเบเบฒเบกเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบžเบฐเบเบฒเบเบฒเบกเป‚เบเบ™ smallint เป„เบ›เบซเบฒเบšเบฒเบ‡เบ›เบฐเป€เบžเบ” integer เบญเบทเปˆเบ™เป†, เปเบฅเบฐเป€เบซเบฑเบ™เบงเปˆเบฒเบญเบฒเบ”เบˆเบฐเบกเบตเบเบฒเบ™เป‚เบเบ™เบซเบผเบฒเบ. เบˆเบฐเป€เบฅเบทเบญเบเบ•เบปเบงเบฅเบฐเบ„เบญเบ™เปƒเบ”? เบ™เบฒเบ‡เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบญเบฑเบ™เบ™เบตเป‰, เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบˆเบดเปˆเบ‡เป€เบเบตเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”.

เป„เบŸเบฅโ€‹เปŒโ€‹เบ—เบตเปˆโ€‹เบชเบญเบ‡โ€‹. "char"/char/varchar/เบ‚เปเป‰เบ„เบงเบฒเบก

เบ„เบงเบฒเบกเปเบ›เบเบ›เบฐเบซเบฅเบฒเบ”เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เบเบฑเบ‡เบกเบตเบขเบนเปˆเปƒเบ™เบ›เบฐเป€เบžเบ”เบ•เบปเบงเบญเบฑเบเบชเบญเบ™. เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบˆเบฑเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบ„เบทเบเบฑเบ™.

เบ›เบฐเป€เบžเบ”เปƒเบ”เปเบ”เปˆเบ‚เบญเบ‡ tricks เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™?

SELECT 'ะŸะ•ะขะฏ'::"char"
     , 'ะŸะ•ะขะฏ'::"char"::bytea
     , 'ะŸะ•ะขะฏ'::char
     , 'ะŸะ•ะขะฏ'::char::bytea

 char  | bytea |    bpchar    | bytea
"char" | bytea | character(1) | bytea
-------+-------+--------------+--------
 โ•จ     | xd0  | ะŸ            | xd09f

"char" เบ›เบฐเป€เบžเบ”เปƒเบ”เปเบ”เปˆ, เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบฅเบฐเบ„เบญเบ™เบ›เบฐเป€เบžเบ”เปƒเบ”? เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบšเปเปˆโ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบชเบดเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™ ... เป€เบžเบฒเบฐโ€‹เบงเปˆเบฒโ€‹เบกเบฑเบ™โ€‹เบ—เปเบฒโ€‹เบ—เปˆเบฒโ€‹เบงเปˆเบฒโ€‹เบˆเบฐโ€‹เป€เบ›เบฑเบ™ char เบ—เปเบฒเบกเบฐเบ”เบฒ, เป€เบ–เบดเบ‡โ€‹เปเบกเปˆเบ™โ€‹เบงเปˆเบฒโ€‹เบกเบฑเบ™โ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบ„เปเบฒโ€‹เป€เบงเบปเป‰เบฒโ€‹. เปเบฅเบฐเบกเบฑเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบ char เบ›เบปเบเบเบฐเบ•เบด, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเบกเบตเบงเบปเบ‡เบขเบทเบก, เปƒเบ™เบ—เบตเปˆเบกเบฑเบ™เบญเบญเบเบžเบฝเบ‡เปเบ•เปˆ byte เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบเบฒเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบชเบฐเบ•เบฃเบดเบ‡, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ char เบ›เบปเบเบเบฐเบ•เบดเบญเบญเบเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ—เปเบฒเบญเบดเบ”. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบ•เบปเบงเบญเบฑเบเบชเบญเบ™ P, เป€เบŠเบดเปˆเบ‡เปƒเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡ unicode เปƒเบŠเป‰เป€เบงเบฅเบฒเป€เบ–เบดเบ‡ 2 bytes, เป€เบ›เบฑเบ™เบซเบผเบฑเบเบ–เบฒเบ™เป‚เบ”เบเบเบฒเบ™เบ›เปˆเบฝเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเป€เบ›เบฑเบ™เบ›เบฐเป€เบžเบ” bytea. เปเบฅเบฐเบ›เบฐเป€เบžเบ” "char" เปƒเบŠเป‰เบžเบฝเบ‡เปเบ•เปˆ byte เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเบฐเปเบ”เบ‡ unicode เบ™เบตเป‰. เปเบฅเป‰เบงเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ›เบฐเป€เบžเบ”เบ™เบตเป‰เบˆเบถเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™? เป€เบญเบเบฐเบชเบฒเบ™ PostgreSQL เบเปˆเบฒเบงเบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบ›เบฐเป€เบžเบ”เบžเบดเป€เบชเบ”เบ—เบตเปˆเปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบžเบดเป€เบชเบ”. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบ„เบปเบ‡เบˆเบฐเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™. เปเบ•เปˆเป€เบšเบดเปˆเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ•เบฒเบ‚เบญเบ‡เบฅเบฒเบงเปเบฅเบฐเบ—เปˆเบฒเบ™เบˆเบฐเบšเปเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆเบœเบดเบ”เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบžเบปเบšเบเบฑเบšเบฅเบฒเบงเบ”เป‰เบงเบเบžเบถเบ”เบ•เบดเบเปเบฒเบžเบดเป€เบชเบ”เบ‚เบญเบ‡เบฅเบฒเบง.

เบžเบทเป‰เบ™เบ—เบตเปˆเบžเบดเป€เบชเบ”. เบญเบญเบเบˆเบฒเบเบชเบฒเบเบ•เบฒ, เบญเบญเบเบˆเบฒเบเปƒเบˆ

SELECT 'abc   '::char(6)::bytea
     , 'abc   '::char(6)::varchar(6)::bytea
     , 'abc   '::varchar(6)::bytea

     bytea     |   bytea  |     bytea
     bytea     |   bytea  |     bytea
---------------+----------+----------------
x616263202020 | x616263 | x616263202020

เบฅเบญเบ‡เป€เบšเบดเปˆเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเปƒเบซเป‰เบกเบฒ. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเปเบกเปˆเบ™เบเบฒเบ™เบ›เปˆเบฝเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบ›เบฑเบ™เบ›เบฐเป€เบžเบ” bytea, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบกเบฑเบ™เป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบกเบตเบซเบเบฑเบ‡เปเบ”เปˆ. เบšเปˆเบญเบ™โ€‹เบ—เบตเปˆโ€‹เบ•เบดเบ”โ€‹เบ•เบฒเบกโ€‹เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เบซเบฅเปเปˆโ€‹เบเบฑเบš varchar (6โ€‹) เบขเบนเปˆโ€‹เปƒเบชโ€‹? เป€เบญเบเบฐเบชเบฒเบ™เบฅเบฐเบšเบธเป„เบงเป‰เบขเปˆเบฒเบ‡เบซเบเปเป‰เป†เบงเปˆเบฒ: "เป€เบกเบทเปˆเบญเบชเบปเปˆเบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบงเบฅเบฐเบ„เบญเบ™เป„เบ›เบซเบฒเบ›เบฐเป€เบžเบ”เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบญเบทเปˆเบ™, เบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡เบ—เบฒเบ‡เบซเบผเบฑเบ‡เบˆเบฐเบ–เบทเบเบเบปเบเป€เบฅเบตเบ." เบ„เบงเบฒเบกเบšเปเปˆเบกเบฑเบเบ™เบตเป‰เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบˆเบปเบ”เบˆเปเบฒ. เปเบฅเบฐเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบ–เป‰เบฒเบ„เปˆเบฒเบ„เบปเบ‡เบ—เบตเปˆเบชเบฐเบ•เบฃเบดเบ‡เบ—เบตเปˆเบญเป‰เบฒเบ‡เบญเบตเบ‡เบ–เบทเบเป‚เบเบ™เป‚เบ”เบเบเบปเบ‡เปƒเบชเปˆเบ›เบฐเป€เบžเบ” varchar(6), เบŠเปˆเบญเบ‡เบ•เปเปˆเบ—เป‰เบฒเบเบˆเบฐเบ–เบทเบเบฎเบฑเบเบชเบฒเป„เบงเป‰. เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบกเบฐเบซเบฑเบ”เบชเบฐเบˆเบฑเบ™.

เป„เบŸเบฅโ€‹เปŒโ€‹เบ—เบตเปˆโ€‹เบชเบฒเบกโ€‹. json/jsonb

JSON เปเบกเปˆเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบ—เบตเปˆเบ”เปเบฒเบฅเบปเบ‡เบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบกเบฑเบ™เปเบฅเบฐเบ‚เบญเบ‡ PostgreSQL เปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ. เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡.

Johnson เปเบฅเบฐ Johnson. เบฎเบนเป‰เบชเบถเบเบงเปˆเบฒเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡

SELECT 'null'::jsonb IS NULL

?column?
boolean
---------
f

เบชเบดเปˆเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ JSON เบกเบต entity null เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบ‚เบญเบ‡ NULL เปƒเบ™ PostgreSQL. เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบงเบฑเบ”เบ–เบธ JSON เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เบญเบฒเบ”เบˆเบฐเบกเบตเบกเบนเบ™เบ„เปˆเบฒ NULL, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ SELECT null::jsonb IS NULL (เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบšเปเปˆเบกเบตเบงเบปเบ‡เบขเบทเบกเบ”เบฝเบง) เบˆเบฐเบเบฑเบšเบ„เบทเบ™เบกเบฒเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡เปƒเบ™เป€เบงเบฅเบฒเบ™เบตเป‰.

เบˆเบปเบ”เบซเบกเบฒเบเบชเบฐเบšเบฑเบšเบซเบ™เบถเปˆเบ‡เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡

SELECT '{"1": [1, 2, 3], "2": [4, 5, 6], "1": [7, 8, 9]}'::json

                     json
                     json
------------------------------------------------
{"1": [1, 2, 3], "2": [4, 5, 6], "1": [7, 8, 9]}

---

SELECT '{"1": [1, 2, 3], "2": [4, 5, 6], "1": [7, 8, 9]}'::jsonb

             jsonb
             jsonb
--------------------------------
{"1": [7, 8, 9], "2": [4, 5, 6]}

เบชเบดเปˆเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ json เปเบฅเบฐ jsonb เปเบกเปˆเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบกเบปเบ”. เปƒเบ™ json, เบงเบฑเบ”เบ–เบธเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เป€เบ›เบฑเบ™, เปเบฅเบฐเปƒเบ™ jsonb เบกเบฑเบ™เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปเบฅเป‰เบงเปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ”เบฑเบ”เบชเบฐเบ™เบต, parsed. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบงเปˆเบฒเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเบชเบญเบ‡, เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธเป‚เบ”เบเบเบธเบ™เปเบˆ 1 เบ–เบทเบเปเบ—เบ™เบ—เบตเปˆเบˆเบฒเบ [1, 2, 3] เป€เบ–เบดเบ‡ [7, 8, 9], เป€เบŠเบดเปˆเบ‡เป€เบ‚เบปเป‰เบฒเบกเบฒเปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ”เป‰เบงเบเบเบธเบ™เปเบˆเบ”เบฝเบงเบเบฑเบ™.

เบขเปˆเบฒเบ”เบทเปˆเบกเบ™เป‰เปเบฒเบˆเบฒเบเปƒเบšเบซเบ™เป‰เบฒเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ

SELECT '{"reading": 1.230e-5}'::jsonb
     , '{"reading": 1.230e-5}'::json

          jsonb         |         json
          jsonb         |         json
------------------------+----------------------
{"reading": 0.00001230} | {"reading": 1.230e-5}

PostgreSQL เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” JSONB เบ‚เบญเบ‡เบกเบฑเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบ•เบปเบงเป€เบฅเบเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡, เป€เบฎเบฑเบ”เปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฎเบนเบšเปเบšเบšเบ„เบฅเบฒเบชเบชเบดเบ. เบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบ›เบฐเป€เบžเบ” JSON. เป€เบฅเบฑเบเบ™เป‰เบญเบเปเบ›เบ, เปเบ•เปˆเบฅเบฒเบงเป€เบงเบปเป‰เบฒเบ–เบทเบ.

เป€เบญเบเบฐเบชเบฒเบ™เป€เบฅเบเบชเบตเปˆ. เบงเบฑเบ™เบ—เบต/เป€เบงเบฅเบฒ/เป€เบงเบฅเบฒ

เบเบฑเบ‡เบกเบตเบšเบฒเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเปเบ›เบเบ›เบฐเบซเบผเบฒเบ”เบเบฑเบšเบ›เบฐเป€เบžเบ”เบงเบฑเบ™เบ—เบต/เป€เบงเบฅเบฒ. เบ‚เปเปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบžเบงเบเป€เบ‚เบปเบฒ. เปƒเบซเป‰เบ‚เป‰เบญเบเบˆเบญเบ‡เบ—เบฑเบ™เบ—เบตเบงเปˆเบฒเบšเบฒเบ‡เบฅเบฑเบเบชเบฐเบ™เบฐเบžเบถเบ”เบ•เบดเบเปเบฒเบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเบ”เบตเบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเป€เบ‚เบ”เป€เบงเบฅเบฒ. เปเบ•เปˆเบ™เบตเป‰เบเบฑเบ‡เป€เบ›เบฑเบ™เบซเบปเบงเบ‚เปเป‰เบชเปเบฒเบฅเบฑเบšเบšเบปเบ”เบ„เบงเบฒเบกเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ.

เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบšเปเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆ

SELECT '08-Jan-99'::date

ERROR:  date/time field value out of range: "08-Jan-99"
LINE 1: SELECT '08-Jan-99'::date
               ^
HINT:  Perhaps you need a different "datestyle" setting.
********** ะžัˆะธะฑะบะฐ **********
ERROR: date/time field value out of range: "08-Jan-99"
SQL-ัะพัั‚ะพัะฝะธะต: 22008
ะŸะพะดัะบะฐะทะบะฐ: Perhaps you need a different "datestyle" setting.
ะกะธะผะฒะพะป: 8

เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเปƒเบˆเป„เบ”เป‰เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰? เปเบ•เปˆเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบเบฑเบ‡เบšเปเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบงเบฒเบ‡เป„เบงเป‰เป€เบ›เบฑเบ™เบญเบฑเบ™เบ”เบฑเบšเบ—เปเบฒเบญเบดเบ”เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰ - เบ›เบตเบซเบผเบทเบกเบทเป‰? เปเบฅเบฐเบ™เบฒเบ‡เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเบกเบฑเบ™เปเบกเปˆเบ™เป€เบ”เบทเบญเบ™เบกเบฑเบ‡เบเบญเบ™ 99, 2008, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบˆเบดเบ”เปƒเบˆเบ‚เบญเบ‡เบ™เบฒเบ‡เป€เบˆเบฑเบšเบ›เบงเบ”. เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบง, เป€เบกเบทเปˆเบญเบชเบปเปˆเบ‡เบงเบฑเบ™เบ—เบตเปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เปเป‰เบ„เบงเบฒเบก, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเบงเบ”เป€เบšเบดเปˆเบ‡เบขเปˆเบฒเบ‡เบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡เบงเปˆเบฒเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบฎเบฑเบšเบฎเบนเป‰เบžเบงเบเบกเบฑเบ™เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡ (เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบงเบดเป€เบ„เบฒเบฐเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต datestyle เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡ SHOW datestyle), เป€เบžเบฒเบฐเบงเปˆเบฒเบ„เบงเบฒเบกเบšเปเปˆเปเบ™เปˆเบ™เบญเบ™เปƒเบ™เป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบกเบตเบฅเบฒเบ„เบฒเปเบžเบ‡เบซเบผเบฒเบ.

เป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบชเบดเปˆเบ‡เบ™เบตเป‰เบกเบฒเบˆเบฒเบเปƒเบช?

SELECT '04:05 Europe/Moscow'::time

ERROR:  invalid input syntax for type time: "04:05 Europe/Moscow"
LINE 1: SELECT '04:05 Europe/Moscow'::time
               ^
********** ะžัˆะธะฑะบะฐ **********
ERROR: invalid input syntax for type time: "04:05 Europe/Moscow"
SQL-ัะพัั‚ะพัะฝะธะต: 22007
ะกะธะผะฒะพะป: 8

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเปƒเบˆเป€เบงเบฅเบฒเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™? เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเป€เบ‚เบ”เป€เบงเบฅเบฒเบšเปเปˆเบกเบตเบ•เบปเบงเบซเบเปเป‰, เปเบ•เปˆเบŠเบทเปˆเป€เบ•เบฑเบก, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบเบžเบฝเบ‡เปเบ•เปˆเบขเบนเปˆเปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™เบ‚เบญเบ‡เบงเบฑเบ™เบ—เบต, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เป€เบ‚เบ”เป€เบงเบฅเบฒ, เปเบฅเบฐเบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเป‚เบ”เบเบšเปเปˆเบกเบตเบงเบฑเบ™เบ—เบต. เปเบฅเบฐเบ„เปเบฒเป€เบงเบปเป‰เบฒเบ‚เบญเบ‡เป€เบชเบฑเป‰เบ™เป€เบงเบฅเบฒเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เปเบฒเบ–เบฒเบก - เบœเบนเป‰เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเปเบ™เบงเปƒเบ”? เป€เบžเบฒเบฐเบชเบฐเบ™เบฑเป‰เบ™, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบกเบตเป€เบซเบ”เบœเบปเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบšเบดเปˆเบ‡เบกเบฑเบ™.

เบฅเบฒเบงเปเบกเปˆเบ™เบซเบเบฑเบ‡?

เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™. เบ—เปˆเบฒเบ™เบกเบตเบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเบขเบนเปˆเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบ—เบตเปˆเบกเบตเบ›เบฐเป€เบžเบ” timestamptz. เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ”เบฑเบ”เบชเบฐเบ™เบตเบกเบฑเบ™. เปเบ•เปˆเบ—เปˆเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบเบฒเบ™เบชเป‰เบฒเบ‡เบ”เบฑเบ”เบชเบฐเบ™เบตเปƒเบ™เบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเบ™เบตเป‰เปเบกเปˆเบ™เบšเปเปˆเบชเบปเบกเป€เบซเบ”เบชเบปเบกเบœเบปเบ™เบชเบฐเป€เบซเบกเบตเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เป€เบฅเบทเบญเบเป€เบญเบปเบฒเบชเบนเบ‡เบ‚เบญเบ‡เบกเบฑเบ™ (เป€เบเบทเบญเบšเบ—เบธเบเบ„เปˆเบฒเบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบ™เบตเป‰เบˆเบฐเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบ). เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ—เบตเปˆเบˆเบฐเบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เป€เบฅเบทเบญเบเบ”เบฑเบ”เบŠเบฐเบ™เบตเป‚เบ”เบเบเบฒเบ™เป‚เบเบ™เบ›เบฐเป€เบžเบ”เป„เบ›เบซเบฒเบงเบฑเบ™เบ—เบต. เปเบฅเบฐเบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเปเบ›เบเปƒเบˆ:

CREATE INDEX "iIdent-DateLastUpdate"
  ON public."Ident" USING btree
  (("DTLastUpdate"::date));

ERROR:  functions in index expression must be marked IMMUTABLE
********** ะžัˆะธะฑะบะฐ **********
ERROR: functions in index expression must be marked IMMUTABLE
SQL-ัะพัั‚ะพัะฝะธะต: 42P17

เปเบกเปˆเบ™เบซเบเบฑเบ‡? เบ„เบงเบฒเบกเบˆเบดเบ‡เปเบฅเป‰เบงเปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เป‚เบเบ™เบ›เบฐเป€เบžเบ” timestamptz เป€เบ›เบฑเบ™เบ›เบฐเป€เบžเบ”เบงเบฑเบ™เบ—เบต, เบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบฅเบฐเบšเบปเบš TimeZone เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบซเบ™เป‰เบฒเบ—เบตเปˆเบเบฒเบ™เปเบ›เบ‡เบ›เบฐเป€เบžเบ”เบ‚เบถเป‰เบ™เบเบฑเบšเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบตเปˆเบเปเบฒเบซเบ™เบปเบ”เป€เบญเบ‡, i.e. เบœเบฑเบ™เบœเบงเบ™. เบซเบ™เป‰เบฒเบ—เบตเปˆเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบšเปเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบขเบนเปˆเปƒเบ™เบ”เบฑเบ”เบŠเบฐเบ™เบต. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบฅเบฐเบšเบธเบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเป€เบ‚เบ”เป€เบงเบฅเบฒเปƒเบ”เบ—เบตเปˆเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฒเบ™เป‚เบเบ™เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”.

เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบขเบนเปˆเปƒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”

เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เปƒเบ™โ€‹เบ›เบฑเบ”โ€‹เบˆเบธโ€‹เบšเบฑเบ™ () เบเบฑเบšโ€‹เบ„เบทเบ™โ€‹เบงเบฑเบ™โ€‹เบ—เบต / เป€เบงโ€‹เบฅเบฒโ€‹เบ›เบฐโ€‹เบˆเบธโ€‹เบšเบฑเบ™โ€‹, เป‚เบ”เบโ€‹เบ„เปเบฒโ€‹เบ™เบถเบ‡โ€‹เป€เบ–เบดเบ‡โ€‹เป€เบ‚เบ”โ€‹เบ—เบตเปˆโ€‹เปƒเบŠเป‰โ€‹เป€เบงโ€‹เบฅเบฒโ€‹. เปเบ•เปˆเป€เบšเบดเปˆเบ‡เบ„เปเบฒเบ–เบฒเบกเบ•เปเปˆเป„เบ›เบ™เบตเป‰:

START TRANSACTION;
SELECT now();

            now
  timestamp with time zone
-----------------------------
2019-11-26 13:13:04.271419+03

...

SELECT now();

            now
  timestamp with time zone
-----------------------------
2019-11-26 13:13:04.271419+03

...

SELECT now();

            now
  timestamp with time zone
-----------------------------
2019-11-26 13:13:04.271419+03

COMMIT;

เบงเบฑเบ™เบ—เบต/เป€เบงเบฅเบฒเบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™เบ„เบทเบเบฑเบ™ เบšเปเปˆเบงเปˆเบฒเป€เบงเบฅเบฒเบœเปˆเบฒเบ™เป„เบ›เป€เบ—เบปเปˆเบฒเปƒเบ”เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ! เปเบกเปˆเบ™เบซเบเบฑเบ‡? เบ„เบงเบฒเบกเบˆเบดเบ‡เปเบฅเป‰เบงเปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™ () เบšเปเปˆเปเบกเปˆเบ™เป€เบงเบฅเบฒเบ›เบฐเบˆเบธเบšเบฑเบ™, เปเบ•เปˆเป€เบงเบฅเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบ—เบธเบฅเบฐเบเปเบฒเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบกเบฑเบ™เบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เบžเบฒเบเปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒ. เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเปƒเบ”เป†เบ—เบตเปˆเป€เบ›เบตเบ”เบ•เบปเบงเบขเบนเปˆเบ™เบญเบเบ‚เบญเบšเป€เบ‚เบ”เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเปเบกเปˆเบ™เบ–เบทเบเบซเปเปˆเบขเบนเปˆเปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบขเปˆเบฒเบ‡เบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™, เบŠเบถเปˆเบ‡เป€เบ›เบฑเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบงเปˆเบฒเป€เบงเบฅเบฒเบเบฑเบšเบ„เบทเบ™เบกเบฒเป‚เบ”เบ SELECT เบ‡เปˆเบฒเบเป†เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™(); เปƒเบ™โ€‹เบ„เบงเบฒเบกโ€‹เป€เบ›เบฑเบ™โ€‹เบˆเบดเบ‡, เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบ›เบฑเบ”โ€‹เบˆเบธโ€‹เบšเบฑเบ™ ... เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เปƒเบŠเป‰โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ›เบฐโ€‹เบˆเบธโ€‹เบšเบฑเบ™โ€‹เบ—เบตเปˆโ€‹เบŠเบทเปˆโ€‹เบชเบฑเบ”โ€‹, เบ—เปˆเบฒเบ™โ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เป„เบ”เป‰โ€‹เปƒเบŠเป‰โ€‹เบŸเบฑเบ‡โ€‹เบŠเบฑเบ™ clock_timestamp()โ€‹.

เป„เบŸเบฅโ€‹เปŒโ€‹เบ—เบตเปˆโ€‹เบซเป‰เบฒโ€‹. เบ™เป‰เบญเบ

เปเบ›เบเป€เบฅเบฑเบเบ™เป‰เบญเบ

SELECT '111'::bit(4)

 bit
bit(4)
------
1110

เบ”เป‰เบฒเบ™เปƒเบ”เบ„เบงเบ™เป€เบžเบตเปˆเบก bits เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ›เบฐเป€เบžเบ”? เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบขเบนเปˆเป€เบšเบทเป‰เบญเบ‡เบŠเป‰เบฒเบ. เปเบ•เปˆเบงเปˆเบฒเบžเบฝเบ‡เปเบ•เปˆเบžเบทเป‰เบ™เบ–เบฒเบ™เบกเบตเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰. เบฅเบฐเบงเบฑเบ‡: เบ–เป‰เบฒเบ•เบปเบงเป€เบฅเบเบšเปเปˆเบเบปเบ‡เบเบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบชเบปเปˆเบ‡เบชเบฑเบ™เบเบฒเบ™เบ›เบฐเป€เบžเบ”เปƒเบ”เบ™เบถเปˆเบ‡, เป€เบˆเบปเป‰เบฒเบˆเบฐเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™. เบ™เบตเป‰เปƒเบŠเป‰เป„เบ”เป‰เบเบฑเบšเบ—เบฑเบ‡เบเบฒเบ™เป€เบžเบตเปˆเบกเบšเบดเบ”เปƒเบชเปˆเบ‚เบงเบฒ เปเบฅเบฐเบเบฒเบ™เบ•เบฑเบ”เบšเบดเบ”. เบเบฑเบ‡เบขเบนเปˆเป€เบšเบทเป‰เบญเบ‡เบ‚เบงเบฒ...

เป€เบญเบเบฐเบชเบฒเบ™เป€เบฅเบเบซเบปเบ. เบญเบฒเป€เบฃ

เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ NULL เบšเปเปˆเป„เบ”เป‰เบเบดเบ‡

SELECT ARRAY[1, 2] || NULL

?column?
integer[]
---------
{1,2}

เปƒเบ™เบ–เบฒเบ™เบฐเป€เบ›เบฑเบ™เบ„เบปเบ™เบ›เบปเบเบเบฐเบ•เบดเบ—เบตเปˆเบเบปเบเบ‚เบถเป‰เบ™เบกเบฒเปƒเบ™ SQL, เบžเบงเบเป€เบฎเบปเบฒเบ„เบฒเบ”เบซเบงเบฑเบ‡เบงเปˆเบฒเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ™เบตเป‰เปเบกเปˆเบ™ NULL. เปเบ•เปˆเบกเบฑเบ™เบšเปเปˆเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. array เบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡? เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เบžเบทเป‰เบ™เบ–เบฒเบ™เป‚เบเบ™ NULL เป„เบ›เบซเบฒ array integer เปเบฅเบฐเป€เบญเบตเป‰เบ™เบŸเบฑเบ‡เบŠเบฑเบ™ array_cat เป‚เบ”เบ implicitly. เปเบ•เปˆเบกเบฑเบ™เบเบฑเบ‡เบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡ "array cat" เบ™เบตเป‰เบšเปเปˆเบ•เบฑเป‰เบ‡ array. เบžเบถเบ”เบ•เบดเบเปเบฒเบ™เบตเป‰เบเบฑเบ‡เบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบˆเบทเปˆเบˆเปเบฒ.

เบชเบฐเบซเบผเบธเบš. เบกเบตเบซเบผเบฒเบเบชเบดเปˆเบ‡เบ—เบตเปˆเปเบ›เบเบ›เบฐเบซเบผเบฒเบ”. เบชเปˆเบงเบ™เปƒเบซเบเปˆเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ, เปเบ™เปˆเบ™เบญเบ™, เปเบกเปˆเบ™เบšเปเปˆเบชเปเบฒเบ„เบฑเบ™เบซเบผเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบžเบถเบ”เบ•เบดเบเปเบฒเบ—เบตเปˆเบšเปเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบ—เบตเปˆเบˆเบฐเปเบˆเป‰เบ‡. เปเบฅเบฐเบญเบทเปˆเบ™ เป† เป„เบ”เป‰เบ–เบทเบเบญเบฐเบ—เบดเบšเบฒเบเป‚เบ”เบเบ„เบงเบฒเบกเบ‡เปˆเบฒเบเบ”เบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบซเบผเบทเบ„เบงเบฒเบกเบ–เบตเปˆเบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปƒเบ™เบšเบฒเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™. เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบกเบตเบ„เบงเบฒเบกเปเบ›เบเปƒเบˆเบซเบผเบฒเบ. เป€เบžเบฒเบฐเบชเบฐเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบžเบงเบเบกเบฑเบ™. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบžเบปเบšเบชเบดเปˆเบ‡เบญเบทเปˆเบ™เบ—เบตเปˆเปเบ›เบเบ›เบฐเบซเบผเบฒเบ”เบซเบผเบทเบœเบดเบ”เบ›เบปเบเบเบฐเบ•เบดเปƒเบ™เบžเบถเบ”เบ•เบดเบเปเบฒเบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบ‚เบฝเบ™เปƒเบ™เบ„เปเบฒเป€เบซเบฑเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเบดเบ™เบ”เบตเบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเป€เบญเบเบฐเบชเบฒเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™เบžเบงเบเบกเบฑเบ™.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™