Ituaiga masalosalo

E leai se mea e masalomia o latou foliga. E le gata i lea, e foliga mai latou te masani lelei ia te oe ma mo se taimi umi. Ae se'i vagana ua e siakiina. O le mea lea latou te faʻaalia ai lo latou natura faʻalavelave, e matua ese lava le galue nai lo le mea na e faʻamoemoeina. Ma o nisi taimi latou te faia se mea e tu ai lou lauulu - mo se faʻataʻitaʻiga, latou te leiloa faʻamatalaga faalilolilo na tuʻuina atu ia i latou. A e faʻasaga ia i latou, latou te fai mai latou te le iloa e le tasi le isi, e ui lava i le paolo latou te galulue malosi i lalo o le pulou e tasi. Ua oo i le taimi e aumai ai i latou i vai mama. Ia tatou taulimaina foi nei ituaiga masalosalo.

Fa'amaumauga o fa'amaumauga i le PostgreSQL, mo ona manatu uma, o nisi taimi e matua'i fa'ate'ia ai. I lenei tusiga o le a tatou taumafai e faʻamalamalama nisi o latou uiga, malamalama i le mafuaʻaga o a latou amio uiga ese ma malamalama pe faʻafefea ona le taufetuli i faʻafitauli i le masani i aso uma. Ina ia taʻu atu le mea moni, na ou tuufaatasia foi lenei tusiga e avea o se ituaiga tusi mo aʻu lava, o se tusi faʻamatalaga e mafai ona faigofie ona taʻua i mataupu feteʻenaʻi. O le mea lea, o le a toe faʻatumuina pe a maua ni mea fou faʻateʻia mai ituaiga masalosalo. O lea, tatou o, oi e le vaivai tagata su'esu'e fa'amaumauga!

Dossier numera tasi. moni/faalua sa'o/numera/tupe

E foliga mai o ituaiga numera e sili ona faigata i tulaga o mea e ofo ai i amioga. Ae tusa lava po o le a le tulaga. Ia tatou amata la ia i latou. O lea…

Ua galo ona faitau

SELECT 0.1::real = 0.1

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

O le a le mea ua tupu? O le faʻafitauli o le faʻaliliuina lea e PostgreSQL le 0.1 tumau e le faʻapipiʻiina e faʻaluaina le saʻo ma taumafai e faʻatusatusa i le 0.1 o le ituaiga moni. Ma o uiga eseese ia! O le manatu o le faʻatusalia o numera moni i le masini manatua. Talu ai e le mafai ona fa'atusaina le 0.1 o se vaega fa'ai'u fa'ai'uga (e 0.0(0011) i le binary), o fuainumera e eseese le loloto o le a eseese, o le mea lea o le i'uga e le tutusa. I se tulaga lautele, o se autu lenei mo se isi tusitusiga; O le a ou le tusia atili auiliiliga iinei.

O fea e sau ai le mea sese?

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

E toʻatele tagata latou te iloa o le PostgreSQL e faʻatagaina faʻamatalaga galue mo le tuʻuina atu o ituaiga. O lona uiga, e mafai ona e tusia e le gata 1::int, ae faʻapea foi int(1), lea o le a tutusa. Ae le mo ituaiga o latou igoa e aofia ai ni nai upu! O le mea lea, afai e te manaʻo e tuʻuina se numera numera e faʻaluaina le saʻo saʻo ituaiga i foliga galue, faʻaaoga le igoa o lenei ituaiga float8, o lona uiga, SELECT float8(1).

O le a le mea e sili atu nai lo le le gata?

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

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

Va'ai pe fa'apefea! E foliga mai o loʻo i ai se mea e sili atu nai lo le le gata, ma o le NaN! I le taimi lava e tasi, o le PostgreSQL faʻamaumauga e vaʻavaʻai mai ia i matou ma mata faʻamaoni ma fai mai o NaN e manino lava e sili atu nai lo seisi numera, ma, o le mea lea, e le gata. E moni foi le faafeagai mo -NaN. Talofa, e fiafia i le numera! Ae e tatau ona tatou manatua o nei mea uma o loʻo galue i le tulaga o numera moni.

