рд╕рдВрд╢рдпрд╛рд╕реНрдкрдж рдкреНрд░рдХрд╛рд░

рддреНрдпрд╛рдВрдЪреНрдпрд╛ рджрд┐рд╕рдгреНрдпрд╛рдмрджреНрджрд▓ рд╕рдВрд╢рдпрд╛рд╕реНрдкрдж рдХрд╛рд╣реАрд╣реА рдирд╛рд╣реА. рд╢рд┐рд╡рд╛рдп, рддреЗ рдЖрдкрд▓реНрдпрд╛рд╕рд╛рдареА рдЪрд╛рдВрдЧрд▓реЗ рдЖрдгрд┐ рдмрд░реНрдпрд╛рдЪ рдХрд╛рд│рд╛рдкрд╛рд╕реВрди рдкрд░рд┐рдЪрд┐рдд рд╡рд╛рдЯрддрд╛рдд. рдкрдг рддреБрдореНрд╣реА рддреЗ рддрдкрд╛рд╕реЗрдкрд░реНрдпрдВрддрдЪ. рдЗрдереЗрдЪ рддреЗ рддреНрдпрд╛рдВрдЪрд╛ рдХрдкрдЯреА рд╕реНрд╡рднрд╛рд╡ рджрд╛рдЦрд╡рддрд╛рдд, рддреБрдордЪреНрдпрд╛ рдЕрдкреЗрдХреНрд╖реЗрдкреЗрдХреНрд╖рд╛ рдкреВрд░реНрдгрдкрдгреЗ рд╡реЗрдЧрд│реНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдХрд╛рдо рдХрд░рддрд╛рдд. рдЖрдгрд┐ рдХрдзреАрдХрдзреА рддреЗ рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рдХрд░рддрд╛рдд рдЬреНрдпрд╛рдореБрд│реЗ рддреБрдордЪреЗ рдХреЗрд╕ рд╢реЗрд╡рдЯрдкрд░реНрдпрдВрдд рдЙрднреЗ рд░рд╛рд╣рддрд╛рдд - рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреЗ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдХрдбреЗ рд╕реЛрдкрд╡рд▓реЗрд▓рд╛ рдЧреБрдкреНрдд рдбреЗрдЯрд╛ рдЧрдорд╛рд╡рддрд╛рдд. рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрдг рддреНрдпрд╛рдВрдЪрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рддреЗрд╡реНрд╣рд╛ рддреЗ рджрд╛рд╡рд╛ рдХрд░рддрд╛рдд рдХреА рддреЗ рдПрдХрдореЗрдХрд╛рдВрдирд╛ рдУрд│рдЦрдд рдирд╛рд╣реАрдд, рдЬрд░реА рд╕рд╛рд╡рд▓реАрдд рддреЗ рдПрдХрд╛рдЪ рд╣реБрдбрдЦрд╛рд▓реА рдХрдареЛрд░ рдкрд░рд┐рд╢реНрд░рдо рдХрд░рддрд╛рдд. рд╢реЗрд╡рдЯреА рддреНрдпрд╛рдВрдирд╛ рд╕реНрд╡рдЪреНрдЫ рдкрд╛рдгреНрдпрд╛рдд рдЖрдгрдгреНрдпрд╛рдЪреА рд╡реЗрд│ рдЖрд▓реА рдЖрд╣реЗ. рдпрд╛ рд╕рдВрд╢рдпрд╛рд╕реНрдкрдж рдкреНрд░рдХрд╛рд░рд╛рдВрд╡рд░рд╣реА рдХрд╛рд░рд╡рд╛рдИ рдХрд░реВ.

