29.1. µ¥ÀÌÅͺ£À̽º Á¢¼Ó Á¦¾î ÇÔ¼ö

PostgreSQLÀÇ ¹é¿£µå ¼­¹ö¿ÍÀÇ Á¢¼ÓÀ» »ý¼ºÇÏ·Á¸é , ÀÌÇÏÀÇ ÇÔ¼ö¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥Àº ¹é¿£µå¿ÍÀÇ Á¢¼ÓÀ» ÇÑ ¹ø¿¡ ¿©·¯°³ ¿­ ¼ö ÀÖ½À´Ï´Ù. (ÇÑ °¡Áö ÀÌÀ¯·Î ¿©·¯ µ¥ÀÌÅͺ£À̽º·ÎÀÇ ¾×¼¼½º¸¦ µé ¼ö ÀÖ½À´Ï´Ù. ) °³°³ÀÇ Á¢¼ÓÀº PQconnectdb ¶Ç´Â PQsetdbLoginÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¾òÀ» ¼ö ÀÖ´Â PGconn¿ÀºêÁ§Æ®·Î ³ªÅ¸³³´Ï´Ù. ÀÌ·¯ÇÑ ÇÔ¼ö´Â Ç×»ó NULLÀÌ ¾Æ´Ñ ¿ÀºêÁ§Æ® Æ÷ÀÎÅ͸¦ ¹ÝȯÇÕ´Ï´Ù. PGconn ¿ÀºêÁ§Æ®¸¦ ÇÒ´çÇÒ ¼ö ¾ø´Â °æ¿ì°¡ ¾Æ´Ñ ÀÌ»ó NULLÀÌ ¾Æ´Ñ ºêÁ§Æ®ÀÇ Æ÷ÀÎÅ͸¦ ¹ÝȯÇÕ´Ï´Ù. ¶ÇÇÑ, ÀÌ Á¢¼Ó ¿ÀºêÁ§Æ®¸¦ ÅëÇØ Äõ¸®¸¦ º¸³»±â Àü¿¡, PQstatusÇÔ¼ö¸¦ È£ÃâÇØ, µ¥ÀÌÅͺ£À̽º¿ÍÀÇ Á¢¼Ó¿¡ ¼º°øÇß´ÂÁö ¿©ºÎ¸¦ Ã¼Å©ÇØ¾ß ÇÕ´Ï´Ù.

PQconnectdb

»õ·Ó°Ô µ¥ÀÌÅͺ£À̽º ¼­¹ö·ÎÀÇ Á¢¼ÓÀ» »ý¼ºÇÕ´Ï´Ù.

PGconn *PQconnectdb(const char *conninfo);

ÀÌ ÇÔ¼ö´Â conninfo ¹®ÀÚ¿­·ÎºÎÅÍ ÃëµæÇÑ ÆÄ¶ó¹ÌÅ͸¦ »ç¿ëÇϰí, µ¥ÀÌÅͺ£À̽º¿ÍÀÇ Á¢¼ÓÀ» È®¸³ÇÕ´Ï´Ù. ÀÌÇÏÀÇ PQsetdbLogin°ú´Â ´Þ¸®, ÇÔ¼öÀÇ prototype¸¦ º¯°æÇÏÁö ¾Ê°í ÆÄ¶ó¹ÌÅ͸¦ È®ÀåÇÒ ¼ö Àֱ⠶§¹®¿¡, ÀÀ¿ë ÇÁ·Î±×·¥À» »ý¼ºÇÏ·Á¸é, ÀÌ ÇÔ¼ö(ȤÀº nonblocking analogue PQconnectStart¿Í PQconnectPoll)À» »ç¿ëÇÏ´Â °ÍÀ» ÃßõÇÕ´Ï´Ù.

ºó ¹®ÀÚ¿­À» °Ç³×ÁÖ´Â °ÍÀ¸·Î, ¸ðµç ÆÄ¶ó¹ÌÅÍ´Â µðÆúÆ®·Î »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ, °ø¹é ¹®ÀÚ·Î ºÐ¸®ÇÏ¿© 1°³ ÀÌ»óÀÇ ÆÄ¶ó¹ÌÅ͸¦ ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. °¢°¢ÀÇ ÆÄ¶ó¹ÌÅÍ´Â keyword = value¶ó°í ÇÏ´Â ÇüÅ·Π¼³Á¤ÇÕ´Ï´Ù. µîÈ£ ÀüÈÄÀÇ °ø¹é ¹®ÀÚ´Â ÀÓÀÇ·Î ºÙÀÏ ¼ö ÀÖ½À´Ï´Ù. ºñ¾îÀÖ´Â °ªÀ̳ª °ø¹é ¹®ÀÚ¸¦ Æ÷ÇÔÇÑ °ªÀ» ¾²´Â °æ¿ì´Â ´ÜÀÏ ÀοëºÎÈ£·Î µÑ·¯½Ô´Ï´Ù. ¿¹¸¦ µé¸é, keyword = 'a value'ÀÔ´Ï´Ù. ´ÜÀÏ ÀοëºÎÈ£¿Í backslash´Â \'³ª \\¿Í °°ÀÌ, backslash·Î À̽ºÄÉÀÌÇÁ ÇØ¾ß ÇÕ´Ï´Ù.

Çö½ÃÁ¡¿¡¼­ À¯È¿ÇÑ ÆÄ¶ó¹ÌÅÍÀÇ Å°¿öµå´Â ÀÌÇÏ¿¡ ³ªÅ¸³»´Â ´ë·ÎÀÔ´Ï´Ù.

host

