Nga momo whakapae

Kaore he mea whakapae mo o raatau ahua. I tua atu, he ahua mohio ratou ki a koe mo te wa roa. Engari kia tirohia ra ano e koe. Koinei te waahi e whakaatu ana i to ratau ahua hianga, he rereke te mahi i to whakaaro. A, i etahi wa ka mahi ratou i tetahi mea e tu ai o makawe - hei tauira, ka ngaro nga raraunga ngaro kua tukuna ki a raatau. Ka pa atu koe ki a raatau, ka kii ratou kaore i te mohio tetahi ki tetahi, ahakoa i roto i nga atarangi ka whakapau kaha ratou i raro i te ahua kotahi. Kua tae ki te wa ki te kawe mai ki te wai ma. Me mahi ano tatou ki enei momo whakapae.

Ko te tuhi Raraunga ki PostgreSQL, mo ona arorau katoa, i etahi wa ka tino miharo. I roto i tenei tuhinga ka ngana tatou ki te whakamarama i etahi o o raatau mahi, ki te mohio ki te take mo o raatau whanonga rereke me te mohio ki te kore e pa ki nga raruraru i roto i nga mahi o ia ra. Hei korero pono, i whakahiatotia e au tenei tuhinga hei momo pukapuka tohutoro maku, he pukapuka tohutoro e ngawari ana te korero i nga keehi tautohetohe. Na reira, ka whakakiia ano ka kitea nga ohorere hou mai i nga momo whakapae. No reira, haere tatou, e nga kaitirotiro papaa raraunga kore e ngenge!

Puka nama tuatahi. tino tika/ruarua/tau/moni

Ko te ahua ko nga momo tau te mea iti rawa te raru mo te ohorere o te whanonga. Engari ahakoa pehea. Na kia timata tatou ki a ratou. Na…

Kua wareware ki te tatau

SELECT 0.1::real = 0.1

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

He aha te take? Ko te raruraru ko te PostgreSQL ka huri i te 0.1 kore i tuhia ki te tika rua, ka ngana ki te whakataurite ki te 0.1 o te momo tuuturu. A he tino rereke enei tikanga! Ko te whakaaro he tohu i nga tau tuturu i roto i te mahara miihini. I te mea ko te 0.1 kaore e taea te whakaatu hei hautau-rua mutunga (he 0.0(0011) ki te rua), ka rereke nga tau he rereke te hohonutanga moka, no reira karekau e rite. Ko te tikanga, he kaupapa tenei mo te tuhinga motuhake, kare au e tuhi korero ki konei.

No hea te hapa?

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

He maha nga tangata e mohio ana ka taea e PostgreSQL te tuhi mahi mo te momo makanga. Arā, ka taea e koe te tuhi ehara i te 1::int anake, engari int(1), ka rite. Engari kaua mo nga momo he maha nga kupu kei roto nga ingoa! Na reira, ki te hiahia koe ki te maka i te uara tau ki te momo tino tika rua i roto i te ahua mahi, whakamahia te ingoa ingoa o tenei momo float8, ara, SELECT float8(1).

He aha te mea nui ake i te kore mutunga?

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

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

Tirohia te ahua! Ka puta he mea nui ake i te kore mutunga, a ko NaN! I te wa ano, ka titiro nga tuhinga a PostgreSQL ki a maatau me nga kanohi pono me te kii he nui ake te NaN i etahi atu nama, na reira, he mutunga kore. He pono ano te ritenga mo -NaN. Kia ora, e te hunga aroha pāngarau! Engari me mahara tatou kei te mahi enei katoa i roto i te horopaki o nga tau tuturu.

Mata huritao

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

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

He mihi ohorere mai i te turanga. Kia mahara ano, he rereke nga paanga whakaawhiwhi o nga momo taurua me nga momo tau. Mo te tau - ko te mea o mua, ina whakaawhiwhia te 0,5 ki runga, mo te tika rua - ka whakaawhiwhia te 0,5 ki te tauoti tau tata.

He mea motuhake te moni

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 ai ki a PostgreSQL, ehara te moni i te tau tuturu. E ai ki etahi tangata, ano. Me mahara tatou ko te maka i te momo moni ka taea anake ki te momo tau, pera me te momo tau anake ka taea te maka ki te momo moni. Inaianei ka taea e koe te takaro ki ta to ngakau e hiahia ai. Engari e kore e rite te moni.

Whakatupuranga iti me te raupapa

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