PostgreSQL рдордзреАрд▓ рдбреЗрдЯрд╛ рдЯрд╛рдпрдкрд┐рдВрдЧ, рддреНрдпрд╛рдЪреНрдпрд╛ рд╕рд░реНрд╡ рддрд░реНрдХрд╛рдВрд╕рд╛рдареА, рдХрдзреАрдХрдзреА рдЦреВрдк рд╡рд┐рдЪрд┐рддреНрд░ рдЖрд╢реНрдЪрд░реНрдп рд╕рд╛рджрд░ рдХрд░рддреЗ. рдпрд╛ рд▓реЗрдЦрд╛рдд рдЖрдореНрд╣реА рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХрд╛рд╣реА рд╡рд┐рдЪрд┐рддреНрд░ рдЧреЛрд╖реНрдЯреА рд╕реНрдкрд╖реНрдЯ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ, рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╡рд┐рдЪрд┐рддреНрд░ рд╡рд╛рдЧрдгреНрдпрд╛рдЪреЗ рдХрд╛рд░рдг рд╕рдордЬреВрди рдШреЗрдК рдЖрдгрд┐ рджреИрдирдВрджрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдд рд╕рдорд╕реНрдпрд╛рдВрдирд╛ рдХрд╕реЗ рд╕рд╛рдореЛрд░реЗ рдЬрд╛рдК рдирдпреЗ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдК. рд╕рддреНрдп рд╕рд╛рдВрдЧрдгреНрдпрд╛рд╕рд╛рдареА, рдореА рд╣рд╛ рд▓реЗрдЦ рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдкреНрд░рдХрд╛рд░рдЪрд╛ рд╕рдВрджрд░реНрдн рдкреБрд╕реНрддрдХ рдореНрд╣рдгреВрди рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓рд╛ рдЖрд╣реЗ, рдПрдХ рд╕рдВрджрд░реНрдн рдкреБрд╕реНрддрдХ рдЬреНрдпрд╛рдЪрд╛ рд╕рдВрджрд░реНрдн рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ рд╕рд╣рдЬрдкрдгреЗ рдХрд░рддрд╛ рдпреЗрдИрд▓. рддреНрдпрд╛рдореБрд│реЗ, рд╕рдВрд╢рдпрд╛рд╕реНрдкрдж рдкреНрд░рдХрд╛рд░рд╛рдВрдордзреБрди рдирд╡реАрди рдЖрд╢реНрдЪрд░реНрдпрд╛рдЪрд╛ рд╢реЛрдз рд▓рд╛рдЧрд▓реНрдпрд╛рдиреЗ рддреЗ рдкреБрдиреНрд╣рд╛ рднрд░рд▓реЗ рдЬрд╛рдИрд▓. рддрд░, рдЪрд▓рд╛, рдЕрдердХ рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреНрд░реЕрдХрд░реНрд╕!

рдбреЙрдЬрд┐рдпрд░ рдирдВрдмрд░ рдПрдХ. рд╡рд╛рд╕реНрддрд╡рд┐рдХ/рджреБрд╣реЗрд░реА рдЕрдЪреВрдХрддрд╛/рд╕рдВрдЦреНрдпрд╛рддреНрдордХ/рдкреИрд╕рд╛

рдЕрд╕реЗ рджрд┐рд╕рддреЗ рдХреА рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░ рд╡рд░реНрддрдирд╛рддреАрд▓ рдЖрд╢реНрдЪрд░реНрдпрд╛рдВрдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рд╕рд░реНрд╡рд╛рдд рдХрдореА рд╕рдорд╕реНрдпрд╛рдкреНрд░рдзрд╛рди рдЖрд╣реЗрдд. рдкрдг рддреЗ рдХрд╕реЗрд╣реА рдЕрд╕реЛ. рддрд░ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдкрд╛рд╕реВрди рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрдпрд╛. рддреНрдпрд╛рдореБрд│реЗтАж

рдХрд╕реЗ рдореЛрдЬрд╛рдпрдЪреЗ рддреЗ рд╡рд┐рд╕рд░рд▓реЛ

SELECT 0.1::real = 0.1

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

рдХрд╛рдп рдЭрд▓рд╛? рд╕рдорд╕реНрдпрд╛ рдЕрд╢реА рдЖрд╣реЗ рдХреА рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓ рдЯрд╛рдЗрдк рди рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕реНрдерд┐рд░рд╛рдВрдХ 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

рдмрд░реНтАНрдпрд╛рдЪ рд▓реЛрдХрд╛рдВрдирд╛ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ рдХреА рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓ рдЯрд╛рдЗрдк рдХрд╛рд╕реНрдЯрд┐рдВрдЧрд╕рд╛рдареА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдиреЛрдЯреЗрд╢рдирд▓рд╛ рдЕрдиреБрдорддреА рджреЗрддреЗ. рдореНрд╣рдгрдЬреЗрдЪ, рддреБрдореНрд╣реА рдлрдХреНрдд 1::int рдирд╛рд╣реА рддрд░ int(1) рджреЗрдЦреАрд▓ рд▓рд┐рд╣реВ рд╢рдХрддрд╛, рдЬреЗ рд╕рдорддреБрд▓реНрдп рдЕрд╕реЗрд▓. рдкрд░рдВрддреБ рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░рд╛рдВрд╕рд╛рдареА рдирд╛рд╣реА рдЬреНрдпрд╛рдВрдЪреНрдпрд╛ рдирд╛рд╡рд╛рдВрдордзреНрдпреЗ рдЕрдиреЗрдХ рд╢рдмреНрдж рдЖрд╣реЗрдд! рдореНрд╣рдгреВрди, рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдВрдХреНрд╢рдирд▓ рдлреЙрд░реНрдордордзреНрдпреЗ рджреБрдкреНрдкрдЯ рдЕрдЪреВрдХ рдкреНрд░рдХрд╛рд░рд╛рд╕рд╛рдареА рдЕрдВрдХреАрдп рдореВрд▓реНрдп рдХрд╛рд╕реНрдЯ рдХрд░рд╛рдпрдЪреЗ рдЕрд╕реЗрд▓, рддрд░ рдпрд╛ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рдлреНрд▓реЛрдЯ8 рдЪреЗ рдЙрдкрдирд╛рд╡ рд╡рд╛рдкрд░рд╛, рдореНрд╣рдгрдЬреЗ SELECT float8(1).

рдЕрдирдВрддрд╛рдкреЗрдХреНрд╖рд╛ рдореЛрдареЗ рдХрд╛рдп рдЖрд╣реЗ?

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

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

рддреЗ рдХрд╕реЗ рдЖрд╣реЗ рддреЗ рдкрд╣рд╛! рдЕрдирдВрддрд╛рдкреЗрдХреНрд╖рд╛рд╣реА рдореЛрдареЗ рдХрд╛рд╣реАрддрд░реА рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдЖрдгрд┐ рддреЗ NaN рдЖрд╣реЗ! рддреНрдпрд╛рдЪ рд╡реЗрд│реА, PostgreSQL рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдирдЬрд░реЗрдиреЗ рдкрд╛рд╣рддреЗ рдЖрдгрд┐ рджрд╛рд╡рд╛ рдХрд░рддреЗ рдХреА NaN рдЗрддрд░ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕рдВрдЦреНрдпреЗрдкреЗрдХреНрд╖рд╛ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рдореЛрдареЗ рдЖрд╣реЗ, рдЖрдгрд┐ рдореНрд╣рдгреВрди, рдЕрдирдВрдд. -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, рдХрдореА рдирд╛рд╣реА! рдореНрд╣рдгреВрди, рд╡рд░реАрд▓ рдХреНрд╡реЗрд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддрд╛рдирд╛, рдбреЗрдЯрд╛рдмреЗрд╕ рдЗрддрд░ рдХрд╛рд╣реА рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░рд╛рдд рд╕реНрдореЙрд▓рдЗрдВрдЯ рдХрд╛рд╕реНрдЯ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддреЛ рдЖрдгрд┐ рдЕрд╕реЗ рдЕрдиреЗрдХ рдХрд╛рд╕реНрдЯ рдЕрд╕реВ рд╢рдХрддрд╛рдд рд╣реЗ рдкрд╛рд╣рддреЛ. рдХреЛрдгрддреА рдХрд╛рд╕реНрдЯ рдирд┐рд╡рдбрд╛рдпрдЪреА? рддреА рд╣реЗ рдард░рд╡реВ рд╢рдХрдд рдирд╛рд╣реА, рдЖрдгрд┐ рдореНрд╣рдгреВрди рддреНрд░реБрдЯреАрд╕рд╣ рдХреНрд░реЕрд╢ рд╣реЛрддреЗ.

рдлрд╛рдИрд▓ рдХреНрд░рдорд╛рдВрдХ рджреЛрди. "char"/char/varchar/text

рд╡рд░реНрдг рдкреНрд░рдХрд╛рд░рд╛рдВрдордзреНрдпреЗ рдЕрдиреЗрдХ рд╡рд┐рдЪрд┐рддреНрд░рддрд╛ рджреЗрдЦреАрд▓ рдЖрд╣реЗрдд. рддреНрдпрд╛рдВрдирд╛рд╣реА рдЬрд╛рдгреВрди рдШреЗрдКрдпрд╛.

рдпрд╛ рдХреЛрдгрддреНрдпрд╛ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рдпреБрдХреНрддреНрдпрд╛ рдЖрд╣реЗрдд?

SELECT '╨Я╨Х╨в╨п'::"char"
     , '╨Я╨Х╨в╨п'::"char"::bytea
     , '╨Я╨Х╨в╨п'::char
     , '╨Я╨Х╨в╨п'::char::bytea

 char  | bytea |    bpchar    | bytea
"char" | bytea | character(1) | bytea
-------+-------+--------------+--------
 тХи     | xd0  | ╨Я            | xd09f