Fa'amilosaga mata

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

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

O le isi faʻafeiloaʻiga e leʻi mafaufauina mai le faʻavae. Ia toe manatua o le sa'o fa'alua ma ituaiga numera e eseese a'afiaga fa'ata'amilosaga. Mo numera - o le auala masani, pe a 0,5 e faʻataʻamilomilo i luga, ma mo faʻalua faʻamaonia - 0,5 e faʻataʻamilomilo agai i le numera lata ane.

O tupe o se mea faapitoa

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

E tusa ai ma le PostgreSQL, o tupe e le o se numera moni. E tusa ai ma nisi tagata, foi. E tatau ona tatou manatua o le lafoina o le ituaiga tupe e naʻo le numera numera, e pei lava o le numera numera e mafai ona lafo i le ituaiga tupe. Ae o lenei ua mafai ona e taalo i ai e pei ona manao i ai lou loto. Ae o le a le tutusa le tupe.

Laiti ma fa'atupu fa'asologa

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 e le fiafia e faʻaumatia taimi i mea laiti. O a nei fa'asologa e fa'avae ile smallint? int, e le itiiti ifo! O le mea lea, pe a taumafai e faʻatino le fesili o loʻo i luga, e taumafai le database e lafo smallint i se isi ituaiga integer, ma vaʻai e ono tele na lafo. O le fea ata e filifilia? E le mafai ona ia faia se faaiuga i lenei mea, ma o le mea lea e paʻu ai i se mea sese.

Faila numera lua. "char"/char/varchar/text

O lo'o iai fo'i le tele o mea uiga ese i ituaiga uiga. Ia tatou faamasani foi ia i latou.

O a ituaiga togafiti nei?

SELECT 'ПЕТЯ'::"char"
     , 'ПЕТЯ'::"char"::bytea
     , 'ПЕТЯ'::char
     , 'ПЕТЯ'::char::bytea

 char  | bytea |    bpchar    | bytea
"char" | bytea | character(1) | bytea
-------+-------+--------------+--------
 ╨     | xd0  | П            | xd09f

O le a le ituaiga "char" lea, o le a le ituaiga clown lea? Matou te le manaʻomia na ... Aua e faʻafoliga o se char masani, e ui lava o loʻo i totonu o upusii. Ma e ese mai le char masani, lea e leai ni upusii, ona e na o le paita muamua o le manoa e maua mai ai, ae o le char masani e maua ai le uiga muamua. I la matou tulaga, o le uiga muamua o le mataitusi P, lea i le unicode sui e ave i luga 2 bytes, e pei ona molimauina i le faaliliuina o le taunuuga i le ituaiga bytea. Ma o le ituaiga "char" e naʻo le paita muamua o lenei faʻatusa unicode. Aiseā la e manaʻomia ai lea ituaiga? Fai mai le PostgreSQL faʻamaumauga o se ituaiga faʻapitoa lea e faʻaaogaina mo manaʻoga faʻapitoa. O lea e foliga mai tatou te le manaʻomia. Ae va'ai i ona mata ona e le fa'aseseina lea pe a e feiloa'i ma lana amio fa'apitoa.

Avanoa faaopoopo. Le vaai, le mafaufau

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

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

Seʻi tagaʻi i le faataʻitaʻiga ua tuuina mai. Na ou faʻaliliu faʻapitoa uma iʻuga i le ituaiga bytea, ina ia manino le iloa o mea o loʻo i ai. O fea oi ai avanoa mulimuli pe a uma ona lafo i le varchar(6)? O lo'o fa'amatala manino mai e le fa'amaumauga: "Pe a lafo le taua o le amio i se isi ituaiga tagata, e lafoa'i avanoa papa'e mulimuli." E tatau ona manatua lenei le fiafia. Ma ia maitauina afai e lafo sa'o le manoa o lo'o ta'ua i le ituaiga varchar(6), e fa'asaoina avanoa fa'asolo. E faapena vavega.

