å
é±ã®æ¥ãªvaranio㯠ãMySQLã䜿çšããŠPosgresã«ç§»è¡ãããããŸã æ°ããããŒã¿ããŒã¹ãå®å
šã«ã¯äœ¿çšããŠããªããã¹ãŠã®äººã®ããã®DevConfã®ããã ããŒã«ã¬ããŒããèªã¿ãŸããã ã¹ããŒãã«åºã¥ããŠããã®åºçç©ãèªçããŸããã
PG Day'17 Russiaã®æºåãæ¬æ Œåããããšããç¥ããããããŸãã ä»åŸã®ã€ãã³ãã®å®å
šãªã¹ã±ãžã¥ãŒã«ãå
¬éããŸããã ã¢ã³ãã³ãšäžç·ã«å人çã«ãªã©ãã¯ã¹ããŠãã ãã

DevConfã®ã¬ããŒãã¯äžè¬ã«å¥œæçãªã¬ãã¥ãŒãåŒãèµ·ããããããäœããã®çç±ã§äŒè°ã«åå ã§ããªãã£ã人åãã®èšäºãšããŠçºè¡ããããšã«ããŸããã
ãªããã®ãããªã¬ããŒãã®ã¢ã€ãã¢ãæãã€ããã®ã§ããïŒ äºå®ãPostgreSQLã¯æããã«èªå€§åºåãã¯ãããžãŒã§ãããå€ãããã®DBMSã«åãæ¿ããŠããŸãã æã«ã¯-客芳çãªçç±ã§ãæã«ã¯-åã«ãããæµè¡ããŠããããã§ãã
ããããæ¡ä»¶ä»ãããã°ã©ããŒã®äžéšã®Vasyaãæšæ¥MySQLã§æžããä»æ¥ã圌ã¯Posgresã§çªç¶æžãå§ããŸããã 圌ã¯ã©ãæžãïŒ ã¯ããäžè¬ã«ã以åãšåæ§ã«ãæ°ããããŒã¹ã®æå°éã®æ©èœã»ããã®ã¿ã䜿çšããŸãã å®è·µã§ã¯ãDBMSãã»ãŒå®å
šã«äœ¿çšããå§ãããŸã§ã«å¹Žãçµéããããšã瀺ãããŠããŸãã
ããªããŒã§ã¯ãªã
ããã«å
責äºé
ïŒããã¯çè察é²è¡ã«ã€ããŠã®èšäºã§ã¯ãããŸããã ãªã³ãŸãã¯ãªãã«è¡ãããšã¯ããªãã®ããžãã¹ã§ãã ããšãã°ãUberã¯äœããã®çç±ã§MySQLã«åãæ¿ããŸããã
Oracleã¯ç§°è³ãããªããã°ãªããŸããã圌ãã¯æããã«MySQLãæ£ããæ¹åã«åãããŠããŸãã 5.7ã§ã¯ãããã©ã«ãã§å³æ Œã¢ãŒããäœæãããŸããã 8çªç®ã®ããŒãžã§ã³ã§ã¯ãCTEãšãŠã£ã³ããŠé¢æ°ãçŽæããã·ã¹ãã ããŒãã«ã®MyISAMãšã³ãžã³ãåé€ããŸãã ã€ãŸã ããŒã¿ããŒã¹ã«ãªãœãŒã¹ãæè³ãããŠããããšã¯æããã§ããããŠã£ãã·ã¥ãªã¹ãã®ãŠãŒã¶ãŒã¯éåžžã«çå£ã«ç 究ãããŠããŸãã
ãã ããPostgreSQLã«ã¯ãŸã ç¬èªã®æ©èœããããããããŸãã ãã®çµæãç§ã¯éçºè
ã®ããã«ããŒã¹ã®æ©èœã®ç°¡åãªæŠèŠãäœæããããšããŸããã
çµã¿èŸŒã¿ããŒã¿å
éåžžã®æ°å€ãšæååã«å ããŠãå€ãã®ã¿ã€ãã®ããŒã¿ãããŒã¿ããŒã¹ã«çµã¿èŸŒãŸããŠããŸãã åæ§ã«åœŒãã®çžäºäœçšã®ããã®æŒç®åã
ããšãã°ãipã¢ãã¬ã¹ãæäœããããã®cidrãinetãmacaddrã¿ã€ãããããŸãã
ãŸãã¯ãããšãã°ãã¿ã€ã ãŸãŒã³ïŒã¿ã€ã ã¹ã¿ã³ãïŒãæéééãªã©ã®æé
ãã®ã¹ã©ã€ããæºåããŠãããšããç§ã¯å¥œå¥å¿ãã100幎åã®1917幎ã«UTCãšæ¯èŒããæéã®ãªãã»ããã確èªããããšæ±ºããŸããã
select '1917-06-17 00:00:00 UTC' at time zone 'Europe/Moscow';
ã€ãŸã çœé²æ¯ã¯UTC + 02ïŒ31ïŒ19ã«äœãã§ãã
äžèšã«å ããŠãUUIDãJSONBãXMLããããæååãªã©ãä»ã®çµã¿èŸŒã¿ããŒã¿åããããŸãã
åé
å
ãããšã¯å¥ã«ããé
åãã®ã¿ã€ããèæ
®ããŠãã ããã é
åã¯é·ããPostgreSQLã«ããŸãçµ±åãããŠããŸãã å€æ¬¡å
é
åãã¹ã©ã€ã¹ã亀差æŒç®åãçµåãªã© é
åãæäœããããã®å€ãã®é¢æ°ããããŸãã
é
åãšåŒã°ããéåžžã«äŸ¿å©ãªé¢æ°ããããŸãã åŒæ°ãšããŠãåºåã§SELECTãªã¯ãšã¹ããæäŸãããŸã-ãªã¯ãšã¹ãã¯ãªã¯ãšã¹ãã®çµæãé
åã®åœ¢ã§æäŸããŸãã
éé¢æ°ããããŸãïŒãã¹ã解é€ã 圌女ã¯é
åãåãåãããªã¯ãšã¹ãã®çµæãšããŠãããè¿ããŸãã ããã¯ãããšãã°ãç°ãªãIDãæã€è€æ°ã®åäžã®ã¬ã³ãŒããæåã§æ¿å
¥ããå¿
èŠãããããã³ããŒãšè²Œãä»ããè¡ããããªãå Žåã«äŸ¿å©ã§ãã
INSERT INTO users (id, status, added_at) SELECT user_id, 5, '2010-03-03 10:56:40' FROM unnest(array[123, 1232, 534, 233, 100500]) as u(user_id)
ç¬èªã®ã¿ã€ããäœæãã
ã«ã¹ã¿ã ã¿ã€ãã¯3ã€ã®æ¹æ³ã§äœæã§ããŸãã ãŸããCèšèªãç¥ã£ãŠããå Žåã¯ãintãŸãã¯varcharãšãšãã«åºæ¬åãäœæã§ããŸãã ããã¥ã¢ã«ã®äŸïŒ
CREATE TYPE box ( INTERNALLENGTH = 16, INPUT = my_box_in_function, OUTPUT = my_box_out_function );
ã€ãŸã cstringããåãäœæã§ããé¢æ°ãšããã®éã®é¢æ°ãäœæããŸãã 次ã«ããã®åããããšãã°ããŒãã«å®£èšã§äœ¿çšã§ããŸãã
CREATE TABLE myboxes ( id integer, description box );
2çªç®ã®æ¹æ³ã¯è€ååã§ãã ããšãã°ãè€çŽ æ°ãä¿åããã«ã¯ïŒ
CREATE TYPE complex AS ( r double precision, i double precision );
ãããŠãããã䜿çšããŸãïŒ
CREATE TABLE math ( result complex ); INSERT INTO math (result) VALUES ((0.5, -0.6)::complex); SELECT (result).i FROM math;
äœæã§ãã3çªç®ã®çš®é¡ã®ã¿ã€ãã¯ããã¡ã€ã³ã¿ã€ãã§ãã ãã¡ã€ã³ã¿ã€ãã¯ãç°ãªãååãæã€æ¢åã®ã¿ã€ãã®åãªããšã€ãªã¢ã¹ã§ãã ããžãã¹ããžãã¯ã«äžèŽããååã
CREATE DOMAIN us_postal_code AS TEXT;
us_postal_codeã¯ãããã€ãã®æœè±¡çãªããã¹ããvarcharãããã»ãã³ãã£ãã¯ã§ãã
ç¬èªã®ãªãã¬ãŒã¿ãŒãäœæãã
ç¬èªã®æŒç®åãå®è¡ã§ããŸãã ããšãã°ãè€çŽ æ°ã®è¿œå ïŒäžèšã®è€çŽ æ°åãå®çŸ©ããŸããïŒïŒ
åå€æã®ã«ã¹ã¿ã ã«ãŒã«ãäœæãã
ç空ã®äŸã§çç¶ã«ããŸãããã ã¿ã€ãRURãšUSDãããã³1ã€ã®ã¿ã€ããå¥ã®ã¿ã€ãã«å€æããã«ãŒã«ãäœæããŸãã ç§ã¯siãããç¥ããªãã®ã§ãããšãã°åçŽãªè€ååãäœæããŸãã
CREATE TYPE USD AS ( sum FLOAT ); CREATE TYPE RUR AS ( sum FLOAT );
å®éãããã§ãã¹ãŠã§ãã䜿çšã§ããããã«ãªããŸããã ã«ãŒãã«ã«ã¯100ãã«ãããããããŸããïŒ
select '(100.0)'::usd::rur;
çµæã¯æ¬¡ã®ããã«ãªããŸãã
rur -------- (6000) (1 row)
PostgreSQLæ¡åŒµæ©èœã®ã¿ã€ã
ããŒã¿åãšãããã«å¿
èŠãªãã¹ãŠãèšè¿°ãããŠããæ¡åŒµæ©èœããããŸãã ããšãã°ãIPã¢ãã¬ã¹ã®ã¿ã€ããšãã®ç¯å²ãèšè¿°ããip4r
æ¡åŒµã
ãœãŒã¹https://github.com/RhodiumToad/ip4r/blob/master/ip4r--2.2.sqlãèŠããšãå®éã«ã¯ãæ¡åŒµæ©èœã¯CREATE TYPE
ã CREATE OPERATOR
ã CREATE CAST
äžé£ã®åœä»€ã§ããããšãããããŸãããªã©
ã€ã³ããã¯ã¹ä»ãã«ãŒã«ã«ã€ããŠèª¬æããŸãã ããšãã°ã ip4r
ã¿ã€ãïŒIPã¢ãã¬ã¹ç¯å²ïŒã¯ã &&
æŒç®åïŒããã³ãã®ä»ïŒã®GISTã€ã³ããã¯ã¹ã§ã€ã³ããã¯ã¹ä»ãã§ããŸãã ãããã£ãŠãIPã§éœåžãæ€çŽ¢ããããã®ããŒãã«ãäœæã§ããŸãã
ãŸãã¯ãããšãã°ã uri
æ¡åŒµæ©èœããããŸããããã«ããããªã³ã¯ãä¿åã§ããã¿ã€ãã«ãªããåç·ãŸãã¯ãã¹ããç°¡åã«åŒãåºãããšãã§ããŸãïŒãŸã éçšç°å¢ã§è©ŠããŠããªãã®ã§ãäºå®ããŠããŸãïŒã
ææ°
æšæºã®btree
å ããŠã GIN
ïŒjsonbãå
šææ€çŽ¢ãªã©ã®é
åã®äžéšã®æäœã«äœ¿çšå¯èœïŒã GIST
ã brin
ãªã©ããããŸãã
éšåã€ã³ããã¯ã¹
ããŒãã«ã«1,000äžè¡ããç¶æ³ãããããã®ãã¡100åã ããã¹ããŒã¿ã¹ãæ¯æåŠçäžããªã©ã§ããå ŽåããããŸãã ãããŠãããªãã¯åžžã«ãã®ãããªãåŠçäžãã¹ããŒã¿ã¹ãåŒãåºããŸãïŒ select ... where status = 2
ã
ããã«ã€ã³ããã¯ã¹ãå¿
èŠã§ããããšã¯æããã§ãã ãããããã®ãããªã€ã³ããã¯ã¹ã¯å€ãã®ã¹ããŒã¹ãå æããŸãããå®éã«ã¯éåžžã«å°ããªéšåãå¿
èŠã§ãã
é²è¡äžãããŒãã«å
šäœã§ã¯ãªããç¹å®ã®æ¡ä»¶ã§å®çŸ©ãããè¡ã«å¯ŸããŠã€ã³ããã¯ã¹ãäœæã§ããŸãã
CREATE INDEX my_money_status_idx on my_money(status) WHERE status = 2;
ãã®ã€ã³ããã¯ã¹ã¯select * from my_money where status = 2
ã¯ãšãªã§ãããšåæã«ãã¹ããŒã¹ãã»ãšãã©å æããŸããã
åŒã€ã³ããã¯ã¹
é²è¡äžãã€ã³ããã¯ã¹ã¯1ã€ã®åã§ã¯ãªããä»»æã®åŒã§äœæã§ããŸãã ããšãã°ãå§ãšåã®ã€ã³ããã¯ã¹ãäœæã§ããŸãã
CREATE INDEX people_names ON people ((first_name || ' ' || last_name));
ãããŠããã®ãããªã¯ãšãªã¯ããã«åäœããŸãïŒ
SELECT * FROM people WHERE (first_name || ' ' || last_name) = 'John Smith';
å¶çŽ
æšæºã®UNIQUEããã³NOT NULLã«å ããŠãä»ã®æŽåæ§ãã§ãã¯ãããŒã¿ããŒã¹ã§å®è¡ã§ããŸãã ãã¡ã€ã³ã¿ã€ãã§ã¯ããã§ãã¯ãæžãããšãã§ããŸãïŒ
CREATE DOMAIN us_postal_code AS TEXT CHECK( VALUE ~ '^\d{5}$' OR VALUE ~ '^\d{5}-\d{4}$' );
5æ¡ãŸãã¯5æ¡ããã€ãã³ã4æ¡ã®ã¿ãus_postal_codeã®ãããªåã«åé¡ãããããšã確èªããŸãã ãã¡ãããããã§ã¯ã¬ã®ã¥ã©ãŒã ãã§ãªããä»ã®æ¡ä»¶ãäœæã§ããŸãã
ãŸããè¡šã«ãã§ãã¯ãæžãããšãã§ããŸãã
CREATE TABLE users ( id integer, name text, email text, CHECK (length(name) >= 1 AND length(name) <= 300) );
ã€ãŸã ååã«ã¯å°ãªããšã1æåã300æå以äžãå¿
èŠã§ãã
äžè¬çã«ãåèªäœãç¹å®ã®å¶éã§ãããããŒã¿ããŒã¹ãè¡ãè¿œå ã®ãã§ãã¯ã§ãã ããšãã°ãæ¬è³ªçã«2ã€ã®æ°å€ã§æ§æãããè€ååïŒäžèšãåç
§ïŒãããå Žåãããã«èª€ã£ãŠæååãæ¿å
¥ããããšã¯ãããŸããã
INSERT INTO math (result) VALUES ((0.5, '')::complex); ERROR: invalid input syntax for type double precision: ""
ãã®ãããjsonã§ã¯äœã§ãè©°ã蟌ãããšãã§ãããããjsonbãããè€ååã®æ¹ãæãŸããå ŽåããããŸãã
è¡šçŸã®éšåçãªäžææ§ãšäžææ§
UNIQUEããŒãŸãã¯PRIMARY KEYã®åçŽãªäžææ§ãšã¯ç°ãªããæ¡ä»¶ã§æå®ãããç¹å®ã®æååã»ããéã§é²è¡ãäžæã«ããããšãã§ããŸãã ããšãã°ãé»åã¡ãŒã«ã¯éãªã¢ãŒããŠãŒã¶ãŒéã§äžæã§ããå¿
èŠããããŸãã
CREATE UNIQUE INDEX users_unique_idx ON users(email) WHERE deleted = false;
ãã1ã€ã®é¢çœãããšã¯ã1ã€ã®ãã£ãŒã«ãã§ã¯ãªããä»»æã®è¡šçŸã«ãã£ãŠäžææ§ãå®çŸã§ããããšã§ãã ããšãã°ãããŒãã«å
ã§2ã€ã®åã®åèšãç¹°ãè¿ãããªãããã«ããããšãã§ããŸãã
CREATE TABLE test_summ ( a INT, b INT ); CREATE UNIQUE INDEX test_summ_unique_idx ON test_summ ((a + b)); INSERT INTO test_summ VALUES (1, 2); INSERT INTO test_summ VALUES (3, 0);
å¶çŽé€å€
EXCLUDEããŒã¯ãŒãã䜿çšãããšãè¡ãæ¿å
¥ãŸãã¯æŽæ°ãããšãã«ãæå®ããæŒç®åã«ãã£ãŠãã®è¡ãä»ã®è¡ãšæ¯èŒãããããã«ã§ããŸãã ããšãã°ãäºãã«çŽ ãªIPç¯å²ãå«ãããŒãã«ïŒ &&
亀差æŒç®åã«ãã£ãŠãã§ãã¯ãããŸãïŒïŒ
CREATE TABLE ip_ranges ( ip_range ip4r, EXCLUDE USING gist (ip_range WITH &&) );
äžè¬ã«ãéåžžã®UNIQUEã¯ã =
æŒç®åãå«ãEXCLUDEã§ãã
ã¹ãã¢ãããã·ãŒãžã£
ã¹ãã¢ãããã·ãŒãžã£ã¯ãSQLãpl / pgsqlãjavascriptãïŒpl / v8ïŒãpythonãªã©ã§èšè¿°ã§ããŸãã ããšãã°ãRèšèªã§ããã€ãã®çµ±èšãèšç®ãããã®çµæã®ã°ã©ããè¿ãããšãã§ããŸãã
ããã¯å¥ã®å€§ããªãããã¯ã§ãããã®ããŒãã«é¢ããIvan Panchenkoã®ã¬ããŒããæ¢ãããšããå§ãããŸãã
CTEïŒå
±éããŒãã«åŒïŒ
ããã¯MySQL 8ã«å«ãŸããŸãããããã§ãç°¡åã«èª¬æããŸãã
CTEã¯ç°¡åã§ãã ãªã¯ãšã¹ãã®äžéšãåãåºããŠãååãä»ããŠåå¥ã«åãåºããŸãã
WITH subquery1 AS ( SELECT ...
ã¯ãšãªæé©åã®èŠ³ç¹ããããã®ãããªåCTEãµãã¯ãšãªã¯åå¥ã«å®è¡ãããããšã«çæããå¿
èŠããããŸãã ããã¯ãã©ã¹ãšãã€ãã¹ã®äž¡æ¹ã«ããããšãã§ããŸãã
ããšãã°ããµãã¯ãšãªãšã°ã«ãŒãåã«ãã20ã®çµåãããå Žåãã¯ãšãªãã©ã³ããŒã¯æå³ãç解ã§ããªãå¯èœæ§ããããã¯ãšãªãã©ã³ã¯æé©ã§ã¯ãããŸããã ãã®åŸããªã¯ãšã¹ãã®äžéšãcteãµãã¯ãšãªã«é
眮ããæ®ããã¡ã€ã³ãªã¯ãšã¹ãã§ãã£ã«ã¿ãªã³ã°ã§ããŸãã
éã«ãèªã¿ãããããããã ãã«CTEã§ãªã¯ãšã¹ãã®äžéšãäœæããããšã«ããå Žåã¯ã暪åãã«ãªãããšããããŸãã
CTEã§ã¯ãSELECTã¯ãšãªã ãã§ãªããUPDATEã䜿çšã§ããŸãã
äŸïŒå¹Žéœ¢ã20æ³ä»¥äžã®ãŠãŒã¶ãŒãæŽæ°ããåããªã¯ãšã¹ãã§ãæŽæ°ããããŠãŒã¶ãŒã®ååãšãã®åœãè¿ããŸãã
with users_updated AS ( UPDATE users SET status = 4 WHERE age > 20 RETURNING id ) SELECT name, country FROM users JOIN countries ON users.country_id = countries.id WHERE id IN ( SELECT id FROM users_updated );
ããããããã§ã¯ãCTEã®å©ããåããŠãæã«ã¯èªåã®è¶³ã§ããŸãæã€ããšãã§ããããšãç解ããå¿
èŠããããŸãã
ãã®ãããªã¯ãšãªã¯æ§æçã«æ£ããã§ãããæå³ã¯å®å
šã«ãã³ã»ã³ã¹ã§ãïŒ
WITH update1 AS ( UPDATE test SET money = money + 1 ), update2 AS ( UPDATE test SET money = money - 1 ) SELECT money FROM test;
ã«ãŒãã«ãè¿œå ããŠããã«ãŒãã«ãåãé€ããããã§ããã¹ãŠããã®ãŸãŸæ®ã£ãŠããã¯ãã§ãã
ããããå®éã«ã¯ãupdate1ãšupdate2ãå®è¡ãããšãããŒãã«ã®åæããŒãžã§ã³ãã€ãŸã å®éã1ã€ã®æŽæ°ãä»ã®æŽæ°ãäžæžãããããšãããããŸããã ãã®ãããCTEå
ã§ã®æŽæ°ã§ã¯ãäœãããŠããŠããªããªã®ããæ£ç¢ºã«ç¥ãå¿
èŠããããŸãã
ãŠã£ã³ããŠé¢æ°
ãŠã£ã³ããŠé¢æ°ã«ã€ããŠã¯ã https ïŒ //habrahabr.ru/post/268983/ã«è©³çŽ°ãæžããŸããã ãŠã£ã³ããŠé¢æ°ã¯MySQL 8ã§ãçŽæãããŠããŸãã
éå€
ãã£ã«ã¿ãŒ
é¢æ°ïŒCOUNTãSUMãªã©ïŒãéçŽããã«ã¯ãFILTERæ¡ä»¶ãè¿œå ã§ããŸãã ãã¹ãŠã®è¡ãéçŽããã®ã§ã¯ãªããç¹å®ã®åŒã®ã¿ã«å¶éããŸãã
SELECT count(*) FILTER (WHERE age > 20) AS old, count(*) FILTER (WHERE age <= 20) AS young FROM users;
ã€ãŸã 20æ³ä»¥äžã®äººãš20æ³æªæºã®äººãã«ãŠã³ãããŸããã
\èŠã
psqlã«ã¯ãããŸããŸãªãªããžã§ã¯ãã衚瀺ããããã®ã³ãã³ãïŒ \d
ã \dt+
ãªã©ïŒãããããšã¯èª°ããç¥ã£ãŠããŸãã
\watch
ãšåŒã°ããç¹å¥ãªã³ãã³ãããããŸãã ã€ãŸã ãªã¯ãšã¹ããå®è¡ããŠãããæžã蟌ã¿ãŸã
\watch 5
ã§ããã£ã³ã»ã«ããããŸã§ãªã¯ãšã¹ãã¯5ç§ããšã«å®è¡ãããŸãã
ããã¯selectã ãã§ãªããããšãã°updateã®ãããªä»ã®ãã¹ãŠã®å Žåã«ãæ©èœããŸãïŒããšãã°ã倧ããªããŒãã«ãå°ãã ãæŽæ°ããå¿
èŠãããå ŽåïŒã
ãããªã¢ã©ã€ãºããã¥ãŒ
ããã¯ãã¥ãŒã®ãããªãã®ã§ããã£ãã·ã¥ãããïŒå®äœåãããïŒã ãã§ãã ãã£ãã·ã¥ã¯ãREFRESH MATERIALIZED VIEWã³ãã³ãã䜿çšããŠæŽæ°ã§ããŸãã æŽæ°æã«PostgresãSELECTã¯ãšãªãæŽæ°ããªãããã«ããCONCURRENTLYããŒã¯ãŒãããããŸãã
èã/éç¥ãã
ç§ã¯ãŸã æ¬çªç°å¢ã§ãããè©ŠããŠããªãã®ã§ããããå®éã«é©çšå¯èœãã©ããã¯ããããŸããïŒèª°ãã䜿çšããå Žåãã³ã¡ã³ãã§çµéšãå
±æããŠãã ããïŒã äžçªäžã®è¡ã¯ãããçš®ã®ã€ãã³ãããµãã¹ã¯ã©ã€ãã§ããããšã§ãããŸããextã䜿çšããŠè¡ãéä¿¡ããªãããã€ãã³ããçºçããããšããµãã¹ã¯ã©ã€ããŒã«éç¥ããããšãã§ããŸãã æ
å ±ã
Fdw
å€éšããŒã¿ã©ãããŒã¡ã«ããºã ã䜿çšãããšãåçŽãªããŒãã«ãªã©ã®å€éšããŒã¿ã䜿çšã§ããŸãã ã€ãŸã ããšãã°ãpostgresããŒãã«ãmuscleããŒãã«ãcsvãã¡ã€ã«ãçµåã§ããŸãã
ã·ãŒã±ã³ã¹
SEQUENCEã¯ãMySQL AUTO_INCREMENTã®ãã¹ããŽãŒã¹ãã¢ããã°ã§ãã MySQLãšã¯ç°ãªããã·ãŒã±ã³ã¹ã¯ããŒãã«ãšã¯å¥åã«ããŸãã¯ãã®éã«ãäžåºŠã«è€æ°ã®ããŒãã«ãããã£ãã¯ãããããšãã§ããŸãã å¢åãµã€ãºãã«ãŒããªã©ãããŸããŸãªãã©ã¡ãŒã¿ãŒãèšå®ã§ããŸãã
çµè«ã®ä»£ããã«
ããã¯ãå®éã«ã¯æ°·å±±ã®äžè§ã§ãã ãã¹ãŠã®èšäºãäžè¶³ããŠããããããŸã èšäºã«ã¯èšèŒãããŠããªããã¥ã¢ã³ã¹ããããããããŸãã ã¹ãã¢ãããã·ãŒãžã£ã ãã§æ¬ãæžãããšãã§ããŸãã ãŸãã¯ãããšãã°ãçŸåšã®ããŒãžã§ã³ã®sqlã³ãã³ãã®å®å
šãªãªã¹ããã芧ãã ãã ïŒ https : //www.postgresql.org/docs/9.6/static/sql-commands.html
ç§ããã®èšäºã§èŠãããã£ãäž»ãªãã®ïŒèªå€§å®£äŒã«ãããããããPostgreSQLã¯éåžžã«å€ãDBMSã§ãããå€ãã®ãã®ããããéåžžã«ããŸãæ¡åŒµãããŠããŸãã ãããã£ãŠãMySQLããããã«åãæ¿ãããšãã¯ãããã¥ã¢ã«ãèªãã ããèšäºãèªãã ãããããšããå§ãããŸãã