рд╣рд╛ рдХреЛрдгрддреНрдпрд╛ рдкреНрд░рдХрд╛рд░рдЪрд╛ "рдЪрд╛рд░" рдЖрд╣реЗ, рд╣рд╛ рдХреЛрдгрддрд╛ рд╡рд┐рджреВрд╖рдХ рдЖрд╣реЗ? рдЖрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛рдВрдЪреА рдЧрд░рдЬ рдирд╛рд╣реА... рдХрд╛рд░рдг рддреЗ рдХреЛрдЯреНрд╕рдордзреНрдпреЗ рдЕрд╕рд▓реЗ рддрд░реАрд╣реА рддреЗ рд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрдг рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рднрд╛рд╕рд╡рддреЗ. рдЖрдгрд┐ рд╣реЗ рд░реЗрдЧреНрдпреБрд▓рд░ char рдкреЗрдХреНрд╖рд╛ рд╡реЗрдЧрд│реЗ рдЖрд╣реЗ, рдЬреЗ рдХреЛрдЯреНрд╕ рд╢рд┐рд╡рд╛рдп рдЕрд╕рддреЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рддреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд░рд┐рдкреНрд░реЗрдЭреЗрдВрдЯреЗрд╢рдирдЪрд╛ рдлрдХреНрдд рдкрд╣рд┐рд▓рд╛ рдмрд╛рдЗрдЯ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддреЗ, рддрд░ рд╕рд╛рдорд╛рдиреНрдп char рдкреНрд░рдердо рдХреЕрд░реЗрдХреНрдЯрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддреЗ. рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рдкрд╣рд┐рд▓реЗ рдЕрдХреНрд╖рд░ рдкреА рд╣реЗ рдЕрдХреНрд╖рд░ рдЖрд╣реЗ, рдЬреЗ рдпреБрдирд┐рдХреЛрдб рдкреНрд░рд╕реНрддреБрддреАрдХрд░рдгрд╛рдд 2 рдмрд╛рдЗрдЯреНрд╕ рдШреЗрддреЗ, рдЬрд╕реЗ рдХреА рдкрд░рд┐рдгрд╛рдорд╛рдЪреЗ рдмрд╛рдЗрдЯ рдкреНрд░рдХрд╛рд░рд╛рдд рд░реВрдкрд╛рдВрддрд░ рдХрд░реВрди рдкреБрд░рд╛рд╡рд╛. рдЖрдгрд┐ "char" рдкреНрд░рдХрд╛рд░ рдпрд╛ рдпреБрдирд┐рдХреЛрдб рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдЪрд╛ рдлрдХреНрдд рдкрд╣рд┐рд▓рд╛ рдмрд╛рдЗрдЯ рдШреЗрддреЛ. рдордЧ рд╣рд╛ рдкреНрд░рдХрд╛рд░ рдХрд╢рд╛рд▓рд╛ рд╣рд╡рд╛? 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

рджрд┐рд▓реЗрд▓реНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рд╡рд░ рдПрдХ рдирдЬрд░ рдЯрд╛рдХрд╛. рдореА рд╡рд┐рд╢реЗрд╖рддрдГ рд╕рд░реНрд╡ рдкрд░рд┐рдгрд╛рдо рдмрд╛рдпрдЯреА рдкреНрд░рдХрд╛рд░рд╛рдд рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реЗ, рдЬреЗрдгреЗрдХрд░реВрди рддреЗрдереЗ рдХрд╛рдп рдЖрд╣реЗ рддреЗ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рджрд┐рд╕рдд рд╣реЛрддреЗ. varchar(6) рд▓рд╛ рдХрд╛рд╕реНрдЯ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рдорд╛рдЧрдЪреА рдЬрд╛рдЧрд╛ рдХреЛрдареЗ рдЖрд╣реЗ? рджрд╕реНрддрдРрд╡рдЬрд╛рдд рд╕рдВрдХреНрд╖рд┐рдкреНрддрдкрдгреЗ рдЕрд╕реЗ рдореНрд╣рдЯрд▓реЗ рдЖрд╣реЗ: "рдХреЕрд░реЕрдХреНрдЯрд░рдЪреЗ рд╡реНрд╣реЕрд▓реНрдпреВ рджреБрд╕рд░реНтАНрдпрд╛ рд╡рд░реНрдг рдкреНрд░рдХрд╛рд░рд╛рдд рдХрд╛рд╕реНрдЯ рдХрд░рддрд╛рдирд╛, рдорд╛рдЧрдЪреА рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдЯрд╛рдХреВрди рджрд┐рд▓реА рдЬрд╛рддреЗ." рд╣реА рдирд╛рдкрд╕рдВрддреА рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛рдпрд▓рд╛ рд╣рд╡реА. рдЖрдгрд┐ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рдЬрд░ рдХреЛрдЯреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЙрдиреНрд╕реНрдЯрдВрдЯ рдереЗрдЯ varchar(6) рдЯрд╛рдИрдк рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЯрд╛рдХрд▓рд╛ рдЕрд╕реЗрд▓, рддрд░ рдЯреНрд░реЗрд▓рд┐рдВрдЧ рд╕реНрдкреЗрд╕ рдЬрддрди рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд. рдЕрд╕реЗ рдЪрдорддреНрдХрд╛рд░ рдЖрд╣реЗрдд.

рдлрд╛рдЗрд▓ рдХреНрд░рдорд╛рдВрдХ рддреАрди. json/jsonb

JSON рд╣реА рдПрдХ рд╡реЗрдЧрд│реА рд░рдЪрдирд╛ рдЖрд╣реЗ рдЬреА рд╕реНрд╡рддрдГрдЪреЗ рдЬреАрд╡рди рдЬрдЧрддреЗ. рдореНрд╣рдгреВрди, рддреНрдпрд╛рдЪреА рд╕рдВрд╕реНрдерд╛ рдЖрдгрд┐ PostgreSQL рдЪреА рд╕рдВрд╕реНрдерд╛ рдереЛрдбреА рд╡реЗрдЧрд│реА рдЖрд╣реЗ. рдпреЗрдереЗ рдЙрджрд╛рд╣рд░рдгреЗ рдЖрд╣реЗрдд.

рдЬреЙрдиреНрд╕рди рдЖрдгрд┐ рдЬреЙрдиреНрд╕рди. рдлрд░рдХ рдЬрд╛рдгрд╛

SELECT 'null'::jsonb IS NULL

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

рдЧреЛрд╖реНрдЯ рдЕрд╢реА рдЖрд╣реЗ рдХреА JSON рдЪреА рд╕реНрд╡рддрдГрдЪреА рд╢реВрдиреНрдп рдЕрд╕реНрддрд┐рддреНрд╡ рдЖрд╣реЗ, рдЬреА PostgreSQL рдордзреАрд▓ NULL рдЪреЗ рдЕреЕрдирд╛рд▓реЙрдЧ рдирд╛рд╣реА. рддреНрдпрд╛рдЪ рд╡реЗрд│реА, 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 рдордзреНрдпреЗ рддреЛ рдЖрдзреАрдЪ рдкрд╛рд░реНрд╕ рдХреЗрд▓реЗрд▓реНрдпрд╛, рдЕрдиреБрдХреНрд░рдорд┐рдд рд░рдЪрдиреЗрдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдореНрд╣рдгреВрдирдЪ рджреБрд╕рд▒реНрдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдХреА 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 рдЖрд╣реЗ, рдЬреНрдпрд╛рдиреЗ рддрд┐рдЪреНрдпрд╛ рдордирд╛рд▓рд╛ рдЙрдЬрд╛рд│рд╛ рджрд┐рд▓рд╛. рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдордЬрдХреВрд░ рд╕реНрд╡рд░реВрдкрд╛рдд рддрд╛рд░рдЦрд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛рдирд╛, рдбреЗрдЯрд╛рдмреЗрд╕рдиреЗ рддреНрдпрд╛рдВрдирд╛ рдХрд┐рддреА рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдУрд│рдЦрд▓реЗ рд╣реЗ рдЖрдкрдг рдХрд╛рд│рдЬреАрдкреВрд░реНрд╡рдХ рддрдкрд╛рд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ (рд╡рд┐рд╢реЗрд╖рддрдГ, SHOW datestyle рдХрдорд╛рдВрдбрд╕рд╣ 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

рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡реЗрд│ рдХрд╛ рд╕рдордЬреВ рд╢рдХрдд рдирд╛рд╣реА? рдХрд╛рд░рдг рдЯрд╛рдЗрдо рдЭреЛрдирдордзреНрдпреЗ рд╕рдВрдХреНрд╖реЗрдк рдирд╛рд╣реА, рдкрд░рдВрддреБ рдкреВрд░реНрдг рдирд╛рд╡ рдЖрд╣реЗ, рдЬреЗ рдХреЗрд╡рд│ рддрд╛рд░рдЦреЗрдЪреНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рдд рдЕрд░реНрде рджреЗрддреЗ, рдХрд╛рд░рдг рддреЗ рдЯрд╛рдЗрдо рдЭреЛрди рдмрджрд▓рд╛рдВрдЪрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд▓рдХреНрд╖рд╛рдд рдШреЗрддреЗ рдЖрдгрд┐ рддреЗ рддрд╛рд░рдЦреЗрд╢рд┐рд╡рд╛рдп рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реА. рдЖрдгрд┐ рдЯрд╛рдЗрдо рд▓рд╛рдЗрдирдЪреЗ рд╢рдмреНрджрдЪ рдкреНрд░рд╢реНрди рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛рдд - рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рдЪрд╛ рдЦрд░реЛрдЦрд░ рдХрд╛рдп рдЕрд░реНрде рд╣реЛрддрд╛? рдореНрд╣рдгреВрди, рдпреЗрдереЗ рд╕рд░реНрд╡ рдХрд╛рд╣реА рддрд░реНрдХрд╕рдВрдЧрдд рдЖрд╣реЗ, рдЬрд░ рдЖрдкрдг рддреЗ рдкрд╣рд╛рд▓.

рддреНрдпрд╛рдЪреЗ рдХрд╛рдп рдмрд┐рдШрдбрд▓реЗ рдЖрд╣реЗ?

рдкрд░рд┐рд╕реНрдерд┐рддреАрдЪреА рдХрд▓реНрдкрдирд╛ рдХрд░рд╛. рддреБрдордЪреНтАНрдпрд╛ рдЯреЗрдмрд▓рдордзреНтАНрдпреЗ рдЯрд╛рдИрдорд╕реНтАНрдЯреЕрдореНтАНрдЯреНрдЭ рдЯрд╛рдИрдк рдЕрд╕рд▓реЗрд▓реЗ рдлреАрд▓реНтАНрдб рдЖрд╣реЗ. рддреБрдореНрд╣рд╛рд▓рд╛ рддреЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ. рдкрд░рдВрддреБ рдЖрдкрдг рд╕рдордЬрддрд╛ рдХреА рдпрд╛ рдлреАрд▓реНрдбрд╡рд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рддрдпрд╛рд░ рдХрд░рдгреЗ рдиреЗрд╣рдореАрдЪ рддреНрдпрд╛рдЪреНрдпрд╛ рдЙрдЪреНрдЪ рдирд┐рд╡рдбрдХрддреЗрдореБрд│реЗ рдиреНрдпрд╛рдпреНрдп рдирд╕рддреЗ (рдпрд╛ рдкреНрд░рдХрд╛рд░рдЪреА рдЬрд╡рд│рдЬрд╡рд│ рд╕рд░реНрд╡ рдореВрд▓реНрдпреЗ рдЕрджреНрд╡рд┐рддреАрдп рдЕрд╕рддреАрд▓). рддреНрдпрд╛рдореБрд│реЗ рддреБрдореНрд╣реА рдкреНрд░рдХрд╛рд░рд╛рд▓рд╛ рддрд╛рд░рдЦреЗрд▓рд╛ рдХрд╛рд╕реНрдЯ рдХрд░реВрди рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрд╛рдЪреА рдирд┐рд╡рдбрдХрддрд╛ рдХрдореА рдХрд░рдгреНрдпрд╛рдЪреЗ рдард░рд╡рддрд╛. рдЖрдгрд┐ рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдХ рдЖрд╢реНрдЪрд░реНрдп рдорд┐рд│реЗрд▓:

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

рдХрд╛рдп рдЭрд▓рд╛? рд╡рд╕реНрддреБрд╕реНрдерд┐рддреА рдЕрд╢реА рдЖрд╣реЗ рдХреА рддрд╛рд░рдЦреЗрдЪреНрдпрд╛ рдкреНрд░рдХрд╛рд░рд╛рд╡рд░ рдЯрд╛рдЗрдорд╕реНрдЯреЕрдореНрдкреНрдЯреНрдЭ рдкреНрд░рдХрд╛рд░ рдХрд╛рд╕реНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЯрд╛рдЗрдордЭреЛрди рд╕рд┐рд╕реНрдЯрдо рдкреЕрд░рд╛рдореАрдЯрд░рдЪреЗ рдореВрд▓реНрдп рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ, рдЬреЗ рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛рд░реНрдп рдХрд╕реНрдЯрдо рдкреЕрд░рд╛рдореАрдЯрд░рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЗ, рдЙрджрд╛. рдЕрд╕реНрдерд┐рд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрд╛рдд рдЕрд╢рд╛ рдХрд╛рд░реНрдпрд╛рдВрдирд╛ рдкрд░рд╡рд╛рдирдЧреА рдирд╛рд╣реА. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдХреЛрдгрддреНрдпрд╛ рдЯрд╛рдЗрдо рдЭреЛрдирдордзреНрдпреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛рд╕реНрдЯ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рд╣реЗ рддреБрдореНрд╣реА рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рд╕реВрдЪрд┐рдд рдХреЗрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ.

рдЬреЗрд╡реНрд╣рд╛ рдЖрддрд╛ рдирд╛рд╣реА рддрд░ рдЖрддрд╛ рдЕрдЬрд┐рдмрд╛рдд рдирд╛рд╣реА

рдЖрдореНрд╣рд╛рд▓рд╛ рдЯрд╛рдЗрдо рдЭреЛрди рд▓рдХреНрд╖рд╛рдд рдШреЗрдКрди, рд╡рд░реНрддрдорд╛рди рддрд╛рд░реАрдЦ/рд╡реЗрд│ рдкрд░рдд рдХрд░рдгреНрдпрд╛рдЪреА рд╕рд╡рдп рдЖрд╣реЗ. рдкрд░рдВрддреБ рдЦрд╛рд▓реАрд▓ рдкреНрд░рд╢реНрди рдкрд╣рд╛:

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;

рдорд╛рдЧреАрд▓ рд╡рд┐рдирдВрддреАрдирдВрддрд░ рдХрд┐рддреАрд╣реА рд╡реЗрд│ рдЧреЗрд▓рд╛ рдЕрд╕рд▓рд╛ рддрд░реАрд╣реА рддрд╛рд░реАрдЦ/рд╡реЗрд│ рд╕рд╛рд░рдЦреАрдЪ рдкрд░рдд рдХреЗрд▓реА рдЬрд╛рддреЗ! рдХрд╛рдп рдЭрд▓рд╛? рд╡рд╕реНрддреБрд╕реНрдерд┐рддреА рдЕрд╢реА рдЖрд╣реЗ рдХреА now() рд╣реА рд╡рд░реНрддрдорд╛рди рд╡реЗрд│ рдирд╛рд╣реА, рдкрд░рдВрддреБ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдЪреА рдкреНрд░рд╛рд░рдВрдн рд╡реЗрд│ рдЖрд╣реЗ. рддреНрдпрд╛рдореБрд│реЗ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдд рдмрджрд▓ рд╣реЛрдд рдирд╛рд╣реА. рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдЪреНрдпрд╛ рд╡реНрдпрд╛рдкреНрддреАрдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рд▓реЙрдиреНрдЪ рдХреЗрд▓реЗрд▓реА рдХреЛрдгрддреАрд╣реА рдХреНрд╡реЗрд░реА рдЕрдкреНрд░рддреНрдпрдХреНрд╖рдкрдгреЗ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдд рдЧреБрдВрдбрд╛рд│рд▓реЗрд▓реА рдЕрд╕рддреЗ, рдореНрд╣рдгреВрдирдЪ рдЖрдореНрд╣рд╛рд▓рд╛ рд▓рдХреНрд╖рд╛рдд рдпреЗрдд рдирд╛рд╣реА рдХреА рд╕рд╛рдзреНрдпрд╛ SELECT now(); рдЦрд░рдВ рддрд░, рд╡рд░реНрддрдорд╛рди рдирд╛рд╣реА... рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдЪрд╛рд▓реВ рд╡реЗрд│ рдорд┐рд│рд╡рд╛рдпрдЪрд╛ рдЕрд╕реЗрд▓, рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ clock_timestamp() рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓.

рдлрд╛рдИрд▓ рдХреНрд░рдорд╛рдВрдХ рдкрд╛рдЪ. рдмрд┐рдЯ

рдереЛрдбреЗрд╕реЗ рд╡рд┐рдЪрд┐рддреНрд░

SELECT '111'::bit(4)

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

рдкреНрд░рдХрд╛рд░ рд╡рд┐рд╕реНрддрд╛рд░рд╛рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рдмрд┐рдЯреНрд╕ рдХреЛрдгрддреА рдмрд╛рдЬреВ рдЬреЛрдбрд▓реА рдкрд╛рд╣рд┐рдЬреЗрдд? рддреЗ рдбрд╛рд╡реАрдХрдбреЗ рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рджрд┐рд╕рддреЗ. рдорд╛рддреНрд░ рдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░ рдХреЗрд╡рд│ рдмреЗрд╕рдЪреЗ рд╡реЗрдЧрд│реЗ рдордд рдЖрд╣реЗ. рд╕рд╛рд╡рдзрдЧрд┐рд░реА рдмрд╛рд│рдЧрд╛: рдкреНрд░рдХрд╛рд░ рдХрд╛рд╕реНрдЯ рдХрд░рддрд╛рдирд╛ рдЕрдВрдХрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдЬреБрд│рдд рдирд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ рддреЗ рдорд┐рд│рдгрд╛рд░ рдирд╛рд╣реА. рд╣реЗ рдЙрдЬрд╡реАрдХрдбреЗ рдмрд┐рдЯ рдЬреЛрдбрдгреЗ рдЖрдгрд┐ рдмрд┐рдЯреНрд╕ рдЯреНрд░рд┐рдо рдХрд░рдгреЗ рдпрд╛ рджреЛрдиреНрд╣реАрд╡рд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ. рддрд╕реЗрдЪ рдЙрдЬрд╡реАрдХрдбреЗ...

рдлрд╛рдИрд▓ рдХреНрд░рдорд╛рдВрдХ рд╕рд╣рд╛. рдЕреЕрд░реЗ

NULL рджреЗрдЦреАрд▓ рдлрд╛рдпрд░ рдХреЗрд▓реЗ рдирд╛рд╣реА

SELECT ARRAY[1, 2] || NULL

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

рд╕рд╛рдорд╛рдиреНрдп рд▓реЛрдХ SQL рд╡рд░ рдЙрдард╡рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдЖрдореНрд╣реА рдпрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддреАрдЪрд╛ рдкрд░рд┐рдгрд╛рдо NULL рдЕрд╕рдгреНрдпрд╛рдЪреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЛ. рдкрдг рддреЗ рддрд┐рдереЗ рдирд╡реНрд╣рддреЗ. рдЕреЕрд░реЗ рдкрд░рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдХрд╛? рдХрд╛рд░рдг рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд рдмреЗрд╕ NULL рд▓рд╛ рдкреВрд░реНрдгрд╛рдВрдХ рдЕреЕрд░реЗрдордзреНрдпреЗ рдЯрд╛рдХрддреЛ рдЖрдгрд┐ рдЕрдкреНрд░рддреНрдпрдХреНрд╖рдкрдгреЗ array_cat рдлрдВрдХреНрд╢рдирд▓рд╛ рдХреЙрд▓ рдХрд░рддреЛ. рдкрд░рдВрддреБ рд╣реЗ "рдЕреЕрд░реЗ рдорд╛рдВрдЬрд░" рдЕреЕрд░реЗ рд░реАрд╕реЗрдЯ рдХрд╛ рдХрд░рдд рдирд╛рд╣реА рд╣реЗ рдЕрджреНрдпрд╛рдк рдЕрд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ. рд╣реЗ рд╡рд░реНрддрди рджреЗрдЦреАрд▓ рдлрдХреНрдд рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рд╕рд╛рд░рд╛рдВрд╢ рджреНрдпрд╛. рд╡рд┐рдЪрд┐рддреНрд░ рдЧреЛрд╖реНрдЯреА рднрд░рдкреВрд░ рдЖрд╣реЗрдд. рддреНрдпрд╛рдкреИрдХреА рдмрд╣реБрддреЗрдХ, рдЕрд░реНрдерд╛рддрдЪ, рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рдЕрдпреЛрдЧреНрдп рд╡рд░реНрддрдирд╛рдмрджреНрджрд▓ рдмреЛрд▓рдгреНрдпрд╛рдЗрддрдХреЗ рдЧрдВрднреАрд░ рдирд╛рд╣реАрдд. рдЖрдгрд┐ рдЗрддрд░рд╛рдВрдирд╛ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕ рд╕реБрд▓рднрддреЗрдиреЗ рдХрд┐рдВрд╡рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддреАрдВрдордзреНрдпреЗ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд▓рд╛рдЧреВ рд╣реЛрдгреНрдпрд╛рдЪреНрдпрд╛ рд╡рд╛рд░рдВрд╡рд╛рд░рддреЗрджреНрд╡рд╛рд░реЗ рд╕реНрдкрд╖реНрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗ. рдкрдг рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдЕрдиреЗрдХ рдЖрд╢реНрдЪрд░реНрдп рдЖрд╣реЗрдд. рдореНрд╣рдгреВрди, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рд╡рд░реНрддрдирд╛рдд рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдгрдЦреА рдХрд╛рд╣реА рд╡рд┐рдЪрд┐рддреНрд░ рдХрд┐рдВрд╡рд╛ рдЕрд╕рд╛рдорд╛рдиреНрдп рдЖрдврд│рд▓реНрдпрд╛рд╕, рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдордзреНрдпреЗ рд▓рд┐рд╣рд╛, рдорд▓рд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╡рд░реАрд▓ рдЙрдкрд▓рдмреНрдз рдбреЙрд╕рд┐рдпрд░рдордзреНрдпреЗ рдЬреЛрдбрдгреНрдпрд╛рд╕ рдЖрдирдВрдж рд╣реЛрдИрд▓.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