¹èÄ¡¸¦ Çϳª µ¹¸®°í Àִµ¥ deadlock °ü·Ã ¿¡·¯°¡ ¹ß»ýÇؼ Áú¹®µå·Áº¾´Ï´Ù.
ERROR (GeneratorIbatisSession.java:118) {}
com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in META-INF/ibatis/StdDiary.xml
--- The error occurred while applying a parameter map.
--- Check the StdDiary.upsertStdDiaryDtl-InlineParameterMap.
--- Check the statement (update failed).
--- Cause: java.sql.SQLException: ERROR: deadlock detected
Detail: Process 18617 waits for ShareLock on transaction 2340166; blocked by process 18639.
Process 18639 waits for ShareLock on transaction 2340165; 2340165; blocked by process 18617.
Hint: See server log for query details.
ÀÌ·± ¿¡·¯°¡ ¹ß»ýÇÏ°í Àִµ¥¿ä.
¹èÄ¡°¡ upsert ÇÏ´Â Å×ÀÌºí µ¥ÀÌÅ͸¦ ½Ï ³¯¸®°í Çѹø µ¹¸®¸é ¹®Á¦¾øÀÌ Àß µé¾î°¡°í¿ä.
(ÃÖÃÊ insert ¹× ±× ÈÄ µ¥Àϸ® Ãß°¡ insert ´Â ¹®Á¦ ¾øÀ½.)
±Ùµ¥ upsert(update) ÇÒ ¶§ °ü·Ã ¿¡·¯°¡ ¹ß»ýÇϴ°Š°°Àºµ¥ ¿øÀÎÀ» Àß ¸ð¸£°Ú½À´Ï´Ù.
upsert ¸¦ Çϴµ¥ ÀÌ·± ¿¡·¯°¡ ¹ß»ýÇÒ ¼ö ÀÖ³ª¿ä?
Äõ¸®¹®Àº ¾Æ·¡¿Í °°½À´Ï´Ù.
WITH UPSERT AS
(
UPDATE
STD_DIARY_DTL
SET
A = #a#
B = #b#
WHERE
C = #c#
D = #d#
RETURNING *
)
INSERT INTO STD_DIARY_DTL
(
A
, B
, C
, D
) SELECT
#a#
, #b#
, #c#
, #d#
WHERE NOT EXISTS (SELECT * FROM upsert)
Áú¹® | 1242¸íÀÌ Àоú¾î¿ä. 3.17.150.89