Kaore a PostgreSQL e pai ki te moumou taima ki nga mea iti. He aha enei raupapa i runga i te iti? int, kahore iti! Na reira, i te wa e ngana ana ki te whakahaere i te patai i runga ake nei, ka ngana te papaaarangi ki te maka iti ki etahi atu momo tauoti, ka kite he maha pea nga momo maka. Ko tehea kaata hei whiriwhiri? Kaore e taea e ia te whakatau i tenei, na reira ka pakaru i te hapa.

Kōnae nama tuarua. "char"/char/varchar/text

He maha ano nga ahuatanga rereke kei roto i nga momo ahua. Kia mohio ano tatou ki a ratou.

He aha enei momo tinihanga?

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

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

He aha te momo "char" tenei, he aha tenei momo hangareka? Kaore e hiahiatia ana e matou ... Na te mea he ahua noa, ahakoa kei roto i nga korero. A, he rereke ki te totika noa, kaore he korukoru, na te mea ka puta ko te paita tuatahi anake o te tohu aho, engari ko te tohu noa ka puta te ahua tuatahi. I roto i to maatau, ko te ahua tuatahi ko te reta P, kei roto i te tohu unicode e 2 paita, ka kitea ma te huri i te hua ki te momo paita. A ko te momo "char" anake te paita tuatahi o tenei tohu unicode. Na he aha i hiahiatia ai tenei momo? Ko nga tuhinga a PostgreSQL e kii ana he momo motuhake tenei mo nga hiahia motuhake. No reira kare pea tatou e hiahia. Engari titiro ki ona kanohi ka kore koe e pohehe ina tutaki koe ki a ia me tana whanonga motuhake.

Nga waahi taapiri. Kei waho te tirohanga, kei waho o te hinengaro

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

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

Tirohia te tauira i homai. I tino huria e au nga hua katoa ki te momo bytea, kia tino kitea ai he aha kei reira. Kei hea nga waahi whai muri i muri i te maka ki te varchar(6)? E kii ana te tuhinga: "I te wa e maka ana te uara o te kiripuaki ki tetahi atu momo ahua, ka makahia te mokowāma i muri." Me maumahara tenei kino. A, ki te maka tika mai he aho kua whakahuahia ki te momo varchar(6), ka mau tonu nga mokowhiti. Koia nga merekara.

Kōnae nama tuatoru. json/jsonb

He hanganga motuhake a JSON e noho ana i tona ake oranga. Na reira, he paku rereke ona hinonga me era o PostgreSQL. Anei etahi tauira.

Ko Johnson raua ko Johnson. ite i te rereketanga

SELECT 'null'::jsonb IS NULL

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

Ko te mea ko JSON tana ake hinonga kore, ehara i te mea he rite ki te NULL i PostgreSQL. I te wa ano, ko te ahanoa JSON ake pea te uara NULL, no reira ko te kupu SELECT null::jsonb IS NULL (kia mahara te kore o nga korukī kotahi) ka hoki pono i tenei wa.

Ka huri tetahi reta i nga mea katoa

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

Ko te mea ko te json me te jsonb he tino rereke nga hanganga. I roto i te json, ka penapenahia te ahanoa kia rite tonu, a, i roto i te jsonb kua penapena i roto i te ahua o te hanganga kua tohua, kua tohua. Koia te take i te keehi tuarua, i whakakapihia te uara o te ahanoa ma te matua 1 mai i te [1, 2, 3] ki te [7, 8, 9], i uru mai ki roto i te hanganga i te pito rawa me te kī kotahi.

Kaua e inu wai i to kanohi

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

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

Ko te PostgreSQL i roto i tana whakatinanatanga JSONB ka huri i te whakatakotoranga o nga tau tuturu, ka kawea ki te ahua puāwaitanga. Kaore tenei e tupu mo te momo JSON. He iti ke, engari he tika ia.

Kōnae nama tuawha. rā/wā/ tohuwā

He rereke ano nga momo ra/wa. Ka titiro tatou ki a raatau. Tukua ahau kia rahui i tenei wa ka marama etahi o nga ahuatanga o te whanonga mena ka marama koe ki te ngako o te mahi me nga rohe waahi. Engari he kaupapa ano tenei mo te tuhinga motuhake.

Kaore au i te marama

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

Te ahua nei he aha te mea e kore e marama i konei? Engari kare ano te paataka korero i te marama he aha ta tatou i tuu tuatahi ki konei—te tau, te ra ranei? Na ka whakatau ia ko te Hanuere 99, 2008, e pupuhi ana tona hinengaro. I te nuinga o te korero, i te wa e tuku ana i nga ra i roto i te whakatakotoranga tuhinga, me ata tirotiro koe i te tika o te mohiotanga o te papaaarangi ki a raatau (otira, tātarihia te tawhā datestyle me te whakahau SHOW datestyle), na te mea ka nui te utu o te rangirua o tenei take.

