рд╕рдВрджрд┐рдЧреНрдз рдкреНрд░рдХрд╛рд░

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

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

рдбреЛрдЬрд┐рдпрд░ рдирдВрдмрд░ рдПрдХ. рд╡рд╛рд╕реНрддрд╡рд┐рдХ/рджреЛрд╣рд░реА рдкрд░рд┐рд╢реБрджреНрдзрддрд╛/рд╕рдВрдЦреНрдпрд╛рддреНрдордХ/рдкреИрд╕рд╛

рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░ рд╕рдмрд╕реЗ рдХрдо рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИрдВред рд▓реЗрдХрд┐рди рдЪрд╛рд╣реЗ рд╡реЛ рдХреИрд╕рд╛ рднреА рд╣реЛ. рддреЛ рдЪрд▓рд┐рдП рдЙрдирд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдПтАж

рдЧрд┐рдирдирд╛ рднреВрд▓ рдЧрдпрд╛

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 рдЯрд╛рдЗрдк рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдиреЛрдЯреЗрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╛рдиреА рдЖрдк рди рдХреЗрд╡рд▓ 1::int, рдмрд▓реНрдХрд┐ int(1) рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдорддреБрд▓реНрдп рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЬрд┐рдирдХреЗ рдирд╛рдо рдореЗрдВ рдХрдИ рд╢рдмреНрдж рд╣реЛрддреЗ рд╣реИрдВ! рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рдореЗрдВ рджреЛрд╣рд░реЗ рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдлреНрд▓реЛрдЯ 8 рдХреЗ рдЙрдкрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЕрд░реНрдерд╛рдд, рд╕реЗрд▓реЗрдХреНрдЯ рдлреНрд▓реЛрдЯ 8 (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

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

рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдкрд░ рдПрдХ рдирдЬрд░ рдбрд╛рд▓реЗрдВ. рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рднреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдмрд╛рдЗрдЯ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджрд┐рдпрд╛, рддрд╛рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗ рдХрд┐ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рдерд╛ред рд╡рд░реНрдЪрд░(6) рдореЗрдВ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдкрд┐рдЫрд▓реА рдЬрдЧрд╣реЗрдВ рдХрд╣рд╛рдВ рд╣реИрдВ? рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ: "рдЬрдм рдЪрд░рд┐рддреНрд░ рдХреЗ рдорд╛рди рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪрд░рд┐рддреНрд░ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдиреБрдЧрд╛рдореА рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред" рдЗрд╕ рдирд╛рдкрд╕рдВрджрдЧреА рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП. рдФрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдЙрджреНрдзреГрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рд╕реАрдзреЗ рд╡рд░реНрдЪрд░ (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 рдбреЗрдЯрд╕реНрдЯрд╛рдЗрд▓ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╕реНрдЯрд╛рдЗрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ), рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдмрд╣реБрдд рдорд╣рдВрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИред

рдЖрдкрдХреЛ рдпрд╣ рдХрд╣рд╛рдВ рд╕реЗ рдорд┐рд▓рд╛?

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

рдХреНрдпрд╛ рдмрд╛рдд рдХреНрдпрд╛ рдмрд╛рдд? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдкрдЬрд╝ рдкреНрд░рдХрд╛рд░ рдХреЛ рджрд┐рдирд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯрд╛рдЗрдордЬрд╝реЛрди рд╕рд┐рд╕реНрдЯрдо рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорд╛рди рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдВрддрд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╕реНрдЯрдо рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдмрдирд╛рддрд╛ рд╣реИ, рдпрд╛рдиреАред рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ред рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЯрд╛рдЗрдк рдХрд╛рд╕реНрдЯ рдХрд┐рд╕ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬрдм рдЕрднреА рд╣реИ рд╣реА рдирд╣реАрдВ

рд╣рдо рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рд╡рд░реНрддрдорд╛рди рджрд┐рдирд╛рдВрдХ/рд╕рдордп рдХреЛ now() рд▓реМрдЯрд╛рдиреЗ рдХреЗ рдЖрджреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ:

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() рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рд╕рдордп; рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд░реНрддрдорд╛рди рд╕рдордп рдирд╣реАрдВ... рдпрджрд┐ рдЖрдк рдПрдХ рдИрдорд╛рдирджрд╛рд░ рд╡рд░реНрддрдорд╛рди рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреНрд▓реЙрдХ_рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдлрд╛рдЗрд▓ рдирдВрдмрд░ рдкрд╛рдВрдЪ. рдЕрдВрд╢

рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИ

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