
PostgreSQLãæäœããããã®äŸ¿å©ãªããªãã¯ãå
±æããããšæããŸãïŒä»ã®DBMSã«ã¯åæ§ã®æ©èœããããŸãããæ§æãç°ãªãå ŽåããããŸãïŒã
ç¹å®ã®æ©èœã®è©³çްãªèª¬æãæãäžããªãããã«ããªãããããŒã¿ãæ±ããšãã«åœ¹ç«ã€å€ãã®ãããã¯ãšãã¯ããã¯ãã«ããŒããããšããŸãã ç§ã¯èªåã§åŠãã§ãããšãã«ãããã®èšäºã倧奜ãã§ããã
ç¡æã®ã€ã³ã¿ãŒãããç¬åŠã«æ¬æã衚ã ãèªåã®èšäº
ãæžãæ
ãæ¥ãŸãã ã
ãã®è³æã¯ãSQLã®åºæ¬çãªã¹ãã«ãå®å
šã«ãã¹ã¿ãŒããããã«åŠç¿ããã人ã«åœ¹ç«ã¡ãŸãã
pgAdmin 'eã®äŸãå®è¡ããŠå®éšããããšããå§ãããŸãããã³ããå±éããã«ãã¹ãŠã®SQLã¯ãšãªãå®è¡å¯èœã«ããŸããã
è¡ããïŒ
1.äžæããŒãã«ã®äœ¿çš
è€éãªåé¡ã解決ãããšãããœãªã¥ãŒã·ã§ã³ã1ã€ã®ãªã¯ãšã¹ãã«å
¥ããããšã¯å°é£ã§ãïŒå€ãã®äººãããããããšããŸãïŒã ãã®ãããªå Žåãå°æ¥ã®äœ¿çšã«åããŠãäžæããŒã¿ãäžéããŒãã«ã«é
眮ãããšäŸ¿å©ã§ãã
ãã®ãããªããŒãã«ã¯éåžžã©ããäœæãããŸããã
TEMPããŒã¯ãŒãã䜿çšããŠãã»ãã·ã§ã³ã®çµäºåŸã«èªåçã«åé€ãããŸãã
ON COMMIT DROPããŒã¯ããã©ã³ã¶ã¯ã·ã§ã³ãå®äºãããšããŒãã«ïŒããã³ããã«é¢é£ä»ããããŠãããã¹ãŠã®ãªããžã§ã¯ãïŒãèªåçã«åé€ããŸãã
äŸïŒROLLBACK; BEGIN; CREATE TEMP TABLE my_fist_temp_table
2.é »ç¹ã«äœ¿çšãããççž®Postgresæ§æ
åŒïŒ
SELECT CAST ('365' AS INT);
é¢åã§ã¯ãªãããã«æžãããšãã§ããŸãïŒ
SELECT '365'::INT;
- ç¥èšæ³ïŒIïŒLIKE 'ïŒ
textïŒ
'
LIKEã¯
ãã³ãã¬ãŒãåŒãåãå
¥ã
ãŸã ã
ããã¥ã¢ã«ã®è©³çް
LIKEæŒç®åã¯
~~ ïŒ2ã€ã®ãã«ãïŒã«çœ®ãæããããšãã§ããŸã
ILIKEæŒç®åã¯
~~ * ïŒã¢ã¹ã¿ãªã¹ã¯ä»ãã®2ã€ã®ãã«ãïŒã«çœ®ãæããããšãã§ããŸã
æ£èŠè¡šçŸæ€çŽ¢ïŒLIKEãšã¯ç°ãªãæ§æã䜿çšïŒ
æŒç®å
ã ïŒ1ã€ã®ãã«ãïŒã¯æ£èŠè¡šçŸãåãå
¥ããŸã
æŒç®å
ã* ïŒ1ã€ã®ãã«ããšã¢ã¹ã¿ãªã¹ã¯ïŒå€§æåãšå°æåãåºå¥ããªãããŒãžã§ã³
ãåèª
ããã¹ããå«ãæååãããŸããŸãªæ¹æ³ã§æ€çŽ¢ããäŸã瀺ã
ãŸãççž®æ§æ | 説æ | ã¢ããã°ïŒIïŒLIKE |
---|
ã 'ããã¹ã' ãŸã㯠~~ 'ïŒ
textïŒ
' | 倧æåãšå°æåãåºå¥ããåŒãæ€èšŒããŸã | LIKE 'ïŒ
textïŒ
' |
ã* 'ããã¹ã' ~~ * 'ïŒ
textïŒ
' | 倧æåãšå°æåãåºå¥ããªãåŒããã§ãã¯ããŸã | ILIKE 'ïŒ
textïŒ
' |
ïŒã 'ããã¹ã' ïŒ~~ 'ïŒ
textïŒ
' | 倧æåãšå°æåãåºå¥ããªãåŒããã§ãã¯ããŸã | ãïŒ
textïŒ
ãã®ããã§ã¯ãªã |
ïŒã* 'ããã¹ã' ïŒ~~ * 'ïŒ
textïŒ
' | 倧æåãšå°æåãåºå¥ããªãåŒã確èªãã | ããªã 'ïŒ
textïŒ
' |
3.äžè¬çãªããŒãã«åŒïŒCTEïŒã WITHå¥
éåžžã«äŸ¿å©ãªèšèšã«ãããã¯ãšãªçµæãäžæããŒãã«ã«å
¥ããŠããã«äœ¿çšã§ããŸãã
äŸã¯èŠç¹ãã€ããããã«åå§çã§ãã
aïŒåçŽãª
SELECT WITH cte_table_name AS (
ãã®ããã«ããŠãä»»æã®ã¯ãšãªïŒ
UPDATEãDELETE ã
INSERTãªã©ïŒããã©ããããããããã®çµæãå°æ¥äœ¿çšããããšãã§ããŸãã
bïŒæ¬¡ã®ããã«ãªã¹ãããããšã«ãããè€æ°ã®ããŒãã«ãäœæã§ããŸãã
WITH table_1 (col,b) AS (SELECT 1,1),
cïŒäžèšã®æ§æãããã«å¥ã®ïŒãŸãã¯ãã以äžã®ïŒWITHã«åã蟌ãããšãã§ããŸãã
WITH super_with (col,b,c) AS ( WITH table_1 (col,b) AS (SELECT 1,1), table_2 (col,c) AS (SELECT 2,2) SELECT * FROM table_1 FULL JOIN table_2 USING (col)
ããã©ãŒãã³ã¹ã®èгç¹ããããªããã£ãã€ã¶ãŒã¯å¹æçãªã¯ãšãªãäœæã§ããªããããåŸç¶ã®å€éšæ¡ä»¶ïŒã¯ãšãªãã©ã±ããã®å€åŽïŒã«ãã£ãŠå€§ãããã£ã«ã¿ãªã³ã°ãããããŒã¿ã
WITHã»ã¯ã·ã§ã³ã«é
眮ããªãã§ãã ããã äœåºŠãã¢ã¯ã»ã¹ããå¿
èŠã
ããçµæã
CTEã«å
¥åããã®ãæã䟿å©ã§ãã
4.颿°array_aggïŒMyColumnïŒã
ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã®å€ã¯åå¥ã«æ ŒçŽãããŸãïŒ1ã€ã®ãªããžã§ã¯ãã®å±æ§ã¯è€æ°ã®è¡ã§è¡šãããšãã§ããŸãïŒã ã¢ããªã±ãŒã·ã§ã³ã«ããŒã¿ã転éããã«ã¯ãå€ãã®å Žåã1è¡ïŒã»ã«ïŒãŸãã¯é
åã§ããŒã¿ãåéããå¿
èŠããããŸãã
PostgreSQLã«ã¯ããã®ããã®
array_aggïŒïŒé¢æ°ããããåå
šäœããããŒã¿ãåéããŠé
åã«å
¥ããããšãã§ããŸãïŒéžæç¯å²ã1åã®å ŽåïŒã
GROUP BYã䜿çšãããšãåã°ã«ãŒãã«é¢é£ããåã®ããŒã¿ãé
åã«å
¥ããŸãã
ããã«å¥ã®æ©èœã説æããäŸã«é²ã¿ãŸãã
array_to_stringïŒarray []ã ';'ïŒã䜿çšãããšãé
åãæååã«å€æã§ããŸã
ãæåã®ãã©ã¡ãŒã¿ãŒã¯é
åã瀺ãã2çªç®ã¯åäžåŒçšç¬ŠïŒã¢ãã¹ãããã£ïŒã§åºåããã䟿å©ãªåºåãæåã§ãã ã»ãã¬ãŒã¿ãšããŠäœ¿çšã§ããŸã
ç¹æ®æåTab \ t-ããšãã°ãã»ã«ãEXCELã«æ¿å
¥ãããšããå€ãåã«ç°¡åã«åå²ã§ããŸãïŒããã䜿çšïŒ array_to_stringïŒarray []ãE '\ t'ïŒ ïŒ
æ¹è¡\ n-é
åã®å€ã1ã€ã®ã»ã«ã®è¡ã«åè§£ããŸãïŒããã䜿çšïŒ array_to_stringïŒarray []ãE '\ n'ïŒ -çç±ã以äžã«èª¬æããŸãïŒ
äŸïŒ
çµæãçæããŸãïŒ

éã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸãã
UNNEST颿°ã䜿çšããŠé
åãè¡ã«åè§£ããåæã«
SELECTåINTO table_nameã³ã³ã¹ãã©ã¯ãã瀺ããŸãã èšäºãããŸãèšããŸãªãããã«ãããããã¿ãã¬ã«å
¥ããŸããã
UNNESTãªã¯ãšã¹ã
çµæïŒ

5.ããŒã¯ãŒãRETURNIG *
INSERTãUPDATEããŸãã¯
DELETEã¯ãšãªã®åŸã«æå®ãããšã倿Žã®åœ±é¿ãåããè¡ã確èªã§ããŸãïŒéåžžããµãŒããŒã¯å€æŽãããè¡ã®æ°ã®ã¿ãå ±åããŸãïŒã
çµæãšããŠäžç¢ºå®ãªå ŽåããŸãã¯
IDãæ¬¡ã®ã¹ãããã«è»¢éããå Žåã
BEGINãšçµã¿åãããŠããªã¯ãšã¹ããæ£ç¢ºã«äœã«åœ±é¿ããã
ã確èªãããšäŸ¿å©ã§ãã
äŸïŒ
ã¯ã¬ã€ãžãŒãªäŸãæŽçããŠã
CTEãšçµã¿åãããŠäœ¿çšââã§ããŸãã
PSç§ã¯éåžžã«æ··ä¹±ããŸããããããé£ããããšãããã£ãã®ã§ãããç§ã¯ãã¹ãŠã«ã€ããŠã³ã¡ã³ãããããšããŸããã
ãããã£ãŠãããŒã¿ã®åé€ãå®è¡ãããåé€ãããå€ã¯æ¬¡ã®ã¹ããŒãžã«è»¢éãããŸãã ããã¯ãã¹ãŠããªãã®æ³ååãšç®æšã«äŸåããŸãã è€éãªèšèšãé©çšããåã«ãDBMSã®ããŒãžã§ã³ã®ããã¥ã¡ã³ããå¿
ã確èªããŠãã ããïŒ ïŒINSERTãUPDATEããŸãã¯DELETEã䞊è¡ããŠçµã¿åãããå Žåã埮åŠãªç¹ããããŸãïŒ
6.ã¯ãšãªçµæããã¡ã€ã«ã«ä¿åãã
COPYããŒã ã«ã¯ããŸããŸãªãã©ã¡ãŒã¿ãŒãšç®çããããŸããæ
£ããããã®æãç°¡åãªã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠèª¬æããŸãã
COPY ( SELECT * FROM pg_stat_activity
7.å¥ã®ããŒã¹ã§ã®ãªã¯ãšã¹ãã®å±¥è¡
å°ãåã«ããªã¯ãšã¹ããå¥ã®ããŒã¿ããŒã¹ã«ã¢ãã¬ã¹ããããšãã§ããããšãåŠã³ãŸãããããã«ã¯dblink颿°ããããŸãïŒ
詳现ã¯ããã¥ã¢ã«ã«èšèŒãããŠããŸã ïŒ
äŸïŒ
SELECT * FROM dblink( 'host=localhost user=postgres dbname=postgres', 'SELECT '' : '' || current_database()' ) RETURNS (col_name TEXT) UNION ALL SELECT ' : ' || current_database();

ãšã©ãŒãçºçããå ŽåïŒ
ããšã©ãŒïŒé¢æ°dblinkïŒäžæãäžæïŒãååšããŸããã
次ã®ã³ãã³ãã§æ¡åŒµæ©èœãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã
CREATE EXTENSION dblink;
8.颿°ã®é¡äŒŒæ§
ããå€ãšå¥ã®å€ã®é¡äŒŒæ§ã倿ããæ©èœã
䌌ãŠãããäºãã«çãããªãïŒå
¥åãã¹ããã£ãïŒããã¹ãããŒã¿ãæ¯èŒããããã«äœ¿çšãããŸãã æäœæ¥ã«ãããã€ã³ãã£ã³ã°ãæå°éã«æããå€ãã®æéãšç¥çµãç¯çŽããŸããã
é¡äŒŒåºŠïŒaãbïŒã¯ã0ãã1ãŸã§ã®å°æ°ãæäŸãã1ã«è¿ãã»ã©ãããæ£ç¢ºã«äžèŽããŸãã
äŸã«ç§»ããŸãããã
WITHã䜿çšããŠ
ãæ¶ç©ºã®ããŒã¿ïŒããã³æ©èœã瀺ãããã«ç¹å¥ã«ã¯ãŒãïŒã䜿çšããŠäžæããŒãã«
ãç·šæããåè¡ãããã¹ããšæ¯èŒããŸãã 以äžã®äŸã§ã¯ã
LLCâ ROMASHKAâã®ããã«èŠãããã®ãæ¢ããŸãïŒ2çªç®ã®ãã©ã¡ãŒã¿ãŒã«é¢æ°ãã©ã¡ãŒã¿ãŒã代å
¥ããŸãïŒã
WITH company (id,c_name) AS ( VALUES (1, ' ') UNION ALL VALUES (2, ' ""') UNION ALL VALUES (3, ' ') UNION ALL VALUES (4, ' ""') UNION ALL VALUES (5, ' ') UNION ALL VALUES (6, ' ') UNION ALL VALUES (7, ' ') UNION ALL VALUES (8, 'ZAO ') UNION ALL VALUES (9, ' ?') UNION ALL VALUES (10, ' 33') UNION ALL VALUES (11, ' ""') UNION ALL VALUES (12, ' " "') UNION ALL VALUES (13, ' " "') ) SELECT *, similarity(c_name, ' ""') ,dense_rank() OVER (ORDER BY similarity(c_name, ' ""') DESC) AS " "
次ã®çµæãåŸãããŸãã

ãšã©ãŒãçºçããå Žå
ããšã©ãŒïŒé¢æ°ã®é¡äŒŒæ§ïŒäžæãäžæïŒãååšããŸããã
次ã®ã³ãã³ãã§æ¡åŒµæ©èœãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã
CREATE EXTENSION pg_trgm;
ããè€éãªäŸ WITH company (id,c_name) AS (
次ã®çµæãåŸãããŸãã

é¡äŒŒåºŠDESCã§ãœãŒãããŸãã æåã®çµæã«ã¯ãæãé¡äŒŒããè¡ã衚瀺ãããŸãïŒ1-å®å
šãªé¡äŒŒæ§ïŒã
SELECTã§
é¡äŒŒåºŠã®å€ã衚瀺ããå¿
èŠã¯ãããŸãããWHEREæ¡ä»¶ã®é¡äŒŒåºŠïŒc_nameã 'ROMASHKA LLC'ïŒã§äœ¿çšã§ããŸã> 0.7
ãããŠãç§ãã¡ã«åã£ããã©ã¡ãŒã¿ãŒãèšå®ããŸãã
PSããã¹ãããŒã¿ãæ¯èŒããä»ã®æ¹æ³ãæããŠããã ããã°å¹žãã§ãã æ£èŠè¡šçŸã§æå/æ°åãé€ããã¹ãŠãåé€ããããšããŸããããå¹³çã«äžèŽããŸããããã¿ã€ããã¹ãååšããå Žåããã®ãªãã·ã§ã³ã¯æ©èœããŸããã
9.ãŠã£ã³ããŠé¢æ°OVERïŒïŒïŒPARTITION BY __ ORDER BY __ïŒ
ãã©ããã§ãã®éåžžã«åŒ·åãªããŒã«ãã»ãŒèª¬æããåŸã圌ã¯
ïŒæ²ãã¿ãšåã³ã§ïŒãã®äž»é¡ã«é¢ãããã®ãããªé«å質ã®èšäºããã§ã«ååšããããšãçºèŠããŸããã æ
å ±ãè€è£œããçç±ã¯ãããŸããããããã£ãŠãSQLãŠã£ã³ããŠé¢æ°ã®äœ¿ç𿹿³ããŸã ããããªã人ã®ããã«ããã®èšäºïŒãªã³ã¯
-habrahabr.ru/post/268983/ ãèè
ãžã®
è¬èŸ ïŒã«ç²Ÿéããããšããå§ãããŸãã
10. LIKEã®è€æ°ãã³ãã¬ãŒã
ãã£ã¬ã³ãžã ååãç¹å®ã®ãã¿ãŒã³ã«äžèŽããå¿
èŠããããŠãŒã¶ãŒã®ãªã¹ãããã£ã«ã¿ãªã³ã°ããå¿
èŠããããŸãã
ãã€ãã®ããã«ãæãç°¡åãªäŸã瀺ããŸãã
ãã®æ©èœãæããã¯ãšãªããããŸããã倿°ã®ãã£ã«ã¿ãŒã䜿çšãããšé¢åã«ãªããŸãã
SELECT * FROM users_tst WHERE u_name LIKE '%' OR u_name LIKE '%%' OR u_name LIKE ' .' OR u_name LIKE '%'
ããã³ã³ãã¯ãã«ããæ¹æ³ã瀺ããŸãã
SELECT * FROM users_tst WHERE u_name LIKE ANY (ARRAY['%', '%%', ' .', '%'])
åæ§ã®ã¢ãããŒãã䜿çšããŠãè峿·±ãããªãã¯ãè¡ãããšãã§ããŸãã
å
ã®ãªã¯ãšã¹ããä»ã«æžãçŽãæ¹æ³ãããã°ãã³ã¡ã³ãã«æžããŠãã ããã
11.ããã€ãã®äŸ¿å©ãªæ©èœ
NULLIFïŒaãbïŒç¹å®ã®å€ãNULLãšããŠæ±ãå¿
èŠãããå ŽåããããŸãã
ããšãã°ãé·ãããŒãã®æååïŒ ''ã¯ç©ºã®æååïŒãŸãã¯ãŒãïŒ0ïŒã§ãã
CASEãèšè¿°ã§ããŸããã2ã€ã®ãã©ã¡ãŒã¿ãŒãæã€NULLIF颿°ã䜿çšããæ¹ãç°¡æœã§ããçããå Žåã¯NULLãè¿ããããã§ãªãå Žåã¯å
ã®å€ã衚瀺ããŸãã
SELECT id ,param ,CASE WHEN param = 0 THEN NULL ELSE param END
COALESCEã¯æåã®éNULLå€ãéžæããŸã
SELECT COALESCE(NULL,NULL,-20,1,NULL,-7);
GREATESTã¯ãªã¹ãããæå€§å€ãéžæããŸã
SELECT GREATEST(2,1,NULL,5,7,4,-9);
LEASTã¯ãªã¹ããããŠããæå°å€ãéžæããŸã
SELECT LEAST(2,1,NULL,5,7,4,-9);
PG_TYPEOFã¯åã®ããŒã¿åã瀺ããŸã
SELECT pg_typeof(id), pg_typeof(arr), pg_typeof(NULL) FROM (VALUES ('1'::SMALLINT, array[1,2,'3',3.5])) AS x(id,arr);
PG_CANCEL_BACKENDã¯ãããŒã¿ããŒã¹å
ã®äžèŠãªããã»ã¹ã忢ããŸã
SELECT pid, query, * FROM pg_stat_activity
ããã¥ã¢ã«ã®è©³çް
PS SELECT pg_cancel_backend(pid) FROM pg_stat_activity
泚æïŒ KILL -9ã³ã³ãœãŒã«ãŸãã¯ã¿ã¹ã¯ãããŒãžã£ãŒã䜿çšããŠãåçµãããããã»ã¹ã匷å¶çµäºããªãã§ãã ããã
ããã¯ãããŒã¿ããŒã¹ã®ã¯ã©ãã·ã¥ãããŒã¿ã®æå€±ãé·æéã®èªåããŒã¿ããŒã¹å埩ã«ã€ãªããå¯èœæ§ããããŸãã
12.ãšã¹ã±ãŒãæå
åºæ¬ããå§ããŸãããã
SQLã§ã¯ãæååå€ã¯
'ã¢ãã¹ãããã£ïŒåäžåŒçšç¬ŠïŒã§å²ãŸããŠããŸãã
æ°å€ãã¢ãã¹ãããã£ã§å²ãããšã¯ã§ããŸããããå°æ°éšåãåé¢ããã«ã¯ããããã䜿çšããå¿
èŠããããŸãã ã³ã³ãã¯ã»ãã¬ãŒã¿ãšããŠèªèãããŸã
SELECT ' ', 365, 567.6, 567,6
çµæïŒ

ã¢ãã¹ãããã£èšå·èªäœã衚瀺ããå¿
èŠããããŸã§ã¯ããã¹ãŠé 調ã§ã
ããããè¡ãã«ã¯ã2ã€ã®ã·ãŒã«ãæ¹æ³ããããŸãïŒç§ã«ã¯ç¥ãããŠããŸãïŒ
SELECT 1, ' '' '''' '
çµæã¯åãã§ãïŒ
PostgreSQLã«ã¯ãæåããšã¹ã±ãŒãããã«ããŒã¿ã䜿çšãããã䟿å©ãªæ¹æ³ããããŸãã 2ã€ã®ãã«èšå·
$$ã§å²ãŸããè¡ã«ã¯ãã»ãŒãã¹ãŠã®æåã䜿çšã§ããŸãã
äŸïŒ
select $$ '' ', E'\' $$
å
ã®åœ¢åŒã§ããŒã¿ãååŸããŸãã

ããã ãã§ã¯äžååã§ãå
éšã§2ã€ã®ãã«èšå·ãé£ç¶ããŠ
$$ã§äœ¿çšãããå ŽåãPostgresã§ã¯ç¬èªã®ããªããã¿ãŒããèšå®ã§ããŸãã ããšãã°ã次ã®ããã«2ãã«ã®éã«ç¬èªã®ããã¹ããæžãã ãã§ãã
select $uniq_tAg$ '' ', E'\', $$ $any_text$ $uniq_tAg$
ããã¹ãã衚瀺ãããŸãã

ç§èªèº«ã«ãšã£ãŠããã®æ¹æ³ã¯ã颿°ã®èšè¿°ãç ç©¶ãå§ããå°ãåã«çºèŠãããŸããã
ãããã«
ãã®è³æãåå¿è
ãã調åè
ãã«ãšã£ãŠå€ãã®æ°ããããšãåŠã¶ã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã ç§èªèº«ã¯éçºè
ã§ã¯ãããŸããããç§ã¯èªåèªèº«ãSQLã®æäººãšããåŒã¹ãŸããããã®ããã説æããææ³ãã©ã®ããã«äœ¿çšãããã¯ããªã次第ã§ãã
SQLã®åŠç¿ãæåããããšãé¡ã£ãŠããŸãã ã³ã¡ã³ããåŸ
ã£ãŠãèªãã§ãããŠããããšãïŒ
UPD ã€ã¥ã