No hea mai tenei?

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

He aha te take i kore ai e marama ki te putunga raraunga te wa kua tohua? No te mea karekau he whakapototanga o te rohe wa, engari he ingoa katoa, e whai tikanga ana i roto i te horopaki o te ra, na te mea ka whai whakaaro ki te hitori o nga huringa rohe wa, a kaore e mahi me te kore ra. A, ko nga kupu o te rarangi wa ka puta ake nga patai - he aha te tino tikanga o te kaiwhakaputa? Na reira, he arorau nga mea katoa i konei, mena ka tirohia e koe.

He aha te he ki a ia?

Whakaarohia te ahuatanga. He āpure kei tō tēpu me te momo waitohuwā. Kei te pirangi koe ki te tohu tohu. Engari kei te mohio koe ko te hanga i tetahi taurangi i runga i tenei mara kaore i te tika i nga wa katoa na te nui o te kowhiringa (tata ki nga uara katoa o tenei momo ka motuhake). Na ka whakatau koe ki te whakaiti i te whiriwhiringa o te taurangi ma te maka i te momo ki tetahi ra. Na ka whiwhi koe i te ohorere:

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

He aha te take? Ko te meka ko te ki te maka i te momo timestamptz ki te momo ra, ka whakamahia te uara o te tawhā pūnaha TimeZone, e ti'aturi ai te mahi huri momo ki te tawhā ritenga, i.e. karekau. Ko enei mahi kaore e whakaaetia i roto i te taurangi. I roto i tenei take, me tino whakaatu koe ko tehea rohe wa ka mahia te momo maka.

Inaianei kaore ano inaianei

Kua waia matou inaianei() te whakahoki i te ra/wa o naianei, me te whakaaro ki te rohe wa. Engari tirohia nga patai e whai ake 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;

Ko te ra/wa ka whakahokia mai ano ahakoa te roa o te wa kua pahemo mai i te tono o mua! He aha te take? Ko te mea ko tenei () ehara i te waa o naianei, engari ko te wa tiimata o te tauwhitinga o naianei. Na reira, e kore e huri i roto i te tauwhitinga. Ko nga patai ka tukuna ki waho o te awheawhe o te tauwhitinga ka takaia ki roto i te tauwhitinga, na reira kaore matou e kite kua whakahokia mai te wa e te KOREUTU ngawari inaianei(); i roto i te meka, ehara i te mea o naianei ... Ki te hiahia koe ki te tiki i te wa pono o naianei, me whakamahi koe i te mahi clock_timestamp().

Kōnae nama rima. moka

He paku kee

SELECT '111'::bit(4)

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

Ko tehea taha me tapiri nga moka ki te momo toronga? Ko te ahua kei te taha maui. Engari ko te turanga anake he whakaaro rereke mo tenei take. Kia tupato: ki te kore e taurite te maha o nga mati i te wa e maka ana i tetahi momo, kaore koe e whiwhi i to hiahia. E pa ana tenei ki te taapiri i nga moka ki te taha matau me te whakapai i nga paraka. Kei te taha matau ano...

Kōnae nama tuaono. Huanga

Ahakoa ko NULL kaore i pupuhi

SELECT ARRAY[1, 2] || NULL

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

I te mea he tangata noa i whakaara ake i runga i te SQL, e tumanako ana matou ko te hua o tenei korero he NULL. Engari kaore i reira. Ka whakahokia mai he huānga. He aha? Na te mea i tenei keehi ka makahia e te turanga te NULL ki te huinga tauoti me te kii i te mahi array_cat. Engari kei te noho marama tonu he aha tenei "ngeru ngeru" kaore i te tautuhi i te raupapa. Me maumahara noa tenei whanonga.

Whakarāpopoto. He maha nga mea rereke. Ko te nuinga o ratou, ko te tikanga, ehara i te mea tino nui ki te korero mo te whanonga kore tika. Ko etahi atu ka whakamaramahia ma te ngawari o te whakamahi, te auau ranei o to raatau tono i etahi ahuatanga. Engari i te wa ano, he maha nga mea ohorere. No reira, me mohio koe ki a raatau. Mena ka kitea e koe tetahi mea rereke, rereke ranei i roto i nga ahuatanga o tetahi momo, tuhia ki roto i nga korero, ka koa ahau ki te taapiri atu ki nga tuhinga kei runga i a raatau.

Source: will.com

Tāpiri i te kōrero