Á¢¼ÓÇϴ ȣ½ºÆ®¸íÀ» ÁöÁ¤ÇÕ´Ï´Ù. ÀÌ ÀÎÀÚ ¸®½ºÆ®¸¦ slash·Î ½ÃÀÛÇßÀ» °æ¿ì, TCP/IP¿¡ ÀÇÇÑ Åë½ÅÀÌ ¾Æ´Ñ Unix µµ¸ÞÀÎÀÇ Åë½ÅÀ» ÁöÁ¤ÇÏ°Ô µË´Ï´Ù. ±× °æ¿ì, ÀÌ °ªÀº ¼ÒÄÏ ÆÄÀÏÀ» ÀúÀåÇÏ´Â µð·ºÅ丮ÀÇ À̸§ÀÌ µË´Ï´Ù. host°¡ ÁöÁ¤µÇÁö ¾ÊÀº °æ¿ì, µðÆúÆ®´Â /tmp¿¡ ÀÖ´Â Unix µµ¸ÞÀÎÀÇ ¼ÒÄÏ¿¡ Á¢¼ÓÇϵµ·Ï ÇÕ´Ï´Ù. (¶Ç´Â PostgreSQLÀÇ ±¸Ãà½Ã¿¡ ÁöÁ¤ÇÑ ´Ù¸¥ µð·ºÅ丮¿¡ ÀÖ´Â ¼ÒÄÏÀÔ´Ï´Ù. ) Unix µµ¸ÞÀÎ ¼ÒÄÏÀÌ ¾ø´Â ¸Ó½Å¿¡¼­ µðÆúÆ®´Â localhost¿¡ Á¢¼ÓÇÏ´Â °ÍÀÔ´Ï´Ù.

hostaddr

Á¢¼ÓÇϴ ȣ½ºÆ®ÀÇ IPÁÖ¼Ò¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ÀÌ´Â 172.28. 40.9¶ó°í Çϴ ǥÁØÀûÀÎ IPv4 ÁÖ¼Ò ¼­½ÄÀÌ ¾Æ´Ï¸é ¾ÈµË´Ï´Ù. »ç¿ëÇÏ´Â ¸Ó½ÅÀ¸·Î IPv6¸¦ ¼­Æ÷Æ®ÇÏ´Â °æ¿ì´Â ±× ÁÖ¼Ò¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ ÆÄ¶ó¹ÌÅÍ¿¡ ºñ¾îÀÖÁö ¾ÊÀº ¹®ÀÚ¿­ÀÌ ÁöÁ¤µÇ¸é, TCP/IPÅë½ÅÀÌ Ç×»ó »ç¿ëµË´Ï´Ù.

host´ë½Å¿¡hostaddr¸¦ »ç¿ëÇÏ¿©, ¾îÇø®ÄÉÀ̼ÇÀÌ È£½ºÆ®¸íÀÇ °Ë»öÀ» ÇÏÁö ¾Ê°í ³¡³³´Ï´Ù. ƯÈ÷, ½Ã°£ Á¦¾àÀÌ ÀÖ´Â ¾îÇø®ÄÉÀ̼ǿ¡¼­´Â Áß¿äÇÒ °ÍÀÔ´Ï´Ù. ±×·¯³ª Kerberos ¹× GSSAPI ÀÎÁõÀ» ½Ç½ÃÇÏ´Â ¾îÇø®ÄÉÀ̼ǿ¡¼­´Â È£½ºÆ®¸íÀÌ ÇÊ¿äÇÏ°Ô µË´Ï´Ù. °á±¹, ÀÌÇÏ¿Í °°ÀÌ µË´Ï´Ù. hostaddr¸¦ »ç¿ëÇÏÁö ¾Ê°íhost¸¦ ÁöÁ¤ÇßÀ» °æ¿ì´Â È£½ºÆ®¸íÀÇ °Ë»öÀÌ ¹ß»ýÇÕ´Ï´Ù. host¸¦ »ç¿ëÇÏÁö ¾Ê°í, hostaddr¸¦ ÁöÁ¤ÇßÀ» °æ¿ì, hostaddr´Â ¸®¸ðÆ® ¸Ó½ÅÀÇ ÁÖ¼Ò°¡ µË´Ï´Ù. ÀÌ ¶§, Kerberos¸¦ »ç¿ëÇϰí ÀÖ´Â °æ¿ì, ¹Ý´ëµÇ´Â À̸§ÀÇ Äõ¸®´Â KerberosÀÇ È£½ºÆ®¸íÀ» ȹµæÇϱâ À§ÇØ ¹ß»ýÇÕ´Ï´Ù. host¿Í hostaddrÀÇ ¾çÂÊ ¸ðµÎ¸¦ ÁöÁ¤ÇßÀ» °æ¿ì, hostaddr°¡ ¸®¸ðÆ® ¸Ó½ÅÀÇ ÁÖ¼Ò°¡ µË´Ï´Ù. ÀÌ ¶§, Kerberos°¡ »ç¿ëÇϸ鼭µµ hostÀÇ °ªÀÌ ¹«½ÃµÇ¾î »ç¿ëµÇ°í ÀÖ´Â °æ¿ì´Â Kerberos ÀÎÁõ¿¡hostÀÇ °ªÀÌ »ç¿ëµË´Ï´Ù. (libpq¿¡°Ô °Ç³×Áø È£½ºÆ®¸íÀÌ, hostaddr¿¡ ´ëÀÀÇÏ´Â ¸Ó½ÅÀÇ À̸§°ú ÀÏÄ¡ÇÏÁö ¾Ê´Â °æ¿ì´Â ÀÎÁõ¿¡ ½ÇÆÐÇÒ °¡´É¼ºÀÌ ÀÖÀ¸¹Ç·Î, ÁÖÀÇÇϽʽÿä. ) ¶ÇÇÑ, hostaddr´Â ¾Æ´Ï°íhost°¡~/. pgpass(Section 29.13¸¦ ÂüÁ¶)¿¡¼­ÀÇ Á¢¼ÓÀÇ ½Äº°·Î »ç¿ëµË´Ï´Ù.

