å€ãã®äººã¯ããããäžãããã®ãæŒ ç¶ãšããç解ããŠããªããšããäºå®ã®ããããçèããããè¿·èµ°ãã«åãæ¿ããããšãæããŠããŸãã äžéšã®äººã ã¯ãPostgresã¯ããããããŸãã«ãè€éã§ããã¬ãŒãã³ã°ãå¿ èŠã§ãããšããèãã«ãšããããŠããŸãã ãŸãã移è¡ã«äŒŽãäœãã倱ãããå¯èœæ§ããããŸãã ç¶æ³ãå°ãæ確ã«ããããšæããŸãã
äžè¬çã«èšãã°ã誰ããè€éããæããŠããå Žåãåå¿è ã¯éåžžã®ããã«ã§ããŸããæ°æ©èœã䜿çšããã«ãMySQLããPostgreSQLã«ããã ãã¹ã€ããããŸãã SQL-ã¢ããªã«SQLã«ããããŸãããã±ããç§åŠã§ã¯ãããŸããã ãã®ç§»è¡ã§ã¯ãïŒããããããã°ã©ãã³ã°ã§ã¯ïŒè€éãªããšã¯äœããããŸããã ããŠãåŒçšç¬Šã¯ç°ãªããŸãããæ§æã¯å°ãå³å¯ã§ãã ã€ãŸã pgãmysqlãšããŠäœ¿çšããä»ã®åŒçšç¬Šãä»ããŠéå§ãããã¬ã€ã®é²è¡ãšãšãã«åŠç¿ããŸãã
ããŠãäžæ¹ã«ã¯ããããä»æ¹ã«ã¯ãªãããŸãã¯ãã®éã«ã€ããŠã ãã³ã®çš®é¡ãç解ããã ãã¡ãããããã¯å®å šãªãªã¹ãã§ã¯ãªããéèŠåºŠã§äžŠã¹æ¿ããããŠããããã§ã¯ãããŸããããããã§ããªã䞊ã¹ãããŠããŸãã
ããããçèã«ã¯ãªã眪ã®æ¬ ç¹ããå§ããŸãããã
- é²è¡äžã®å®çšŒåç°å¢ã§äœæ¥ããã«ã¯ãå°éçã«ã»ããã¢ããããå¿ èŠããããŸãã shared_buffersãèªåããã¥ãŒã èšå®ãªã©ãæ£ããèšå®ããªããšãæ·±å»ãªè² è·ã®äžã§ãã¹ãŠããã£ãããšåäœããŸãã ç¹ã«åä»ãªã®ã¯ãé«è² è·ãããžã§ã¯ãã®å Žåãã»ãšãã©åžžã«pgbouncerïŒããã¯ãµãŒãããŒãã£ã®éçºïŒãå¿ èŠãªããšã§ããããã«ããããã¥ãŒã«æ¥ç¶ãèç©ãããé²è¡ç¶æ³èªäœãžã®æ¥ç¶æ°ãå¶éãããŸãã ãããpostgresèªäœã«çµã¿èŸŒãŸããŠããªãã®ã¯å¥åŠã§ã
- èªåããã¥ãŒã ã ç°¡åã«èšãã°ãæžã蟌ã¿/åé€ã®é«éåãå®çŸããããã«ãããã°ã¬ãã·ã§ã³ã¯ã¬ããŒãžã®å±±ãæ®ãããã®åŸãç¹å¥ã«èšç·ŽãããããŒã¢ã³ã«ãã£ãŠã¯ãªãŒã³ã¢ãããããŸãã ç¹ã«éåžžã«å¿ããããŒã¹ã§èªåããã¥ãŒã ãèšå®ããããæãè ããªãã«ãããããã®ãééã£ãŠããå ŽåãããŒãã«ãå ããå Žæãèšãã¿ãé ããæ©ãããè©°ãŸãããŸãã¯èšããããšãªããè©°ãŸãå¯èœæ§ã®ãããã®ãã¹ãŠãè©°ãŸããããŒã¹ãåã«ç«ã¡äžããããšãã§ããŸããã©ã³ã¶ã¯ã·ã§ã³IDãçµäºããŸããã åäŒè°ã§ã¯ã誰ããã©ã®ããã«èªåããã¥ãŒã ã§è±éçã«æŠã£ãŠåã£ããã«ã€ããŠã®3-4ã®ã¬ããŒãããããŸãã
- æè¿ãŸã§ãINSERT IGNOREããã³INSERT ON DUPLICATE KEY UPDATEã¯ãããŸããã§ããã 9.5ãããã¢ããã°ãç»å ŽããŸããã 誰ããå¿ èŠãšãããããªæ©èœã®å®è£ ã«é·ãéåŒãããããŠããããšã¯éåžžã«å¥åŠã§ãã
- Mysqlã§ã¯ãã¯ãšãªå
ã®å€æ°ãçŽæ¥æäœã§ããŸãã
SELECT @xïŒ= 0; SELECT @xïŒ= @ x + 1 FROMããŒãã«;
é²è¡äžã®ãã®ãããªããšã¯ãããŸãããå°ãªããšãç§ã¯ãããèŠã€ããŸããã§ããïŒããªããééããå Žåã«æžããŠãã ããïŒã ã€ãŸãããã¡ãããäœã§ãã§ããã¹ãã¬ãŒãžãäœæããããšã¯ã§ããŸããããªã¯ãšã¹ãã«å¿ããŠé©åã«äœæããããšã¯ã§ããŸããã - éåžžã®phpmyadminã«å¯Ÿå¿ãããã®ã¯ãããŸããã å®éãç§ãç¥ã£ãŠããã¯ãŒã«ãªååã®ã»ãšãã©ã¯ãæåã¯æ £ããã®ãé£ããã³ãã³ãã©ã€ã³ã§SQLã䜿çšããŠããŸãã ããããããããçš®é¡ã®pgMyAdminãªã©ããããŸãããããããã«äœããã®æ¬ é¥ããããŸãã ãã¶ãè¯ãææã®ãã®ãããã®ã§ãç§ã¯ãã§ãã¯ããŸããã§ããã
- Mysqlã¯èª°ããç¥ã£ãŠãããpostgresqlã¯èª°ãç¥ããªãã ãããã£ãŠãå€ãã®å Žåãæ°ãããããžã§ã¯ãã¯postgresqlã§éå§ããããšãæããŠããŸãã ãããŒã¿ããŒã¹ããšããèšèãšmysqlãšããèšèããŸã£ããåãå矩èªã§ãããPHPããã°ã©ããŒã®ã¯ã©ã¹ããããŸãã ã€ãŸã 圌ããè²æ®»ãäœãããæãåºãããšã¯ã©ããããããå°é£ã§ãã
- 圌ãã¯ãå®äŸ¡ãªãã¹ãã£ã³ã°ã¯ç®¡çãããé£ããã®ã§ãpostgresqlãæ¬åœã«å¥œãã§ã¯ãªããšèšããŸãã ããšãã°ãpostgresã«ãã°ã€ã³ã§ãããŠãŒã¶ãŒãäœæããã«ã¯ãsqlã¯ãšãªãå®è¡ããŠpg_hba.confã«æžã蟌ããšãã2ã€ã®å Žæã§ãããè¡ãå¿ èŠããããŸãã
çŸæç¹ã§mysqlãšæ¯èŒããå Žåã®æ¬ ç¹ã®ãã¡ã ä»ã«äœãç¹å¥ãªããšãç¥ã£ãŠããå Žåãmysqlã«ãããã®ãšpostgresqlã«ãªããã®ãã³ã¡ã³ãã§æžããŸãã ããã§ãpostgresqlã®å©ç¹ïŒ
- CTEïŒå
±éããŒãã«åŒïŒ
ç°¡åãªæ¹æ³ã§èª¬æãããšããµãã¯ãšãªãåå¥ã«èšè¿°ããŠãååãä»ããããŒã¿ããŒã¹ãžã®åäžã¯ãšãªã®ãã¬ãŒã ã¯ãŒã¯å ã§ããããã¹ãŠãèšè¿°ããããšãã§ããŸãã äŸãã°
WITH subquery1 ASïŒ éžæ... JOIN ... JOIN ... GROUP BY .... ïŒã subquery2 ASïŒ éžæ... WHERE .... ïŒ éžæ* FROM subquery1 JOINãµãã¯ãšãª2 ãªã³...
ååä»ããµãã¯ãšãªããªããŠããçµåããã³ãµãã¯ãšãªãã©ã±ããã䜿çšããŠé è³å šäœãå£ãããšãã§ãããéåžžã«è€éãªã¯ãšãªã«ã¯éåžžã«äŸ¿å©ã§ãã ãã¡ãããããã©ãŒãã³ã¹ã«ã¯å€ãã®åŸ®åŠãªéãããããŸãããããã§ãéåžžã«äŸ¿å©ã§ãã ããã¯MySQLã«ã¯ãããŸããã ãšããã§ãCTEã®ãµãã¯ãšãªã¯ååž°çã«äœ¿çšã§ããŸããããšãã°ããidãparent_idããšãã圢åŒã®ããŒãã«ã®ãµãããªãŒå šäœãååŸã§ããŸãã - IPã¢ãã¬ã¹ãæäœããŸãã ããšãã°ãip-addressã§éœåž/åœããã°ããç¹å®ããå¿
èŠããããŸãã
ããã§ã¯ãé²è¡äžã«ã«ã¹ã¿ã ããŒã¿åãããããããã®åã§åäœããæŒç®åããããããšãèšããªããã°ãªããŸããã äžéšã¯èªåã§è¡ãããšãã§ããäžéšã¯åç·ã«æ¡åŒµæ©èœãè¿œå ããããšã§ååŸã§ããŸãã ããšãã°ã次ã®ãããªããšãã§ããip4ræ¡åŒµããããŸãã
-IPç¯å²ãæã€ããŒãã«ãäœæãã ããŒãã«ip_rangesïŒ ip_range ip4r ïŒ; ip_rangesã«æ¿å ¥ããŸã å€ ïŒ '2.2.3.4-2.2.3.10'ïŒã ïŒ '1.2.0.0/16'ïŒ;
ããã§ã&&æŒç®åã䜿çšããŠãæå®ãããipãšââ亀差ããç¯å²ã®ãªã¹ããååŸã§ããŸãã
test => select * from ip_ranges where ip_range && '1.2.1.1'; ip_range ------------ 1.2.0.0/16 ïŒ1è¡ïŒ
ããŒããŸã§ã¯ä»ã®æŒç®åããããŸãïŒäºãã®ç¯å²ãªã©ãæ€çŽ¢ãéåžžã«é«éã«ããããã«ãç¹å¥ãªGISTã€ã³ããã¯ã¹ãäœæã§ããŸãã
CREATE INDEX ip_ranges_idx ON ip_ranges USING GISTïŒip_rangeïŒ;
ãããŠã倧éã®ããŒã¿ã§ããã¹ãŠããé£ã¶ãã ãã§ãã mysqlã§ãããè¡ãæ¹æ³ã¯æ³åã§ããŸããããããããããã€ãã®æ¹æ³ããããŸããïŒ - ããŸããŸãªå¶çŽãã€ãŸã æŽåæ§ã®ããã®ããŒã¿ããŒã¹ã®å¶çŽã MySQLã«ã¯UNIQUEãNOT NULLãFOREIGN KEYãªã©ããããŸãã ããããããã¯ã©ãã§ããïŒ
åã®äŸã®ããŒãã«ãå€æŽããŸãã
ALTER TABLE ip_ranges å¶çŽã®è¿œå ip_ranges_exclude GISTã䜿çšããŠé€å€ïŒip_range WITH &&ïŒ;
ãã®ãšã³ããªã«ãããããŒãã«å ã®IPç¯å²ã®ã¿ãäºãã«äº€å·®ããªãããšãä¿èšŒãããŸãã IPã®äžéšããã§ã«ããŒãã«ã«å«ãŸããŠããç¯å²ãæ¿å ¥ããããšãããšãäžæ£äœ¿çšãçºçããŸãã
ãã¹ã=> ip_rangeså€ã«æ¿å ¥ïŒ '1.2.3.4/32'ïŒ; ãšã©ãŒïŒããŒå€ã®ç«¶åãé€å€å¶çŽãip_ranges_excludeãã«éåããŠããŸã 詳现ïŒããŒïŒip_rangeïŒ=ïŒ1.2.3.4ïŒã¯æ¢åã®ããŒïŒip_rangeïŒ=ïŒ1.2.0.0/16ïŒãšç«¶åããŸãã
åæ§ã«ãããšãã°circleããŒã¿åã䜿çšããŠãäºãã«çŽ ãªåãããŒãã«ã«ä¿åãããŠããããšã確èªã§ããŸãã ã¡ãªã¿ã«ãããã€ãã®å¹ŸäœåŠã¿ã€ããšãããã䜿çšããæäœã¯ãæšæºé ä¿¡ã«çŽæ¥çµã¿èŸŒãŸããŠããŸãïŒåãããã¯ã¹ãå€è§åœ¢ãªã©ã
å¥ã®äŸ¿å©ãªå¶çŽïŒ
ããŒãã«ååã®äœæïŒ id bigintã äŸ¡æ Œã®å°æ°ïŒ11,2ïŒã ... ãã§ãã¯ïŒprice> = 0.01ïŒ ïŒ
ãŸãã誀ã£ãŠãŒãäŸ¡æ Œã®è£œåãããã«æ¿å ¥ããããšã¯ãããŸããã ãã¡ããããã§ãã¯å ã®æ¡ä»¶ã¯ã©ãã§ãããŸããŸããã - ææ°ããŒãžã§ã³ã®sgresã®ãã©ãŒæ©èœã¯jsonbã¿ã€ãã§ãããã«ãããžã§ã€ãœã³ã§éåžžã«è¿ éã«æ€çŽ¢ã§ããŸãã ãã®ããšã«ã€ããŠã®2çªç®ã®èšäºã§ã¯ããã¹ãŠã®è³ãã¬ã©ã¬ã©ããŠããã®ã§ã詳ããã¯èª¬æããŸããã
- ããããããŠã£ã³ããŠé¢æ°ãã ããšãã°ããµãã¯ãšãªãšã°ã«ãŒãåã䜿çšããã«ãåŸæ¥å¡ããšã«åœŒã®çµŠäžãšåãè¡ã®éšéã®å¹³å絊äžãé
ãå¿
èŠããããŸãã
éžæ depnameã empnoã 絊æ å¹³åïŒçµŠäžïŒãªãŒããŒïŒdepnameã«ããããŒãã£ã·ã§ã³ïŒ FROM empsalary; depname | empno | 絊äž| å¹³å ----------- + ------- + -------- + --------------------- - éçºãã| 11 | 5200 | 5020.0000000000000000 éçºãã| 7 | 4200 | 5020.0000000000000000 éçºãã| 9 | 4500 | 5020.0000000000000000 éçºãã| 8 | 6000 | 5020.0000000000000000 éçºãã| 10 | 5200 | 5020.0000000000000000 人äº| 5 | 3500 | 3700.0000000000000000 人äº| 2 | 3900 | 3700.0000000000000000 販売| 3 | 4800 | 4866.666666666666666667 販売| 1 | 5000 | 4866.666666666666666667 販売| 4 | 4800 | 4866.666666666666666667 ïŒ10è¡ïŒ
ãŠã£ã³ããŠé¢æ°ã䜿çšãããšãã¿ã¹ã¯ã®ã¯ã©ã¹å šäœãç°¡çŽ åã§ããŸããããšãã°ãåæãè«æ±ã«éåžžã«åœ¹ç«ã¡ãŸãã - ã¹ãã¢ãããã·ãŒãžã£ã¯ãããŸããŸãªèšèªã§äœæã§ããŸããpuresqlãpl / pgsqlïŒSQLããŒã¹ã§ã®äœæ¥ã«äŸ¿å©ã§ãããé ãïŒãjavascriptïŒpl / v8ïŒãçç ã§ãç¥ã¯ä»ã®ããšãç¥ã£ãŠããŸãã siãç¥ã£ãŠããŠãããªãç±å¿ãªå Žåã¯ã奜ããªèšèªãçš®ç¡éŠ¬ã«æ·»ä»ããããšãã§ããŸãã ããã¯pgdayã§è©³çŽ°ã«è°è«ãããŸããã ç§ã®æèŠã§ã¯ãpostgresqlã§ã¯ãä¿åããããã¡ã€ã«ã®èšèªã§ã¯ãã¹ãŠãããã»ã©ã¹ã ãŒãºã§ã¯ãããŸããããmysqlããã100ååªããŠããŸãã
- ãã£ãŒã«ãã ãã§ãªãããã£ãŒã«ãã®é¢æ°ã«ãã£ãŠãã€ã³ããã¯ã¹ãäœæã§ããŸãã
- ã¬ããªã±ãŒã·ã§ã³ïŒãããã¹ã¿ã³ãã€ïŒã¯è³¢æã«è¡ãããŸãã è¿ éãã€äžè²«ããŠæ©èœããŸãã
- ã¹ããŒãã ç§ã®äž»èŠ³çãªæèŠã«ãããšãç§ã¯äž¡æ¹ã®ããŒã¿ããŒã¹ã§é·å¹ŽåããŠãããããPostgresqlå
šäœã¯MySQLãããã¯ããã«é«éã§ãã æã
ã æ¿å
¥ãšèªã¿åãã®äž¡æ¹ã ãã¡ãããæ£ããæ§æãããŠããã°ã
ããã¯ãmysqlãåã«åŠçã§ããªãè€éãªã¯ãšãªãå®è¡ããäžæããŒãã«ããã§ã³ã¹ããå¿ èŠãããå Žåã«ç¹ã«åœãŠã¯ãŸããŸãã - ãã¹ãŠã®å³ããã mysqlã§ã¯ãå³å¯ãªããã©ã«ãã¢ãŒãã®ã¿ã5.7ã§äœæãããããã§ãïŒãã§ãã¯ããŸããã§ãããæ¬åœã«ããã§ããïŒïŒã ããã«å ç«ã¡ã10é²æ°ïŒ5,2ïŒåã®ãã£ãŒã«ãã«äœçœ®ãã倧ããæ°å€ãæ¿å ¥ããããšãå¯èœã§ããããã®çµæãéãã«999.99ãååŸããŸããã ç·ãªã©ã®ãµã€ã¬ã³ãããªãã³ã° ãã®ãããªåè«ã¯éããããŸãã ãããããã©ã«ãã®åäœã§ãã Postgresqlã¯éªšãšåªãããããŸããããããŸããªèŠæ±ãéãã«å®è¡ããŸããã
- ãã©ã³ã¶ã¯ã·ã§ã³ã CREATE TABLEãALTER TABLEãªã©ã¯ãåçŽãªã¯ãšãªãšåæ§ã«ãåäžã®ãã©ã³ã¶ã¯ã·ã§ã³ã§å®è¡ããããäœãåé¡ãããå Žåã¯éäžã§ãã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ããã¯ãããã§ããŸãã æéãçµãŠã°ããããªãã§mysqlã䜿çšããæ¹æ³ãç解ã§ããªããªããŸãã
- ããã«äœ¿çšã§ããå šææ€çŽ¢ã ããã§ãç§ã®æèŠã§ã¯ãæ§æã¯æ®éã®äººã«ã¯å°ãçããã§ããããã¹ãŠãæ©èœããã¹ãã£ã³ã¯ã¹ã®ãããªãµãŒãããŒãã£ã®ã¬ãžã§ãããæ¥ç¶ããå¿ èŠã¯ãããŸããã
- ã·ãŒã±ã³ã¹ mysqlã§ã¯ãããŒãã«ãã£ãŒã«ãããšã«AUTO_INCREMENTã®ã¿ããããäžåºŠã«1ã€ãã€ãã§ãã¯ãããŸãã postgresqlã§ã¯ããã®ã¡ã«ããºã ã¯ããŒãã«ãšã¯ç¬ç«ããŠååšããããŸããŸãªããŒãºã«äœ¿çšã§ããŸããããã«ãã«ãŒãã§äœæããããšãã§ããŸãã
- DBAã¯postgresqlãã¡ã€ã³ã®ãã©ã³ã¶ã¯ã·ã§ã³ãã·ã³ãšèŠãªããŠããããã§ãã ããã«ãããã©ã³ã¶ã¯ã·ã§ã³ã¯æ·±ããããŸãçµã¿èŸŒãŸããŠãããããæ¿å ¥ãšèªã¿åãã®äž¡æ¹ã§ããã¹ãŠãè¿ éãã€ç¢ºå®ã«æ©èœããŸãã mysqlã§ã¯ãã·ã¹ãã ãç°ãªããããŒã¹ããããåå¥ã®ãšã³ãžã³ïŒinnodbãmyisamãªã©ïŒãããããšã³ãžã³ã¯ãã¹ãŠãã©ã³ã¶ã¯ã·ã§ã³ã§ã¯ãããŸããã ãã®ãã©ã³ã¶ã¯ã·ã§ã³ã®åé¢ã«ã¯ããã€ãã®åé¡ããããŸãã ããšãã°ãmyisamã¯ãã©ã³ã¶ã¯ã·ã§ã³ã§ã¯ãªããinnodbã¯ãã©ã³ã¶ã¯ã·ã§ã³ã§ãããåãã¯ãšãªã§äž¡æ¹ã®ããŒãã«ã䜿çšã§ããŸãã åºå°ãåæã«ã©ã®ããã«æ©èœããããäºæž¬ããããšã¯æ³å®ããŠããŸãããããããå°é£ã§æŸèæã§ãã
- 䞻芳çã«ãpostgresqlã®ãã°ã¯å°ãªãã§ãã 圌ããã©ã®ããã«ãããéæããŠãããã¯ããããŸããããç§ã«ãšã£ãŠããã¯äºå®ã§ã-éåžžã«å®å®ããä¿¡é Œæ§ã®é«ãã·ã¹ãã ã§ãããéãè² è·ãšããŒã¿éã®äžã§ãã
ããã¯HabrïŒãµã³ãããã¯ã¹ïŒã«é¢ããç§ã®æåã®æçš¿ãªã®ã§ã匷ãã建èšçã«æ¹å€ããŠãã ããã
ãããã®ããŒã¹ã®ç¹å®ã®å©ç¹ãšæ¬ ç¹ã¯äœã§ããïŒ ã³ã¡ã³ããæžããŠãã ããã