Faila numera tolu. json/jsonb

O le JSON o se fausaga ese e ola i lona lava olaga. O le mea lea, o ana faʻalapotopotoga ma latou o le PostgreSQL e ese si ese. O fa'ata'ita'iga nei.

Johnson ma Johnson. lagona le eseesega

SELECT 'null'::jsonb IS NULL

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

O le mea o le JSON o loʻo i ai lana lava null entity, e le o se faʻatusa o NULL i PostgreSQL. I le taimi lava e tasi, o le mea JSON lava ia e mafai ona i ai le tau NULL, o le faʻamatalaga SELECT null :: jsonb IS NULL (maitau le leai o ni upusii e tasi) o le a toe foʻi moni i le taimi nei.

E tasi le tusi e suia ai mea uma

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]}

O le mea o le json ma le jsonb o ni fausaga eseese. I le json, o loʻo teuina le mea e pei ona i ai, ma i le jsonb ua uma ona teuina i foliga o se faʻasologa, faʻasologa faʻasologa. O le mafuaaga lena i le tulaga lona lua, o le tau o le mea i le ki 1 na suia mai le [1, 2, 3] i le [7, 8, 9], lea na sau i totonu o le fausaga i le pito tonu ma le ki lava e tasi.

Aua le inu vai mai ou foliga

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

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

PostgreSQL i lona JSONB faʻatinoga e suia ai le faʻatulagaina o numera moni, aumaia i latou i le tulaga masani. E le tupu lenei mea mo le ituaiga JSON. E ese teisi, ae e sa'o o ia.

faila numera fa. aso/taimi/taimi

O lo'o iai fo'i nisi fa'ailoga fa'atasi ma ituaiga aso/taimi. Sei o tatou vaavaai ia i latou. Se'i o'u faia se fa'aagaga i le taimi lava lea e manino ai nisi o uiga fa'aalia pe afai e te malamalama lelei i le uiga o le galue ma sone taimi. Ae o se autu foi lea mo se tala ese.

O la'u tou e le malamalama

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

E foliga mai o le a le mea e le mafai ona malamalama i ai iinei? Ae e le o malamalama pea le faʻamaumauga i mea tatou te tuʻuina muamua iinei-le tausaga poʻo le aso? Ma na ia filifili o Ianuari 99, 2008, lea e oso ai lona mafaufau. I se tulaga masani, pe a faʻasalalau aso i le faʻasologa o tusitusiga, e tatau ona e siakiina ma le faʻaeteete pe faʻafefea ona saʻo le faʻamaumauga o faʻamaumauga (aemaise, auʻiliʻili le faʻasologa o le datestyle ma le SHOW datestyle command), talu ai o faʻalavelave i lenei mataupu e mafai ona taugata tele.

O fea na e maua mai ai lenei mea?

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

Aisea e le mafai ai e le database ona malamalama i le taimi tonu? Aua o le sone taimi e leai se fa'apuupuuga, ae o se igoa atoa, lea e na'o le tulaga o se aso e talafeagai ai, talu ai e amana'ia ai le talafaasolopito o suiga o le sone taimi, ma e le aoga e aunoa ma se aso. Ma o le fa'aupuga o le laina taimi e tula'i mai ai fesili - o le a le uiga moni o le fai polokalame? O le mea lea, o mea uma e talafeagai iinei, pe a e tilotilo i ai.

O le a le mea ua tupu ia te ia?