È£½ºÆ®¸íÀ̳ª È£½ºÆ®ÀÇ ÁÖ¼Òµµ ÀÌ¿ëÇÏÁö ¾Ê´Â °æ¿ì, libpq´Â ·ÎÄà Unix µµ¸ÞÀÎÀÇ ¼ÒÄÏÀ» »ç¿ëÇØ Á¢¼ÓÇÕ´Ï´Ù. ´Ù¸¸, Unix µµ¸ÞÀÎ ¼ÒÄÏÀ» °¡ÁöÁö ¾Ê´Â ¸Ó½Å¿¡¼­´Â localhostÀÇ Á¢¼ÓÀ» ½ÃµµÇÕ´Ï´Ù.

port

¼­¹ö È£½ºÆ®¿¡¼­ÀÇ Á¢¼Ó¿ëÀÇ Æ÷Æ® ¹øÈ£, ¶Ç´Â Unix µµ¸ÞÀÎ Á¢¼ÓÀÇ °æ¿ì´Â ¼ÒÄÏ ÆÄÀÏÀÇ È®ÀåÀÚ(extension)¸¦ ÁöÁ¤ÇÕ´Ï´Ù.

dbname

µ¥ÀÌÅͺ£À̽º¸íÀ» ÁöÁ¤ÇÕ´Ï´Ù. µðÆúÆ®´Â À¯Àú¸í°ú °°½À´Ï´Ù.

user

µ¥ÀÌÅͺ£À̽º¿¡ Á¢¼ÓÇÏ´Â PostgreSQLÀ¯Àú¸íÀ» ÁöÁ¤ÇÕ´Ï´Ù. µðÆúÆ®´Â ±× ¾îÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇϰí ÀÖ´Â À¯ÀúÀÇ operating system»óÀÇ À̸§°ú °°½À´Ï´Ù.

password

¼­¹ö°¡ ÆÐ½º¿öµå¿¡ ÀÇÇÑ ÀÎÁõÀ» ¿ä±¸ÇÏ´Â °æ¿ì¿¡ ÆÐ½º¿öµå¸¦ »ç¿ëÇÕ´Ï´Ù.

connect_timeout

Á¢¼ÓÀ» À§ÇØ ÃÖ´ë ´ë±â ½Ã°£À» ÃÊ´ÜÀ§·Î ÁöÁ¤ÇÕ´Ï´Ù. (10 Áø¼ö Á¤¼ö·Î ³ªÅ¸³½ ¹®ÀÚ¿­·Î¼­ ±â¼úÇØ Áֽʽÿä. ) 0 ¶Ç´Â ¼³Á¤ÇÏÁö ¾Ê´Â °ÍÀº ¹«ÇÑ ½Ã°£ÀÇ ´ë±â¸¦ ÀǹÌÇÕ´Ï´Ù. 2ÃÊ ¹Ì¸¸ÀÇ ´ë±â ½Ã°£À» »ç¿ëÇÏ´Â °ÍÀº ±ÇÇÏÁö ¾Ê½À´Ï´Ù.

options

¼­¹ö¿¡ Àü¼ÛÇÏ´Â Ä¿¸Çµå ¶óÀÎ ¿É¼ÇÀ» ÁöÁ¤ÇÕ´Ï´Ù.

tty

¹«½ÃµË´Ï´Ù. (ÀÌÀü¿¡´Â À̰ÍÀº ¼­¹ö µð¹ö±× Ãâ·ÂÀ» Àü¼ÛÇÏ´Â Àå¼Ò¸¦ ÁöÁ¤ÇÏ´Â °ÍÀ̾ú½À´Ï´Ù. )

sslmode

ÀÌ ¿É¼ÇÀº ¾î´ÀSSLÁ¢¼Ó¿¡¼­ ¿ì¼±ÀûÀ¸·Î ¼­¹ö¿Í Á¶Á¤Çұ °áÁ¤ÇÕ´Ï´Ù. 4°³ÀÇ ¸ðµå°¡ ÀÖ½À´Ï´Ù. disable´Â ¾ÏȣȭÇÏÁö ¾Ê´Â SSLÁ¢¼Ó¸¸À» ½ÃµµÇÕ´Ï´Ù. allow´Â ¿ì¼± nonSSLÁ¢¼ÓÀ» ½ÃµµÇØ ½ÇÆÐÇϸéSSL·Î ½ÃµµÇÕ´Ï´Ù. prefer(µðÆúÆ®ÀÔ´Ï´Ù)´Â ¿ì¼±SSLÁ¢¼ÓÀ» ½ÃµµÇØ ½ÇÆÐÇÏ¸é º¸ÅëÀÇ ºñSSLÁ¢¼ÓÀ¸·Î ½ÃµµÇÕ´Ï´Ù. require´Â SSLÁ¢¼Ó¿¡¼­¸¸ ½ÃµµµË´Ï´Ù.

