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

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

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

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

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

рдХрд╕рд░реА рдЧрдгрдирд╛ рдЧрд░реНрдиреЗ рдмрд┐рд░реНрд╕рдиреБрднрдпреЛ

SELECT 0.1::real = 0.1

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

рдХреЗ рднрдпреЛ? рд╕рдорд╕реНрдпрд╛ рдпреЛ рд╣реЛ рдХрд┐ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓рд▓реЗ рдЯрд╛рдЗрдк рдирдЧрд░рд┐рдПрдХреЛ рд╕реНрдерд┐рд░ реж.рез рд▓рд╛рдИ рдбрдмрд▓ рдкрд░рд┐рд╢реБрджреНрдзрддрд╛рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрджрдЫ рд░ рдпрд╕рд▓рд╛рдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд╛рд░рдХреЛ реж.рез рд╕рдБрдЧ рддреБрд▓рдирд╛ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрджрдЫред рд░ рдпреА рдкреВрд░реНрдгрддрдпрд╛ рдлрд░рдХ рдЕрд░реНрдерд╣рд░реВ рдЫрдиреН! рд╡рд┐рдЪрд╛рд░ рдореЗрд╕рд┐рди рдореЗрдореЛрд░реАрдорд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛рд╣рд░реВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдиреЗ рд╣реЛред реж.рез рд▓рд╛рдИ рд╕реАрдорд┐рдд рдмрд╛рдЗрдирд░реА рдЕрдВрд╢рдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрди (рдпреЛ рдмрд╛рдЗрдирд░реАрдорд╛ реж.реж (режрежрезрез) рд╣реБрдиреЗрдЫ), рдлрд░рдХ рдмрд┐рдЯ рдЧрд╣рд┐рд░рд╛рдЗ рднрдПрдХрд╛ рд╕рдВрдЦреНрдпрд╛рд╣рд░реВ рдлрд░рдХ рд╣реБрдиреЗрдЫрдиреН, рддреНрдпрд╕реИрд▓реЗ рддрд┐рдиреАрд╣рд░реВ рдмрд░рд╛рдмрд░ рдЫреИрдирдиреН рднрдиреНрдиреЗ рдкрд░рд┐рдгрд╛рдоред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рднрдиреНрдиреБрдкрд░реНрджрд╛, рдпреЛ рдЫреБрдЯреНрдЯреИ рд▓реЗрдЦрдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╖рдп рд╣реЛ; рдо рдпрд╣рд╛рдБ рдердк рд╡рд┐рд╕реНрддрд╛рд░рдорд╛ рд▓реЗрдЦреНрдиреЗ рдЫреИрдиред

рддреНрд░реБрдЯрд┐ рдХрд╣рд╛рдБрдмрд╛рдЯ рдЖрдЙрдБрдЫ?

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

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

рдЙрд╕рд▓рд╛рдИ рдХреЗ рдЧрд▓реНрддреА рдЫ?

рдЕрд╡рд╕реНрдерд╛ рдХрд▓реНрдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рддрдкрд╛рдЗрдБрд╕рдБрдЧ рддрдкрд╛рдЗрдБрдХреЛ рддрд╛рд▓рд┐рдХрд╛рдорд╛ 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 рдкреНрд░рдгрд╛рд▓реА рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рдорд╛рди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдиреНрддрд░рдг рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ рдЕрдиреБрдХреВрд▓рди рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫ, рдЕрд░реНрдерд╛рддреНред рдЕрд╕реНрдерд┐рд░ред рдпрд╕реНрддреЛ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рдорд╛ рдЕрдиреБрдорддрд┐ рдЫреИрдиред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рддрдкрд╛рдИрдВрд▓реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рд╕рдВрдХреЗрдд рдЧрд░реНрдиреБрдкрд░реНрдЫ рдХрд┐ рдХреБрди рд╕рдордп рдХреНрд╖реЗрддреНрд░рдорд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛рд╕реНрдЯ рдЧрд░рд┐рдиреНрдЫред

рдЬрддрд┐рдмреЗрд▓рд╛ рдЕрд╣рд┐рд▓реЗ рдкрдирд┐ рдЫреИрди

рд╣рд╛рдореА рдЕрд╣рд┐рд▓реЗ () рд╣рд╛рд▓рдХреЛ рдорд┐рддрд┐/рд╕рдордп рдлрд░реНрдХрд╛рдЙрдиреЗ рдмрд╛рдиреА рдкрд░реЗрдХрд╛ рдЫреМрдВ, рд╕рдордп рдХреНрд╖реЗрддреНрд░рд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрджреИред рддрд░ рдирд┐рдореНрди рдкреНрд░рд╢реНрдирд╣рд░реВ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН:

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди