| PostgreSQL 8.3.3¹®¼ | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 29. libpq - C ¶óÀ̺귯¸® | Fast Forward | Next |
PostgreSQLÀÇCOPYÄ¿¸Çµå¿¡¼´Â libpq°¡ »ç¿ëÇϰí ÀÖ´Â ³×Æ®¿öÅ© Á¢¼Ó¿¡ ´ëÇØ ÀоîµéÀ̰ųª ÀÔ·ÂÀ» ¼±ÅÃÇÒ ¼ö ÀÖ°Ô µÇ¾î ÀÖ½À´Ï´Ù. º» Àý¿¡¼ ¼³¸íÇÏ´Â ÇÔ¼ö¿¡ ÀÇÇØ, ¾îÇø®ÄÉÀ̼ÇÀº º¹»çµÈ µ¥ÀÌÅÍÀÇ Á¦°øÀ̳ª »ç¿ëÀÌ °¡´ÉÇÏ´Ù´Â ÀÌÁ¡À» °¡Áý´Ï´Ù.
ÀüüÀûÀΠ󸮷μ ¾îÇø®ÄÉÀ̼ÇÀº ¿ì¼±PQexecȤÀº µ¿µîÇÑ ÇÔ¼ö¸¦ °ÅÄ£ COPY SQL Ä¿¸Çµå¸¦ ¹ßÇàÇÕ´Ï´Ù.
(Ä¿¸Çµå·Î ¿¡·¯°¡ ¹ß»ýÇÏÁö ¾ÊÀ¸¸é) ÀÌ ÀÀ´äÀº (ÁöÁ¤ÇÑ º¹»ç ¹æÇâÀ» µû¶ó)PGRES_COPY_OUT³ª PGRES_COPY_IN »óÅ Äڵ带 °¡ÁøPGresult°¡ µË´Ï´Ù.
±× ÈÄ, ¾îÇø®ÄÉÀ̼ÇÀº º» ÀýÀÇ ÇÔ¼ö¸¦ »ç¿ëÇϰí, Çà µ¥ÀÌÅ͸¦ ¼ö½ÅÇϰųª Àü¼ÛÇØ¾ß ÇÕ´Ï´Ù.
µ¥ÀÌÅÍÀÇ Àü¼ÛÀÌ ¿Ï·áÇßÀ» ¶§, Àü¼Û¿¡ ¼º°øÇß´ÂÁö ½ÇÆÐÇß´ÂÁö¸¦ ³ªÅ¸³»´Â ´Ù¸¥PGresult¿ÀºêÁ§Æ®°¡ ¹ÝȯµË´Ï´Ù.
±× »óÅ´ ¼º°ø½Ã¿¡´Â PGRES_COMMAND_OK°¡ µÇ°í, ¹®Á¦°¡ ÀϾ ¶§´Â PGRES_FATAL_ERROR°¡ µË´Ï´Ù.
ÀÌ ½ÃÁ¡¿¡¼, ´Ù¸¥ SQL Ä¿¸Çµå¸¦PQexec¸¦ °ÅÃļ ¹ßÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.
(COPYÁ¶ÀÛ ½ÇÇà ÁßÀÏ ¶§, °°Àº Á¢¼ÓÀ» »ç¿ëÇØ ´Ù¸¥ SQL Ä¿¸Çµå¸¦ ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù. )
COPYÄ¿¸Çµå°¡, Ãß°¡ÀûÀ¸·Î Ä¿¸Çµå¸¦ Æ÷ÇÔÇÑ ¹®ÀÚ¿·Î¼PQexec¸¦ °ÅÃÄ ¹ßÇàµÆÀ» °æ¿ì,
¾îÇø®ÄÉÀ̼ÇÀºCOPY󸮸¦ ³¡³½ ÈÄ¿¡, PQgetResult¸¦ °ÅÄ£ °á°ú¸¦ °è¼Ó ÃëµæÇØ¾ßÇÕ´Ï´Ù.
PQexecÄ¿¸Çµå ¹®ÀÚ¿ÀÌ ¿Ï·áµÇ°í, ±× ÈÄ Ä¿¸Çµå°¡ ¾ÈÀüÇÏ°Ô ¹ßÇàµÇ´Â °ÍÀ» È®½ÇÇØÁö´Â °ÍÀº PQgetResult°¡NULL¸¦ ¹ÝȯÇÒ ¶§ »ÓÀÔ´Ï´Ù.
º» ÀýÀÇ ÇÔ¼ö´Â PQexec³ª PQgetResult·ÎºÎÅÍPGRES_COPY_OUT³ª PGRES_COPY_IN °á°ú »óŸ¦ ¾òÀº ÈÄ¿¡¸¸ ½ÇÇàµÇ¾î¾ß ÇÕ´Ï´Ù.
ÀÌ·¯ÇÑ »óÅ °ª Áß 1°³¸¦ °¡Áö´Â PGresult¿ÀºêÁ§Æ®´Â, µ¿ÀÛÇÏ´ÂCOPYÁ¶ÀÛ¿¡ °üÇØ Ãß°¡ µ¥ÀÌÅ͸¦ °¡Áý´Ï´Ù. ÀÌ Ãß°¡ µ¥ÀÌÅÍ´Â ÀÌÇÏÀÇ Äõ¸® °á°ú¸¦ °¡Áø Á¢¼Ó¿¡¼ »ç¿ëµÇ´Â ÇÔ¼ö¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
PQnfields
º¹»çµÇ´Â ¿(Çʵå) ¼ö¸¦ ¹ÝȯÇÕ´Ï´Ù.
PQbinaryTuples
0Àº º¹»ç Àüü ¼½ÄÀÌ ÅØ½ºÆ®(»õ·Î¿î ÇàÀ¸·Î ´Ü¶ôÁö¾îÁø Çà, ´Ü¶ô ¹®ÀÚ·Î ´Ü¶ôÁö¾îÁø ¿ µî)ÀÎ °ÍÀ» ³ªÅ¸³À´Ï´Ù. 1Àº º¹»ç Àüü ¼½ÄÀÌ ¹ÙÀ̳ʸ®ÀÎ °ÍÀ» ³ªÅ¸³À´Ï´Ù. ÀÚ¼¼ÇÑ »çÇ×Àº COPY À» ÂüÁ¶ÇØ Áֽʽÿä.
PQfformat
º¹»ç Á¶ÀÛÀÇ °¢ ¿°ú °ü°èµÈ ¼½Ä ÄÚµå(ÅØ½ºÆ®¿¡¼´Â 0, ¹ÙÀ̳ʸ®¿¡¼´Â 1)¸¦ ¹ÝȯÇÕ´Ï´Ù. º¹»ç Àüü ¼½ÄÀÌ ÅØ½ºÆ®ÀÎ °æ¿ì´Â ¿ ´ÜÀ§ÀÇ ¼½Ä ÄÚµå´Â Ç×»ó 0ÀÔ´Ï´Ù. ±×·¯³ª ¹ÙÀ̳ʸ® ¼½ÄÀº ÅØ½ºÆ®¿µµ ¹ÙÀ̳ʸ®¿µµ ¼Æ÷Æ®ÇÒ ¼ö ÀÖ½À´Ï´Ù. (±×·¯³ª ÇöÀçÀÇCOPY½ÇÇà¿¡¼´Â ¹ÙÀ̳ʸ® º¹»ç¿¡¼¸¸ ¹ÙÀ̳ʸ® ¿ÀÌ ¹ß»ýÇÕ´Ï´Ù. ±× ¶§¹®¿¡, ÇöÀç °³º°ÀûÀÎ ¿ ¼½ÄÀº Ç×»ó Àüü ¼½Ä°ú ÀÏÄ¡ÇÕ´Ï´Ù. )
Note: ÀÌ·¯ÇÑ Ãß°¡ µ¥ÀÌÅÍ °ª´Â ÇÁ·ÎÅäÄÝ 3.0À» »ç¿ëÇÑ °æ¿ì¿¡ ÀÌ¿ë °¡´ÉÇÕ´Ï´Ù. ÇÁ·ÎÅäÄÝ 2.0À» »ç¿ëÇÏ´Â °æ¿ì, ÀÌ·¯ÇÑ ÇÔ¼ö´Â ¸ðµÎ 0À» ¹ÝȯÇÕ´Ï´Ù.
ÀÌ·¯ÇÑ ÇÔ¼ö´Â COPY FROM STDIN±â°£¿¡ µ¥ÀÌÅ͸¦ Àü¼ÛÇϱâ À§Çؼ »ç¿ëµË´Ï´Ù. Á¢¼ÓÀÌCOPY_IN»óŰ¡ ¾Æ´Ñµ¥ È£ÃâµÉ °æ¿ì, À̵éÀº ½ÇÆÐÇÕ´Ï´Ù.
PQputCopyData
COPY_IN»óÅÂÀÏ ¶§, ¼¹ö·Î µ¥ÀÌÅ͸¦ Àü¼ÛÇÕ´Ï´Ù.
int PQputCopyData(PGconn *conn,
const char *buffer,
int nbytes);
ÁöÁ¤ÇÑbuffer¿¡ ÀÖ´Â COPYµ¥ÀÌÅ͸¦nbytes±æÀÌ ¸¸Å, ¼¹ö¿¡ Àü¼ÛÇÕ´Ï´Ù.
µ¥ÀÌÅͰ¡ Àü¼ÛµÇ¾úÀ» °æ¿ì, ÀÌ °á°ú´Â 1ÀÌ µË´Ï´Ù.
µ¥ÀÌÅÍÀÇ Àü¼ÛÀÌ Â÷´ÜµÇ¾î¼ Àü¼ÛµÇÁö ¾ÊÀ¸¸é 0ÀÌ µË´Ï´Ù.
(ÀÌ´Â Á¢¼ÓÀÌ nonblock ¸ðµåÀÇ °æ¿ì¿¡¸¸ ÀϾ´Ï´Ù. )
¿¡·¯°¡ ¹ß»ýÇßÀ» °æ¿ì´Â-1ÀÌ µË´Ï´Ù.
(¹Ýȯ °ªÀÌ-1ÀÇ °æ¿ì, ¼¼ºÎ »çÇ×À» ¾ò±â À§Çؼ´Â PQerrorMessage¸¦ »ç¿ëÇØ Áֽʽÿä.
¹Ýȯ °ªÀÌ 0ÀÎ °æ¿ì´Â ÀÔ·Â Áغñ°¡ °®ÃçÁú ¶§±îÁö ±â´Ù¸®°í, Àç½ÇÇàÇØ Áֽʽÿä. )
¾îÇø®ÄÉÀ̼ÇÀºCOPYµ¥ÀÌÅÍ ½ºÆ®¸²À» »ç¿ëÇϱ⠽¬¿î Å©±âÀÇ ¹öÆÛ·Î ³ª´©¾î ÀоîµéÀÏ ¼ö ÀÖ½À´Ï´Ù. Àü¼Û½ÃÀÇ ¹öÆÛ ·Îµå °æ°è´Â ÀǹÌÀûÀÎ Á߿伺À» °¡ÁöÁö ¾Ê½À´Ï´Ù. µ¥ÀÌÅÍ ½ºÆ®¸² ³»¿ëÀº COPY Ä¿¸Çµå·Î ¿¹»óµÇ´Â µ¥ÀÌÅÍ ¼½Ä°ú ÀÏÄ¡ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ÀÚ¼¼ÇÑ »çÇ×Àº COPY À» ÂüÁ¶ÇØ Áֽʽÿä.
PQputCopyEnd
COPY_IN»óÅÂÀÏ ¶§ ¼¹ö·Î µ¥ÀÌÅÍ Á¾·á Áö½Ã¸¦ Àü¼ÛÇÕ´Ï´Ù.
int PQputCopyEnd(PGconn *conn,
const char *errormsg);
errormsg°¡NULLÀÎ °æ¿ì´Â COPY_INÁ¶ÀÛÀÌ ¼º°øÀûÀ¸·Î Á¾·áÇÑ °ÍÀÔ´Ï´Ù. errormsg°¡NULLÀÌ ¾Æ´Ñ °æ¿ì´Â COPY°¡ ½ÇÆÐµÇµµ·Ï °¿äµÈ °ÍÀÔ´Ï´Ù. errormsg°¡ Áö½ÃÇÏ´Â ¹®ÀÚ¿Àº ¿¡·¯ ¸Þ¼¼Áö·Î¼ »ç¿ëµË´Ï´Ù. (±×·¯³ª ÀÌ ¿¡·¯ ¸Þ¼¼Áö°¡ ¿Ã¹Ù¸£°Ô ¼¹ö¿¡¼ µ¹¾Æ°£ °ÍÀ̶ó°í °¡Á¤ÇØ¾ß ÇÏÁö´Â ¾Ê½À´Ï´Ù. ¼¹ö´Â ÀÌ¹Ì ´Ù¸¥ ¿øÀÎÀ¸·ÎCOPY¸¦ ½ÇÆÐÇÒ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. ¶ÇÇÑ, ÀÌ °Á¦ÀûÀÎ ½ÇÆÐ´Â 3.0 ÀÌÀü ÇÁ·ÎÅäÄÝÀÇ Á¢¼ÓÀ» »ç¿ëÇϰí ÀÖ´Â °æ¿ì´Â ÀÛµ¿ÇÏÁö ¾Ê½À´Ï´Ù. )
Á¾·á µ¥ÀÌÅͰ¡ Àü¼ÛµÇ¾úÀ» °æ¿ì °á°ú´Â 1ÀÌ µË´Ï´Ù.
Àü¼Û ½Ã¿¡ Â÷´ÜµÇ¾î Àü¼ÛÇÒ ¼ö ¾ø¾ú´ø °æ¿ì´Â 0ÀÌ µË´Ï´Ù.
(ÀÌ´Â Á¢¼ÓÀÌ nonblock ¸ðµåÀÇ °æ¿ì¿¡¸¸ ÀϾ´Ï´Ù.)
¿¡·¯°¡ ¹ß»ýÇßÀ» °æ¿ì´Â-1ÀÌ µË´Ï´Ù.
(¹Ýȯ °ªÀÌ-1ÀÏ °æ¿ì, ¼¼ºÎ »çÇ×À» ¾ò±â À§Çؼ´Â PQerrorMessage¸¦ »ç¿ëÇØ Áֽʽÿä.
¹Ýȯ °ªÀÌ 0ÀÎ °æ¿ì´Â ÀÔ·ÂÀÌ ÁغñµÉ ¶§±îÁö ±â´Ù¸®°í, Àç½ÇÇàÇØ Áֽʽÿä. )
PQputCopyEnd È£Ãâ¿¡ ¼º°øÇÑ ÈÄ, PQgetResult¸¦ È£ÃâÇØCOPYÄ¿¸ÇµåÀÇ ÃÖÁ¾ÀûÀÎ °á°ú »óŸ¦ ²¨³» Áֽʽÿä.
ÀϹÝÀûÀÎ ¹æ¹ýÀ¸·Î ÀÌ °á°ú¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ» ¶§±îÁö ´ë±âÇÕ´Ï´Ù.
±×¸®°í º¸Åë ¿¬»êÀ¸·Î µ¹¾Æ¿É´Ï´Ù.
ÀÌ·¯ÇÑ ÇÔ¼ö´Â COPY TO STDOUTµ¿¾È µ¥ÀÌÅ͸¦ ¹Þ±â À§Çؼ »ç¿ëµË´Ï´Ù. COPY_OUT»óŰ¡ ¾Æ´Ñ Á¢¼ÓÀÏ ¶§ È£ÃâÇϸé, ½ÇÆÐÇÕ´Ï´Ù.
PQgetCopyData
COPY_OUT»óÅ µ¿¾È, ¼¹ö·ÎºÎÅÍ µ¥ÀÌÅ͸¦ ¼ö½ÅÇÕ´Ï´Ù.
int PQgetCopyData(PGconn *conn,
char **buffer,
int async);
COPY±â°£ Áß, ¼¹ö·ÎºÎÅÍ ´Ù¸¥ Çà µ¥ÀÌÅÍÀÇ ÀÔ¼ö¸¦ ½ÃµµÇÕ´Ï´Ù.
Ç×»ó 1¹ø¿¡ 1°³ÀÇ Çà µ¥ÀÌÅͰ¡ ¹ÝȯµË´Ï´Ù.
ºÎºÐÀûÀÎ ÇุÀÌ ÀÌ¿ë °¡´ÉÇÑ °æ¿ì´Â ¸®ÅϵÇÁö ¾Ê½À´Ï´Ù.
Çà µ¥ÀÌÅÍÀÇ ÃëµæÇÕ´Ï´Ù.´Â °ÍÀº ±× µ¥ÀÌÅ͸¦ º¸°üÇϱâ À§ÇÑ ¸Þ¸ð¸® üũÀÇ ÇÒ´çÀ» ÀǹÌÇÕ´Ï´Ù.
bufferÆÄ¶ó¹ÌÅÍ´Â NULLÀÌ ¾Æ´Ï¾î¾ß ÇÕ´Ï´Ù.
*buffer´Â ÇÒ´çµÈ ¸Þ¸ð¸® Æ÷ÀÎÅÍ¿¡, ¹öÆÛ°¡ ¹ÝȯµÇÁö ¾ÊÀº °æ¿ì´Â NULL·Î ¼³Á¤µË´Ï´Ù.
NULLÀÌ ¾Æ´Ñ °á°ú ¹öÆÛ´Â ´õÀÌ»ó ÇÊ¿ä ¾ø¾îÁö¸é PQfreemem¸¦ »ç¿ëÇØ ÇØÁ¦ÇØ¾ß ÇÕ´Ï´Ù.
ÇàÀÌ ¼º°øÀûÀ¸·Î ¸®ÅϵǸé, ¹Ýȯ °ªÀº Çà¿¡ ÀÖ´Â µ¥ÀÌÅÍÀÇ ¹ÙÀÌÆ® ¼ö°¡ µË´Ï´Ù.
(À̰ÍÀº Ç×»ó 0º¸´Ù Ä¿Áý´Ï´Ù. )
¸®ÅÏµÈ ¹®ÀÚ¿Àº Ç×»ó null·Î Á¾·áµÇÁö¸¸, ÅØ½ºÆ®COPY¿¡¼¸¸ À¯¿ëÇÒ °ÍÀÔ´Ï´Ù.
°á°ú°¡ 0À̶ó´Â °ÍÀº COPY°¡ ÁøÇà ÁßÀ̶ó´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù. ±×·¯³ª ÇàÀº ¾ÆÁ÷ ÀÌ¿ëÇÒ ¼ö ¾ø´Â »óŶó´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù.
(async°¡ trueÀÎ °æ¿ì¿¡¸¸ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù.)
-1À̶ó´Â °á°ú´Â COPY°¡ ¿Ï·áµÈ °ÍÀ» ³ªÅ¸³À´Ï´Ù.
-2À̶ó´Â °á°ú´Â ¿¡·¯°¡ ¹ß»ýÇÑ °ÍÀ» ³ªÅ¸³À´Ï´Ù.
(±× ÀÌÀ¯¿¡ ´ëÇØ¼´Â PQerrorMessage¸¦ ÂüÁ¶ÇØ Áֽʽÿä. )
async°¡ true(0ÀÌ ¾Æ´Ñ)ÀÎ °æ¿ì, PQgetCopyData´Â ÀÔ·ÂÀ» ±â´Ù¸®´Â µ¿¾ÈÀº Â÷´ÜµÇÁö ¾Ê½À´Ï´Ù.
COPY½ÇÇà ÁßÀÌ¾î¼ ¿Ï·áµÈ ÇàÀ» ²¨³¾ ¼ö ¾ø´Â °æ¿ìPQgetCopyData´Â 0À» ¹ÝȯÇÕ´Ï´Ù.
(ÀÌ °æ¿ì, Àç½ÇÇà Àü¿¡ ÀоîµéÀÏ Áغñ°¡ °®ÃçÁú ¶§±îÁö ´ë±âÇØ Áֽʽÿä.
PQconsumeInput¸¦ È£ÃâÇß´ÂÁö´Â °ü°è ¾ø½À´Ï´Ù. )
async°¡ false(0)ÀÏ °æ¿ì, PQgetCopyData´Â µ¥ÀÌÅ͸¦ ÀÌ¿ëÇÒ ¼ö ÀÖÀ» ¶§±îÁö, ȤÀº Á¶ÀÛÀÌ ¿Ï·áÇÒ ¶§±îÁö Â÷´ÜµË´Ï´Ù.
PQgetCopyData °¡-1À» µ¹·ÁÁØ ÈÄ, PQgetResult¸¦ È£ÃâÇØ, COPYÄ¿¸ÇµåÀÇ ÃÖÁ¾ °á°ú »óŸ¦ ²¨³» Áֽʽÿä.
ÀϹÝÀûÀÎ ¹æ¹ýÀ¸·Î °á°ú¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ°Ô µÉ ¶§±îÁö ´ë±âÇØµµ »ó°üÇÏÁö ¾Ê½À´Ï´Ù.
±×¸®°í º¸ÅëÀÇ ¿¬»êÀ¸·Î µ¹¾Æ¿Í Áֽʽÿä.
ÀÌÇÏÀÇ ÇÔ¼ö´Â COPY¸¦ Ãë±ÞÇÏ´Â ¿À·¡µÈ ¹æ¹ýÀ» ÀǹÌÇÕ´Ï´Ù. À̵éÀº ¿©ÀüÈ÷ µ¿ÀÛÇÏÁö¸¸, À̵éÀÇ ¿¡·¯¸¦ ´Ù·ç´Âµ¥ ¹Ì¾àÇϰí, µ¥ÀÌÅÍÀÇ ³¡À» °ËÃâÇÏ´Â ¹æ¹ýÀÌ ºÒÆíÇϰųª ¹ÙÀ̳ʸ®³ª nonbloking À̼ÛÀÇ Áö¿øÀÌ ºÎÁ·Çϱ⠶§¹®¿¡ ¸¹ÀÌ »ç¿ëµÇÁö ¾Ê½À´Ï´Ù.
PQgetline
»õ ÇàÀ¸·Î ³¡³ª´Â ¹®ÀÚ¿(¼¹ö·ÎºÎÅÍ Àü¼ÛµÈ °Í)À» length Å©±â ¹öÆÛ ¹®ÀÚ¿¿¡ ÀоîµéÀÔ´Ï´Ù.
int PQgetline(PGconn *conn,
char *buffer,
int length);
ÀÌ ÇÔ¼ö´Â ¹öÆÛ¿¡length-1±îÁö ¹®ÀÚ¸¦ º¹»çÇϰí, ³¡³ª´Â »õ·Î¿î ÇàÀ» 0¹ÙÀÌÆ®·Î ¿Å°Ü³õ½À´Ï´Ù.
PQgetline ÀÔ·Â ³¡¿¡´Â EOF¸¦, Çà Àüü°¡ ÀÐÈ÷¸é 0À» ¹ÝȯÇÕ´Ï´Ù.
³¡³ª´Â »õ·Î¿î ÇàÀÌ ¾ÆÁ÷ ÀÐÈ÷Áö ¾Ê°í, ¹öÆÛ°¡ °¡µæÃ¡À» °æ¿ì, 1À» ¹ÝȯÇÕ´Ï´Ù.
¾îÇø®ÄÉÀ̼ÇÀº »õ·Î¿î ÇàÀÌ, \. 2 ¹®ÀÚÀÎÁö È®ÀÎÇØ¾ß ÇÕ´Ï´Ù. ÀÌ 2 ¹®ÀÚ´Â COPYÄ¿¸Çµå °á°ú¸¦ ¼¹ö°¡ Àü¼ÛÀÌ ¿Ï·áµÈ °ÍÀ» ³ªÅ¸³À´Ï´Ù. ¾îÇø®ÄÉÀ̼ÇÀÌ ¸¸ÀÏlength-1¹®ÀÚº¸´Ù ±ä ÇàÀ» ¹Þ´Â ÀÏ¿¡¼µµ, Ʋ¸²¾øÀÌ\. ÇàÀ» ÀνÄÇÕ´Ï´Ù.´Â È®½ÅÀÌ ÇÊ¿äÇÕ´Ï´Ù (¶Ç ¿¹¸¦ µé¸é ±ä µ¥ÀÌÅ͸¦ ¸¶Áö¸· ÇàÀ¸·Î ÀâÁö ¾Êµµ·Ï ÁÖÀÇÇØ ÁÖ¼¼¿ä).
PQgetlineAsync
COPYµ¥ÀÌÅÍÇà(¼¹ö·ÎºÎÅÍ Àü¼ÛµÈ °Í)À», ºí·ÎÅ·¾øÀÌ ¹öÆÛ¿¡ ÀоîµéÀÔ´Ï´Ù.
int PQgetlineAsync(PGconn *conn,
char *buffer,
int bufsize);
PQgetline¿Í À¯»çÇÏÁö¸¸, COPY µ¥ÀÌÅÍ ºñµ¿±â·Î, Áï ºí·ÎÅ· ¾ø´Â ¾îÇø®ÄÉÀ̼ÇÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
COPYÄ¿¸Çµå¸¦ ½ÇÇàÇϰí, PGRES_COPY_OUTÀÀ´äÀ» ¹Þ¾ÆµéÀ̸é,
¾îÇø®ÄÉÀ̼ÇÀº µ¥ÀÌÅÍ Á¾·á ½ÅÈ£¸¦ ¹ÞÀ» ¶§±îÁöPQconsumeInput¿Í PQgetlineAsync¸¦ È£ÃâÇÕ´Ï´Ù.
PQgetline¿Í ´Þ¸®, ÀÌ ÇÔ¼ö´Â µ¥ÀÌÅÍ Á¾·á °ËÃâ¿¡ ´ëÇØ¼ Ã¥ÀÓÀ» °¡Áý´Ï´Ù.
PQgetlineAsyncÀÇ °³°³ÀÇ È£Ãâ¿¡¼´Â libpqÀÇ ÀÔ·Â ¹öÆÛ ³»¿¡¼ ¿Ï·áµÈ Çà µ¥ÀÌÅ͸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â °æ¿ì¿¡ µ¥ÀÌÅ͸¦ ¹ÝȯÇÕ´Ï´Ù.
¹Ý´ëÀÇ °æ¿ì, ÇàÀÇ ³ª¸ÓÁö°¡ µµÂøÇÒ ¶§±îÁö µ¥ÀÌÅÍ´Â ¹ÝȯµÇÁö ¾Ê½À´Ï´Ù.
ÀÌ ÇÔ¼ö´Â º¹»ç µ¥ÀÌÅÍÀÇ Á¾·á¸¦ ³ªÅ¸³»´Â ¸¶Å©¸¦ ÀνÄÇϸé -1À», µ¥ÀÌÅÍ¿¡ ¾Æ¹«°Íµµ ¾øÀ¸¸é 0À», ±×¸®°í µ¥ÀÌÅ͸¦ µ¹·ÁÁÖ´Â °æ¿ì´Â ±× ¹ÙÀÌÆ® ¼ö¸¦ Á¤ÀÇ °ªÀ¸·Î ¹ÝȯÇÕ´Ï´Ù.
¸¸¾à-1ÀÌ µ¹·ÁÁÖ¾îÁö¸é, È£ÃâÃøÀº ´ÙÀ½¿¡PQendcopy¸¦ È£ÃâÇØ¾ß ÇÕ´Ï´Ù.
±×¸®°í º¸Åë ¿¬»êÀ¸·Î µ¹¾Æ¿É´Ï´Ù.
¹ÝȯµÇ´Â µ¥ÀÌÅÍ´Â Çà µ¥ÀÌÅÍÀÇ °æ°è¸¦ ³Ñ¾î È®ÀåµÇÁö ¾Ê½À´Ï´Ù. °¡´ÉÇϸé Çà Àüü¸¦ ÇÑ ¹ø¿¡ ¹ÝȯÇÕ´Ï´Ù. ±×·¯³ª È£ÃâÇÑ °÷¿¡¼ Á¦°øÇÑ ¹öÆÛ°¡ ³Ê¹« À۾Ƽ ¼¹ö·ÎºÎÅÍ º¸³»Áö´Â ÇàÀ» º¸°üÇÒ ¼ö ¾ø´Â °æ¿ì, ºÐÇÒµÈ Çà µ¥ÀÌÅ͸¦ ¹ÝȯÇÕ´Ï´Ù. ÅØ½ºÆ® µ¥ÀÌÅ͸¦ °¡Áö¸é À̰ÍÀº ¸¶Áö¸· ¹ÙÀÌÆ®°¡ \nÀÎÁö ¾Æ´ÑÁö¸¦ Å×½ºÆ®Çؼ °ËÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. (¹ÙÀ̳ʸ®COPYÀÇ °æ¿ì¿¡ °°Àº °ËÃâÀ» ½Ç½ÃÇϱâ À§Çؼ´Â ½ÇÁ¦COPYµ¥ÀÌÅÍÀÇ ¼½ÄÀ» ÇØ¼®ÇØ¾ß ÇÕ´Ï´Ù. ) ¹ÝȯµÇ´Â ¹®ÀÚ¿Àº null·Î ³¡³ªÁö ¾Ê½À´Ï´Ù. (null·Î ³¡³ª´Â °ÍÀ» Ãß°¡ÇÕ´Ï´Ù.¸é, ½ÇÁ¦ È®º¸ÇÏ´Â ¹öÆÛ Å©±â¸¦ bufsizeº¸´Ù Çϳª ÀÛ°Ô °Ç³×Áֽʽÿä).
PQputline
¼¹ö¿¡ null·Î ³¡³ª´Â ¹®ÀÚ¿À» Àü¼ÛÇÕ´Ï´Ù. ¹®Á¦ ¾øÀ¸¸é 0À» ¹ÝȯÇÕ´Ï´Ù. ¹®ÀÚ¿ Àü¼ÛÀ» ÇÒ ¼ö ¾ø´Â °æ¿ì EOF¸¦ ¹ÝȯÇÕ´Ï´Ù.
int PQputline(PGconn *conn,
const char *string);
PQputline È£Ãâ¿¡ ÀÇÇØ Àü¼ÛµÇ´Â COPYµ¥ÀÌÅÍ ½ºÆ®¸²Àº PQgetlineAsync·Î ¸®ÅϵǴ ¼½Ä°ú °°Àº ¼½ÄÀ» °¡Áý´Ï´Ù.
´Ù¸¸, ¾îÇø®ÄÉÀ̼ÇÀº PQputline¸¶´Ù Á¤È®È÷ 1°³ÀÇ µ¥ÀÌÅÍÇàÀ» Àü¼ÛÇϵµ·Ï °¿ä´çÇÏÁö ¾Ê½À´Ï´Ù.
È£Ã⸶´Ù ÇàÀÇ ÀϺγª º¹¼öÀÇ ÇàÀ» Àü¼ÛÇØµµ ¹®Á¦ ¾ø½À´Ï´Ù.
Note: PostgreSQLÇÁ·ÎÅäÄÝ 3.0 ÀÌÀü, ¾îÇø®ÄÉÀ̼ÇÀº ¼¹ö¿¡ ´ëÇØ¼COPYµ¥ÀÌÅÍ Àü¼ÛÀÌ ¿Ï·áµÈ °ÍÀ» Å뺸Çϱâ À§Çؼ, ÃÖÁ¾ ÇàÀ¸·Î¼\. 2 ¹®ÀÚ¸¦ ¸í½ÃÀûÀ¸·Î Àü¼ÛÇÒ Çʿ䰡 ÀÖ¾ú½À´Ï´Ù. À̰ÍÀº ¾ÆÁ÷ µ¿ÀÛÇÕ´Ï´Ù. ±×·¯³ª À̰ÍÀº ¾µ¸ð¾ø°Ô µÇ¾î \. ÀÇ Æ¯¼öÇÑ Àǹ̴ ÇâÈÄ ¸±¸®½º¿¡¼ ¾ø¾îÁú °ÍÀ¸·Î ¿¹»óµË´Ï´Ù. ½ÇÁ¦ µ¥ÀÌÅÍ Àü¼Û ¿Ï·á ÈÄ¿¡
PQendcopy¸¦ È£ÃâÇÏ´Â °ÍÀº Áß¿äÇÕ´Ï´Ù.
PQputnbytes
null·Î ³¡³ªÁö ¾Ê´Â ¹®ÀÚ¿À» ¼¹ö¿¡ Àü¼ÛÇÕ´Ï´Ù. ¹®Á¦ ¾øÀ¸¸é 0À» ¹ÝȯÇÕ´Ï´Ù. ¹®ÀÚ¿ Àü¼ÛÀ» ÇÒ ¼ö ¾ø´Â °æ¿ì,EOF¸¦ ¹ÝȯÇÕ´Ï´Ù.
int PQputnbytes(PGconn *conn,
const char *buffer,
int nbytes);
À̰ÍÀº È®½ÇÈ÷PQputline¿Í °°½À´Ï´Ù.
´Ù¸¸, Á÷Á¢ Àü¼Û ¹ÙÀÌÆ® ¼ö¸¦ ÁöÁ¤Çϱâ À§ÇØ, null·Î ³¡³¾ Çʿ䰡 ¾ø½À´Ï´Ù.
¹ÙÀ̳ʸ® µ¥ÀÌÅ͸¦ Àü¼ÛÇÒ ¶§´Â ÀÌ ÇÁ·Î½ÃÀú¸¦ »ç¿ëÇØ Áֽʽÿä.
PQendcopy
¼¹ö¿Í µ¿±âȵ˴ϴÙ.
int PQendcopy(PGconn *conn);
ÀÌ ÇÔ¼ö´Â ¼¹ö°¡ º¹»ç¸¦ ¿Ï·áÇÒ ¶§±îÁö ±â´Ù¸³´Ï´Ù.
ÀÌ ÇÔ¼ö´Â PQputline¸¦ »ç¿ëÇÑ ¼¹ö·ÎÀÇ ¹®ÀÚ¿ Àü¼ÛÀÌ ¿Ï·áµÈ ½ÃÁ¡, ȤÀºPGgetline¸¦ »ç¿ëÇÑ ¼¹ö·ÎºÎÅÍÀÇ ¹®ÀÚ¿ ¼ö½ÅÀÌ ¿Ï·áµÈ ½ÃÁ¡¿¡¼ È£ÃâÇØ¾ß ÇÕ´Ï´Ù.
À̰ÍÀ» ¹ßÇàÇÏÁö ¾ÊÀ¸¸é ¼¹ö´Â Ŭ¶óÀÌ¾ðÆ®¿ÍÀÇ"µ¿±âȰ¡ ¾î±ß³"»óŰ¡ µÇ¾î ¹ö¸³´Ï´Ù.
ÀÌ ÇÔ¼ö·ÎºÎÅÍ µ¹¾Æ¿Â ½ÃÁ¡¿¡¼, ¼¹ö´Â ´ÙÀ½ SQL Ä¿¸Çµå¸¦ ¹ÞÀ» Áغñ°¡ °®ÃçÁý´Ï´Ù.
Á¤»óÀûÀ¸·Î Á¾·áµÆÀ» °æ¿ì, ¹ÝȯµÈ °ªÀº 0ÀÔ´Ï´Ù. Á¤»ó Á¾·á°¡ ¾Æ´Ò °æ¿ì´Â 0ÀÌ ¾Æ´Õ´Ï´Ù.
(¹Ýȯ °ªÀÌ 0ÀÌ ¾Æ´Ò °æ¿ì, PQerrorMessageÀ» »ç¿ëÇØ ¼¼ºÎ»çÇ׸¦ ²¨³» Áֽʽÿä. )
PQgetResult¸¦ »ç¿ëÇÏ´Â °æ¿ì, ¾îÇø®ÄÉÀ̼ÇÀºPQgetline¸¦ ¹Ýº¹ È£ÃâÇϰí PGRES_COPY_OUT¿¡ ÀÀ´äÇØ,
Á¾·áµÈ ÇàÀ» ã¾Æ³»¸é °è¼ÓÇØ¼ PQendcopy¸¦ È£ÃâÇØ¾ß ÇÕ´Ï´Ù.
±×¸®°íPQgetResult°¡ null Æ÷ÀÎÅ͸¦ ¹ÝȯÇÒ ¶§±îÁö, PQgetResult ·çÇÁ·Î µ¹¾Æ¿Í¾ß ÇÕ´Ï´Ù.
ºñ½ÁÇϰÔ, PGRES_COPY_IN´Â ¿¬¼ÓÇÑPQputline·Î ó¸®Çϰí,PQendcopy¸¦ È£ÃâÇÑ µÚ¿¡ PQgetResult ·çÇÁ·Î µ¹¾Æ¿É´Ï´Ù.
ÀÌ·¯ÇÑ Á¶Á¤Àº ÀÏ·ÃÀÇSQLÄ¿¸Çµå¿¡ Æ÷ÇÔµÈ COPYÄ¿¸Çµå¸¦ È®½ÇÇϰí, ¿Ã¹Ù¸£°Ô ½ÇÇàÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.
ºñ±³Àû ¿À·¡µÈ ¾îÇø®ÄÉÀ̼ǿ¡¼´Â COPY¸¦PQexec·Î ½ÇÇàÇϰí, PQendcopy ½ÇÇàÀ¸·Î Æ®·£Àè¼Ç´Â ¿Ï·áµË´Ï´Ù°í °¡Á¤ÇÏ´Â ÀÏÀÌ ÀÚÁÖ ÀÖ½À´Ï´Ù.
À̰ÍÀº Ä¿¸Çµå ¹®ÀÚ¿ ÁßÀÇSQL°¡COPY»ÓÀÏ ¶§¸¸ ¿Ã¹Ù¸£°Ô µ¿ÀÛÇÕ´Ï´Ù.