SSL ¼­Æ÷Æ®¾øÀÌPostgreSQL°¡ ÄÄÆÄÀÏ µÇ¾úÀ» °æ¿ì, require¸¦ »ç¿ëÇÏ¸é ¿¡·¯°¡ µË´Ï´Ù. ÇÑÆí, allow¿Í prefer´Â »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, ½ÇÁ¦·Îlibpq´Â SSLÁ¢¼ÓÀ» ¹Þ¾ÆµéÀÌÁö ¾Ê½À´Ï´Ù.

requiressl

ÀÌ ¿É¼ÇÀº sslmode¼³Á¤¿¡ ÀÇÇØ ¾µ¸ð¾ø°Ô µÈ °ÍÀÌ µÇ¾ú½À´Ï´Ù.

1À¸·Î ¼³Á¤Çϸé, ¼­¹ö¿¡ SSLÁ¢¼ÓÀÌ ¿ä±¸µË´Ï´Ù. (À̰ÍÀºsslmodeÀÇrequire¿Í °°½À´Ï´Ù. ) ¼­¹ö°¡SSLÁ¢¼ÓÀ» ¹Þ¾ÆµéÀÌÁö ¾Ê´Â °æ¿ì, Libpq´Â Á¢¼ÓÀ» °ÅÀýÇÕ´Ï´Ù. 0(µðÆúÆ®)À¸·Î ¼³Á¤Çϸé, ¼­¹ö¿Í Á¶Á¤À» ½Ç½ÃÇÕ´Ï´Ù. (sslmodeÀÇprefer¿Í °°½À´Ï´Ù.) SSL ¼­Æ÷Æ® ÷ºÎ·ÎPostgreSQL¸¦ ÄÄÆÄÀÏ ÇßÀ» °æ¿ì¿¡¸¸, ÀÌ ¿É¼ÇÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

krbsrvname

Kerberos5 ¶Ç´Â GSSAPIÀÇ ÀÎÁõ½Ã¿¡ »ç¿ëµÇ´Â Kerberos ¼­ºñ½º¸íÀÔ´Ï´Ù. À̰ÍÀº ¼­¹öÀÇ Kerberos ÀÎÁõ ¼³Á¤ÀÇ ¼­ºñ½º¸í°ú ÀÏÄ¡ÇØ¾ß¸¸ ÇÕ´Ï´Ù. (Section 20.2.3µµ ÂüÁ¶ÇØ Áֽʽÿä.)

service

´Ù¸¥ ÆÄ¶ó¹ÌÅÍ¿ëÀ¸·Î »ç¿ëµÇ´Â ¼­ºñ½º¸íÀÔ´Ï´Ù. pg_service.conf³»ÀÇ Ãß°¡ÀûÀÎ Á¢¼Ó ÆÄ¶ó¹ÌÅ͸¦ º¸°üÇÏ´Â ¼­ºñ½º¸íÀ» ÁöÁ¤ÇÕ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ ¾îÇø®ÄÉÀ̼ÇÀº ¼­ºñ½º¸í¸¸À» ÁöÁ¤ÇÒ ¼ö ÀÖ¾î Á¢¼Ó ÆÄ¶ó¹ÌÅ͸¦ ÁýÁßÀûÀ¸·Î º¸¼öÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ÀÚ¼¼ÇÑ »çÇ×Àº Section 29.14 À» ÂüÁ¶ÇØ Áֽʽÿä.

ÆÄ¶ó¹ÌÅͰ¡ ÁöÁ¤µÇÁö ¾ÊÀº °æ¿ì´Â »óÀÀÇϴ ȯ°æ º¯¼ö°¡ üũµË´Ï´Ù(Section 29.12¸¦ ÂüÁ¶ÇØ Áֽʽÿä). ȯ°æ º¯¼öµµ ¼³Á¤µÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì´Â ³»Àå µðÆúÆ® °ªÀÌ ÁöÁ¤µË´Ï´Ù.

PQsetdbLogin

»õ·Ó¿î µ¥ÀÌÅͺ£À̽º ¼­¹ö Á¢¼ÓÀ» »ý¼ºÇÕ´Ï´Ù.

PGconn *PQsetdbLogin(const char *pghost,
                     const char *pgport,
                     const char *pgoptions,
                     const char *pgtty,
                     const char *dbName,
                     const char *login,
                     const char *pwd);

À̰ÍÀº ÆÄ¶ó¹ÌÅÍ ¼¼Æ®¸¦ °íÁ¤ÇÏ´Â PQconnectdbÇÁ·Î½ÃÀúÀÔ´Ï´Ù. ¼³Á¤ÇÒ ¼ö ¾ø´Â ÆÄ¶ó¹ÌÅͰ¡ Ç×»ó µðÆúÆ® °ªÀÌ µÇ´Â Á¡À» Á¦¿ÜÇϰí, µ¿ÀÏÇÑ ±â´ÉÀ» °¡Áý´Ï´Ù. °íÁ¤µÈ ÆÄ¶ó¹ÌÅÍ¿¡ ´ëÇØ¼­ NULL³ª °ø¹®ÀÚ¿­À» ÀÔ·ÂÇϸé, ±×°ÍÀº µðÆúÆ®°¡ µË´Ï´Ù.

PQsetdb

»õ·Ó°Ô µ¥ÀÌÅͺ£À̽º ¼­¹öÀÇ Á¢¼ÓÀ» »ý¼ºÇÕ´Ï´Ù.

PGconn *PQsetdb(char *pghost,
                char *pgport,
                char *pgoptions,
                char *pgtty,
                char *dbName);

ÀÌ´Â login¿Í pwd¿¡ null Æ÷ÀÎÅ͸¦ ¼³Á¤ÇÏ´Â PQsetdbLogin¸¦ È£ÃâÇÏ´Â ¸ÅÅ©·ÎÀÔ´Ï´Ù. ¸Å¿ì ¿À·¡µÈ ÇÁ·Î±×·¥ÀÇ ¹é¿£µå ȣȯ¼ºÀ» À§Çؼ­ Á¦°øµÇ°í ÀÖ½À´Ï´Ù.

PQconnectStart
PQconnectPoll

Â÷´ÜÇÏÁö ¾Ê´Â ¹æ¹ýÀ¸·Î, µ¥ÀÌÅͺ£À̽º ¼­¹öÀÇ Á¢¼ÓÀ» »ý¼ºÇÕ´Ï´Ù.

PGconn *PQconnectStart(const char *conninfo);

PostgresPollingStatusType PQconnectPoll(PGconn *conn);

ÀÌ 2°³ÀÇ ÇÔ¼ö¸¦ »ç¿ëÇϰí, ¸®¸ðÆ® I/OÀÇ ½ÇÇà½Ã¿¡ ¾îÇø®ÄÉÀÌ¼Ç threadÀÇ ½ÇÇàÀÌ Â÷´ÜµÇÁö ¾Êµµ·Ï µ¥ÀÌÅͺ£À̽º ¼­¹ö·ÎÀÇ Á¢¼ÓÀ» »ý¼ºÇÕ´Ï´Ù. ÀÌ·¯ÇÑ Á¢±Ù Æ÷ÀÎÆ®´Â I/O ÀÇ Á¾·á ´ë±â´Â PQconnectdb³»ºÎ º¸´Ù´Â ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ¸ÞÀÎ ·çÇÁ¿¡¼­ ¹ß»ý ÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰Ϳ¡ ÀÇÇØ, ¾îÇø®ÄÉÀ̼ÇÀº ´Ù¸¥ ó¸®¿Í º´ÇàÇØ¼­ °ü¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù.

PQconnectStart¿¡ °Ç³×Áøconninfo¹®ÀÚ¿­¿¡¼­ ÆÄ¶ó¹ÌÅ͸¦ °¡Á®¿Í µ¥ÀÌÅͺ£À̽º Á¢¼ÓÀÌ È®¸³µÇ°Ô µË´Ï´Ù. ÀÌ ¹®ÀÚ¿­Àº À§ÀÇPQconnectdbÀÇ °æ¿ì¿Í °°Àº Çü½ÄÀ¸·Î ±â¼úµÇ°í ÀÖ½À´Ï´Ù.

PQconnectStart¿Í PQconnectPoll´Â ÀÌÇÏÀÇ Á¦¾à¿¡¼­´Â Â÷´ÜµÇÁö ¾Ê½À´Ï´Ù.

  • The hostaddr and host parameters are used appropriately to ensure that name and reverse name queries are not made. See the documentation of these parameters under PQconnectdb above for details. --> hostaddr¿Í hostÆÄ¶ó¹ÌÅʹ ȣ½ºÆ®¸íÀ¸·ÎºÎÅÍÀÇ IPÁÖ¼Ò °Ë»öÀ̳ª È£½ºÆ®¸íÀÇ ¹Ý´ë Äõ¸®°¡ ÀϾÁö ¾Êµµ·Ï ÀûÀýÈ÷ »ç¿ëµÇ¾î¾ß ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ÆÄ¶ó¹ÌÅÍ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ »çÇ×Àº, À§ÀÇ PQconnectdb¸¦ ÂüÁ¶ÇØ Áֽʽÿä.

  • PQtrace¸¦ È£ÃâÇÏ´Â °æ¿ì´Â trace¿¡ »ç¿ëÇÏ´Â stream ¿ÀºêÁ§Æ®°¡ Â÷´ÜµÇÁö ¾Ê´Â´Ù´Â °ÍÀÌ È®½ÇÇØ¾ß ÇÕ´Ï´Ù.

  • PQconnectPoll¸¦ È£ÃâÇϱâ Àü¿¡ ¼ÒÄÏÀÌ ÀûÀýÇÑ »óÅ¿¡ ÀÖ´Ù´Â °ÍÀ» º¸ÁõÇØ¾ß ÇÕ´Ï´Ù.

nonblock Á¢¼ÓÀ» ½ÃÀÛÇÏ·Á¸é ¿ì¼±, conn=PQconnectStart(" connection_info_string ")¸¦ È£ÃâÇÕ´Ï´Ù. conn°¡ nullÀÏ °æ¿ì, libpq°¡ »õ·Î¿î PGconn±¸Á¶¸¦ ÇÒ´çÇÒ ¼ö ¾ø´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù. ±×·¸Áö ¾ÊÀº °æ¿ì´Â ÀûÀýÇÑ PGconn Æ÷ÀÎÅͰ¡ ¹ÝȯµË´Ï´Ù (´Ù¸¸, µ¥ÀÌÅͺ£À̽º¿¡ ¿Ã¹Ù¸£°Ô Á¢¼ÓµÇ´ÂÁö¸¦ ³ªÅ¸³»Áö´Â ¾Ê½À´Ï´Ù). PQconnectStart·ÎºÎÅÍ °ªÀÌ µÇµ¹¾Æ ¿Â ´Ü°è¿¡¼­, status=PQstatus(conn)¸¦ È£ÃâÇÕ´Ï´Ù. ¸¸¾à, status°¡CONNECTION_BAD¿Í µ¿ÀÏÇÑ °æ¿ì, PQconnectStart°¡ ½ÇÆÐÇÏ°Ô µË´Ï´Ù.

PQconnectStart°¡ ¼º°øÇϸé, ´ÙÀ½Àº Á¢¼Ó ¼ø¼­¸¦ ÁøÇà½Ã۱â À§Çؼ­, libpq¸¦ Æú¸µ ÇÕ´Ï´Ù. µ¥ÀÌÅͺ£À̽º Á¢¼ÓÀÇ ¹èÈÄ¿¡ ÀÖ´Â ¼ÒÄÏÀÇ ±â¼úÀÚ¸¦ ²¨³»·Á¸é , PQsocket(conn)¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌÇÏÀÇ ¹Ýº¹ÀÔ´Ï´Ù. Á÷ÀüÀÇPQconnectPoll(conn)ÀÌPGRES_POLLING_READINGÀÇ °æ¿ì, ¼ÒÄÏÀÇ read Áغñ°¡ °®ÃçÁú ¶§±îÁö ´ë±âÇÕ´Ï´Ù. (select()³ª poll()µîÀÇ ½Ã½ºÅÛ ÇÔ¼ö·Î ³ªÅ¸³³´Ï´Ù. ) ±×¸®°í ÀçÂ÷PQconnectPoll(conn)¸¦ È£ÃâÇÕ´Ï´Ù. ¹Ý´ë·Î ¸¶Áö¸· PQconnectPoll(conn)ÀÌ PGRES_POLLING_WRITINGÀÇ °æ¿ì, ¼ÒÄÏÀÇ ±âÀÔ Áغñ°¡ °®ÃçÁú ¶§±îÁö ´ë±âÇØ, ±× ÈÄ, PQconnectPoll(conn)¸¦ ÀçÂ÷ È£ÃâÇÕ´Ï´Ù. ¾ÆÁ÷PQconnectPoll¸¦ È£ÃâÇÏÁö ¾ÊÀº °æ¿ì, Áï, PQconnectStartÀÇ È£Ãâ Á÷Èķδ Á÷ÀüÀÌPGRES_POLLING_WRITING¿´À» °æ¿ì¿Í °°Àº 󸮸¦ ÇàÇÕ´Ï´Ù. ÀÌ ¹Ýº¹À»PQconnectPoll(conn)ÀÌ, Á¢¼Ó ¼ö¼ÓÀÇ ½ÇÆÐ¸¦ ³ªÅ¸³»´Â PGRES_POLLING_FAILED, ȤÀº Á¢¼Ó È®¸³¿¡ ¼º°øÇÑ °ÍÀ» ³ªÅ¸³»´Â PGRES_POLLING_OK¸¦ ¹ÝȯÇÒ ¶§±îÁö °è¼ÓÇÕ´Ï´Ù.

Á¢¼ÓÇϰí ÀÖ´Â µ¿¾ÈÀº ¾ðÁ¦µçÁö PQstatus¸¦ È£ÃâÇÏ¿©, Á¢¼Ó »óŸ¦ üũÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÇÔ¼ö°¡CONNECTION_BAD¸¦ ¹ÝȯÇÒ °æ¿ì, Á¢¼Ó ÀýÂ÷°¡ ½ÇÆÐÇÑ °ÍÀ̸ç, CONNECTION_OK¸¦ µ¹·ÁÁÖ´Â °æ¿ì, Á¢¼ÓÀÌ È®¸³µÈ °ÍÀÔ´Ï´Ù. À§¿¡¼­ ¼³¸íÇÑ ¹Ù¿Í °°ÀÌ, ÀÌ·¯ÇÑ »óŵéÀº ¸ðµÎ PQconnectPollÀÇ ¹Ýȯ °ªÀ¸·Î °ËÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ù¸¥ »óÅ´ ºñµ¿±âÀÇ Á¢¼Ó ÀýÂ÷ µ¿¾È ³ªÅ¸Àâ´Ï´Ù. À̰ÍÀº Á¢¼Ó ÇÁ·Î½ÃÀúÀÇ ÇöÀçÀÇ ´Ü°è¸¦ ³ªÅ¸³»´Â °ÍÀ¸·Î, ¿¹¸¦ µé¸é À¯Àú¿¡°Ô·ÎÀÇ Çǵå¹éÀ» Á¦°øÇÏ´Â °Í¿¡ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌÇÏ »óŰ¡ ÀÖ½À´Ï´Ù.

CONNECTION_STARTED

Á¢¼ÓÀÇ È®¸³ ´ë±â »óÅÂÀÔ´Ï´Ù.

CONNECTION_MADE

Á¢¼ÓÀº OKÀÔ´Ï´Ù. Àü¼Û ´ë±â »óÅÂÀÔ´Ï´Ù.

CONNECTION_AWAITING_RESPONSE

¼­¹ö·ÎºÎÅÍÀÇ ÀÀ´ä ´ë±â »óÅÂÀÔ´Ï´Ù.

CONNECTION_AUTH_OK

ÀÎÁõÀÌ ³¡³­ »óÅÂÀÔ´Ï´Ù. ¹é¿£µå ½ÃÀÛ ´ë±â »óÅÂÀÔ´Ï´Ù.

CONNECTION_SSL_STARTUP

SSL ¾ÏȣȭÀÇ Á¶Á¤ »óÅÂÀÔ´Ï´Ù.

CONNECTION_SETENV

ȯ°æÀÌ Á¦°øÇÏ´Â ÆÄ¶ó¹ÌÅÍ ¼³Á¤ÀÇ Á¶Á¤ »óÅÂÀÔ´Ï´Ù.

ÀÌ·¯ÇÑ Á¤¼ö°¡ (ȣȯ¼º À¯Áö¸¦ À§ÇØ) ³²´Â ´Ù¸é, ¾îÇø®ÄÉÀ̼ÇÀº ƯÁ¤ÇÑ ¼ø¼­·Î À̵éÀÌ ¹ß»ýµÇ°Å³ª ÀüÇô ±×·¸Áö ¾Ê°Å³ª, ¹®¼­È­µÈ °ªÀÇ »óÅ·ΠÇ×»ó ¸Ó¹«´Â °Í¿¡ °áÄÚ ÀÇÁ¸Çؼ­´Â ¾ÊµË´Ï´Ù. ¾îÇø®ÄÉÀ̼ÇÀº ÀÌÇÏ¿¡ ³ªÅ¸³»µµ·Ï ÇØ¾ß ÇÕ´Ï´Ù.

switch(PQstatus(conn))
{
    case CONNECTION_STARTED:
        feedback = "Connecting...";
        break;

    case CONNECTION_MADE:
        feedback = "Connected to server...";
        break;
.
.
.
    default:
        feedback = "Connecting...";
}

PQconnectPoll¸¦ »ç¿ëÇÏ´Â °æ¿ì, connect_timeoutÁ¢¼Ó ÆÄ¶ó¹ÌÅÍ´Â ¹«½ÃµË´Ï´Ù. °æ°ú½Ã°£ÀÌ ³Ê¹« ±æÁö ¾î¶³ÁöÀÇ ÆÇÁ¤Àº ¾îÇø®ÄÉÀ̼ÇÀÇ Ã¥ÀÓÀ¸·Î °áÁ¤µË´Ï´Ù. ±×·¸Áö ¾ÊÀ¸¸é, PQconnectStartÀÇ µÚÀÇPQconnectPollÀÇ ·çÇÁ´Â PQconnectdb¿Í °°°Ô µË´Ï´Ù.

PQconnectStart°¡ NULLÀÌ ¾Æ´Ñ Æ÷ÀÎÅ͸¦ µ¹·ÁÁÖ¾úÀ» °æ¿ì, 󸮸¦ Á¾·áÇÏ·Á¸é, ±¸Á¶³ª °ü·ÃµÇ´Â ¸Þ¸ð¸® ºí·ÏÀ» ó¸®Çϱâ À§ÇØ PQfinish¸¦ È£ÃâÇØ¾ß ÇÕ´Ï´Ù. ÀÌ Ã³¸®´Â Á¢¼Ó ½Ãµµ°¡ ½ÇÆÐÇ߰ųª ÁߴܵǴ °æ¿ì¿¡, ¹Ýµå½Ã ½ÇÇàµÇ¾î¾ß ÇÕ´Ï´Ù.

PQconndefaults

µðÆúÆ®ÀÇ Á¢¼Ó ¿É¼ÇÀ» ¹ÝȯÇÕ´Ï´Ù.

PQconninfoOption *PQconndefaults(void);

typedef struct
{
    char   *keyword;   /* ÀÌ ¿É¼ÇÀÇ Å°¿öµå */
    char   *envvar;    /* ´ëü µÇ´Â ȯ°æ º¯¼öÀÇ À̸§ */
    char   *compiled;  /* ´ëü µÇ´Â ÄÄÆÄÀϽÿ¡ µðÆúƮġ */
    char   *val;       /* ¿É¼ÇÀÇ ÇöÀç °ª, ȤÀº NULL */
    char   *label;     /* Á¢¼Ó ´ÙÀ̾ó·Î±× ³»ÀÇ ÇØ´ç ÇʵåÀÇ ¶óº§ */
    char   *dispchar;  /* Á¢¼Ó ´ÙÀ̾ó·Î±× ³»ÀÇ ÇØ´ç Çʵ忡¼­ Ç¥½ÃÇÏ´Â ¹®ÀÚ
                          °ª:
                          ""        ÀÔ·ÂµÈ °ªÀ» ±×´ë·Î Ç¥½Ã
                          "*"       °ªÀ» ¼û±â´Â ÆÐ½º¿öµå Çʵå¿ë
                          "D"       µð¹ö±× ¿É¼Ç. µðÆúÆ®·Î ¾Æ¹«°Íµµ Ç¥½ÃÇÏÁö ¾Ê½À´Ï´Ù */
    int     dispsize;  /* ´ÙÀ̾ó·Î±×¿ëÀÇ ÇʵåÀÇ Å©±â(¹®ÀÚ ¼ö ´ÜÀ§) */
} PQconninfoOption;

Á¢¼Ó ¿É¼ÇÀÇ ¹è¿­À» ¹ÝȯÇÕ´Ï´Ù. ÀÌ´Â »ç¿ë °¡´ÉÇÑPQconnectdb ¿É¼Ç ¸ðµÎ³ª, ±× ½ÃÁ¡¿¡¼­ÀÇ µðÆúƮġ¸¦ °áÁ¤Çϱâ À§Çؼ­ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¹Ýȯ °ªÀº PQconninfoOption±¸Á¶ÀÇ ¹è¿­ Æ÷ÀÎÅÍ·Î, keywordÆ÷ÀÎÅͰ¡ NULLÀÌ µÇ´Â Ç׸ñÀÌ ¹è¿­ÀÇ ¸¶Áö¸·¿¡ ¿É´Ï´Ù. ¸Þ¸ð¸®¸¦ È®º¸µÉ ¼ö ¾ø¾ú´ø °æ¿ì´Â null Æ÷ÀÎÅ͸¦ ¹ÝȯÇÕ´Ï´Ù. ÇöÀçÀÇ µðÆúƮġ(val Çʵå)´Â ȯ°æ º¯¼ö³ª ´Ù¸¥ ¹®¸Æ¿¡ ÀÇÁ¸ÇÕ´Ï´Ù. È£ÃâÃø¿¡¼­´Â Á¢¼Ó ¿É¼ÇÀÇ Á¤º¸´Â read Àü¿ëÀ¸·Î¸¸ ´Ù·ï¾ß ÇÕ´Ï´Ù.