Vaai faalemafaufau i le tulaga. E iai sau fanua i lau laulau ma le ituaiga timestamptz. E te mana'o e fa'asino i ai. Ae e te malamalama o le fausiaina o se faasino igoa i luga o lenei fanua e le o taimi uma e tauamiotonuina ona o lona maualuga filifilia (toetoe lava o tulaga taua uma o lenei ituaiga o le a tulaga ese). O lea e te filifili e faʻaitiitia le filifilia o le faʻasino igoa e ala i le lafoina o le ituaiga i se aso. Ma e te maua se mea e ofo ai:

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

O le a le mea ua tupu? O le mea moni o le lafoina o se timestamptz type i se ituaiga aso, o le tau o le TimeZone system parameter o loʻo faʻaaogaina, lea e faʻalagolago ai le ituaiga suiga o galuega i luga o se faʻasologa masani, i.e. fe'avea'i. O ia galuega e le faatagaina i totonu o le faasino igoa. I lenei tulaga, e tatau ona e fa'ailoa manino mai po'o fea sone taimi e fa'atino ai le ituaiga lafo.

O le taimi nei e le o le taimi nei lava

Ua matou masani i le taimi nei () toe faʻafoʻi le aso / taimi o loʻo i ai nei, ma amanaʻia le sone taimi. Ae vaai i fesili nei:

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;

O le aso/taimi e toe fa'afo'i tutusa tusa lava po'o le a le tele o le taimi talu mai le talosaga muamua! O le a le mea ua tupu? O le mea moni o le taimi nei () e le o le taimi nei, ae o le taimi amata o le fefaʻatauaiga o loʻo iai nei. O le mea lea, e le suia i totonu o le fefaʻatauaiga. Soʻo se fesili e faʻalauiloaina i fafo atu o le lautele o se fefaʻatauaiga o loʻo afifiina i se fefaʻatauaiga faʻapitoa, o le mea lea matou te le matauina ai le taimi na toe faʻafoʻi mai e se FILIFILI faigofie nei (); i le mea moni, e le o le taimi nei ... Afai e te manaʻo e maua se taimi faʻamaoni i le taimi nei, e tatau ona e faʻaogaina le clock_timestamp () galuega.

Faila numera lima. itiiti

E ese teisi

SELECT '111'::bit(4)

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

O le fea itu e tatau ona fa'aopoopo i ai fasipepa pe a fa'aopoopo le ituaiga? E foliga mai i le itu agavale. Ae na o le faavae e ese le manatu i lenei mataupu. Fa'aeteete: afai e le fetaui le numera o numera pe a lafoina se ituaiga, e te le maua le mea e te mana'o ai. E fa'atatau lea i le fa'aopoopoina o pusi i le itu taumatau ma le tipi tipi. I le itu taumatau foi...

Faila numera ono. Fa'asologa

E oo lava ia NULL e le'i mu

SELECT ARRAY[1, 2] || NULL

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

E pei o tagata masani na siitia i luga ole SQL, matou te faʻamoemoe o le taunuuga o lenei faʻamatalaga e NULL. Ae sa le i ai iina. Ua toe faafoi mai se laina. Aisea? Aua i lenei tulaga o le faavae e lafo NULL i se numera numera ma taʻu manino le galuega array_cat. Ae o loʻo tumau pea le le manino pe aisea e le toe setiina ai e lenei "pusi pusi" le laina. E tatau foi ona manatua lenei amio.

Aotele. E tele mea uiga ese. O le tele oi latou, ioe, e le taua tele e talanoa e uiga i amioga le talafeagai. Ma o isi o loʻo faʻamatalaina e ala i le faigofie o le faʻaaogaina poʻo le tele o latou faʻaoga i nisi tulaga. Ae i le taimi lava e tasi, e tele mea e ofo ai. O le mea lea, e tatau ona e iloa e uiga ia i latou. Afai e te mauaina se isi mea uiga ese pe le masani ai i amioga o soʻo se ituaiga, tusi i faʻamatalaga, o le a ou fiafia e faʻaopoopo i faʻamaumauga o loʻo maua i luga o latou.

puna: www.habr.com

Faaopoopo i ai se faamatalaga