¿É¼Ç ¹è¿­À» ó¸®ÇÑ ÈÄ¿¡´Â PQconninfoFree¸¦ »ç¿ëÇØ ÇØÁ¦ÇÕ´Ï´Ù. ÀÌ Ã³¸®¸¦ ÇÏÁö ¾ÊÀ¸¸éPQconndefaults°¡ È£ÃâµÉ ¶§¸¶´Ù Á¶±Ý¾¿ ¸Þ¸ð¸® ¸®Å©°¡ ¹ß»ýÇÕ´Ï´Ù.

PQfinish

¼­¹ö¿ÍÀÇ Á¢¼ÓÀ» ´Ý½À´Ï´Ù. ¶ÇÇÑ, PGconn¿ÀºêÁ§Æ®°¡ Â÷ÁöÇÏ´Â ¸Þ¸ð¸®µµ ÇØÁ¦ÇÕ´Ï´Ù.

void PQfinish(PGconn *conn);

ºñ·Ï ¼­¹öÀÇ Á¢¼Ó ½Ãµµ°¡ ½ÇÆÐÇØµµ(PQstatus¿¡ ÀÇÇØ Áö½ÃµÈ), ¾îÇø®ÄÉÀ̼ÇÀºPQfinish¸¦ È£ÃâÇØ PGconn¿ÀºêÁ§Æ®°¡ Â÷ÁöÇÏ´Â ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇØ¾ß ÇÕ´Ï´Ù. ±×¸®°íPQfinish°¡ È£ÃâµÈ ÈÄ¿¡´Â PGconn Æ÷ÀÎÅ͸¦ ´Ù½Ã »ç¿ëÇØ¼­´Â ¾ÈµË´Ï´Ù.

PQreset

¼­¹ö·ÎÀÇ Åë½Å ä³ÎÀ» Àç¼³Á¤ ÇÕ´Ï´Ù.

void PQreset(PGconn *conn);

ÀÌ ÇÔ¼ö´Â ¼­¹ö·ÎÀÇ Á¢¼ÓÀ» ´Ý°í, ÀÌÀü¿¡ »ç¿ëÇÑ ÆÄ¶ó¹ÌÅ͸¦ ¸ðµÎ »ç¿ëÇϰí, µ¿ÀÏÇÑ ¼­¹ö¿¡ »õ·Î¿î Á¢¼ÓÀ» È®¸³ÇÕ´Ï´Ù. ÀÌ´Â ÀÛ¾÷ Áß¿¡ Á¢¼ÓÀÌ »ç¶óÁ³À» °æ¿ì, ¿¡·¯ º¹±¸¿¡ µµ¿òÀÌ µÉ °ÍÀÔ´Ï´Ù.

PQresetStart
PQresetPoll

ºñºí·ÎÅ· ¹æ½Ä¿¡¼­, ¼­¹ö·ÎÀÇ Á¢¼Ó ä³ÎÀ» Àç¼³Á¤ ÇÕ´Ï´Ù

int PQresetStart(PGconn *conn);

PostgresPollingStatusType PQresetPoll(PGconn *conn);

ÀÌ·¯ÇÑ ÇÔ¼ö´Â ¼­¹ö·ÎÀÇ Á¢¼ÓÀ» ´Ý°í ±×¸®°í ÀçÂ÷, ÀÌÀü »ç¿ëÇÑ ÆÄ¶ó¹ÌÅ͸¦ ¸ðµÎ »ç¿ëÇϰí, °°Àº ¼­¹ö¿Í »õ·Î¿î Á¢¼ÓÀ» È®¸³ÇÏ·Á°í ÇÕ´Ï´Ù. À̰͵éÀº ÀÛ¾÷ Áß Á¢¼ÓÀÌ ¾ø¾îÁ³À» °æ¿ìÀÇ ¿¡·¯ º¹±¸¿¡ µµ¿òÀÌ µÉ °ÍÀÔ´Ï´Ù. PQreset(À§ÀÇ)¿ÍÀÇ Â÷ÀÌ´Â ÀÌ 2°³ÀÇ ÇÔ¼ö°¡ nonblock ¹æ½Ä¿¡¼­ µ¿ÀÛÇÏ´Â °ÍÀÔ´Ï´Ù. ¶ÇÇÑ, ÀÌ·¯ÇÑ ÇÔ¼ö´Â PQconnectStart³ª PQconnectPoll¿Í °°Àº Á¦¾àÀ» ¹Þ½À´Ï´Ù.

Á¢¼Ó Àç¼³Á¤À» ½ÃÀÛÇÏ·Á¸é , PQresetStart¸¦ È£ÃâÇÕ´Ï´Ù. ÀÌ ÇÔ¼ö°¡ 0À» µ¹·ÁÁÖ´Â °æ¿ì, Àç¼³Á¤¿¡ ½ÇÆÐÇÑ °ÍÀÔ´Ï´Ù. ¹Ýȯ °ªÀÌ 1À̶ó¸é, PQconnectPoll¸¦ »ç¿ëÇØ Á¢¼ÓÀ» È®¸³Çß´ø °Í°ú °°ÀÌ, PQresetPoll¸¦ »ç¿ëÇØ Àç¼³Á¤ Æú¸µÀ» ½Ç½ÃÇÕ´Ï´Ù.