| 1. PostgreSQLÀÇ C ÀÎÅÍÆäÀ̽º - libpq 
                Áö±Ý±îÁö´Â PostgreSQLÀÇ SQLƯ¡À» »ìÆìº¸¾Ò´Ù. 
                ÀÌÁ¦ºÎÅÍ´Â SQL ¿ÜÀÇ ±â´ÉµéÀ» ÁßÁ¡À¸·Î »ìÆìº¸µµ·Ï ÇϰڴÙ. ±× 
                ù ¹øÂ°·Î¼ PostgreSQLÀÇ C ÀÎÅÍÆäÀ̽ºÀÎ libpq¿¡ ´ëÇØ¼ ¾Ë¾Æº¸µµ·Ï 
                ÇÏÀÚ. libpq´Â ¸»±×´ë·Î PostgreSQLÀÇ µ¥ÀÌÅͺ£À̽º¸¦ 
                ´Ù·ç´Âµ¥ »ç¿ëµÇ´Â C ¶óÀ̺귯¸®ÀÌ´Ù. »ç½Ç »ç¿ëÀÚ ÇÁ·Î±×·¥ÀÎ psqlµµ 
                libpq¸¦ »ç¿ëÇÏ¿© ÀÛ¼ºÇÑ ¾îÇø®ÄÉÀ̼ÇÀÇ ÀÏÁ¾ÀÌ´Ù. ¸¸µé±â¿¡ µû¶ó¼ 
                psql º¸´Ù ´õ ¶Ù¾î³ »ç¿ëÀÚ ÇÁ·Î±×·¥À» ¾ó¸¶µçÁö ¸¸µé ¼ö ÀÖ´Ù. PostgreSQLÀ» Ç¥ÁØÀ¸·Î ¼³Ä¡ÇÏ¿´´Ù¸é, libpq´Â 
                /usr/local/pgsql/lib¾È¿¡ ¸ð¿©ÀÖÀ» °ÍÀÌ´Ù. ÀÌ µð·ºÅ丮 ¾ÈÀÇ libpq.a´Â 
                Á¤Àû ¶óÀ̺귯¸®À̰í libpq.so.1Àº µ¿Àû ¶óÀ̺귯¸®ÀÌ´Ù. ¼³Ä¡ ½Ã¿¡ 
                /ect/ld.so.conf ÆÄÀÏ¿¡ /usr/local/pgsql/lib¸¦ Ãß°¡Çϰí ldconfig¸¦ 
                ¼öÇàÇÑ °æÇèÀÌ ÀÖÀ» °ÍÀÌ´Ù. À̰ÍÀº PostgreSQL ÀÀ¿ë ÇÁ·Î±×·¥ ¼öÇà¿¡ 
                ÇÊ¿äÇÑ libpq µ¿Àû ¶óÀ̺귯¸®¸¦ ÀÚµ¿ÀûÀ¸·Î ¸µÅ©Çϱâ À§ÇØ ÇÊ¿äÇÑ 
                ÀÛ¾÷À̾ú´Ù. Á¶±Ý ¹þ¾î³ª´Â À̾߱âÁö¸¸ PHP/FI¿¡¼ PostgreSQLÀ» 
                »ç¿ëÇϵµ·Ï ¼³Á¤ÇÏ¿´´Âµ¥, httpd¸¦ ¶ç¿ï ¶§ libpq.so¸¦ ãÁö ¸øÇϰڴٴ 
                ¸Þ½ÃÁö°¡ ³ª¿Â´Ù¸é libpq.so.1À» libpq.so·Î ½Éº¼¸¯ ¸µÅ©Çϰí /etc/ld.so.conf 
                ÆÄÀÏ¿¡ /usr/local/pgsql/libÀ» Ãß°¡ÇÑ ´ÙÀ½, ldconfig¸¦ ¼öÇàÇϸé 
                µÈ´Ù. libpq¿¡ ´ëÇÑ ¿Â¶óÀÎ ¼³¸íÀº 'man libpq'·Î ã¾Æº¼ ¼ö ÀÖ°í, 
                ¿¹Á¦ ¼Ò½º ÆÄÀÏÀº PostgreSQL ¼Ò½º ÆÄÀÏÀÇ ¾ÐÃàÀ» Ǭ µð·ºÅ丮¸¦ 
                ±âÁØÀ¸·Î º¼ ¶§, src/test/examples µð·ºÅ丮¿¡ ÀÖ´Ù. ÀÌÁ¦ º»·ÐÀ¸·Î 
                µé¾î°¡º¸ÀÚ.   2. libpq ÀÇ ÇÔ¼öµé 
                libpq´Â PostgreSQLÀÇ ¾îÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¡¹Ö 
                ÀÎÅÍÆäÀ̽ºÀÌ´Ù. libpq´Â Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ÀÌ PostgreSQL ¹é¿£µå 
                ¼¹ö¿¡°Ô ÁúÀǸ¦ Àü´ÞÇÏ°í °á°ú¸¦ ȸ¼öÇÏ´Â ¿ªÇÒÀ» ÇÏ´Â ¶óÀ̺귯¸®ÀÌ´Ù. 
                libpq¸¦ »ç¿ëÇÏ´Â ÇÁ·ÐÆ®¿£µå ¾îÇø®ÄÉÀ̼ÇÀº libpq-fe.h Çì´õ ÆÄÀÏÀ» 
                Æ÷ÇÔÇϰí libpq ¶óÀ̺귯¸®¿Í ¸µÅ©µÇ¾î¾ß ÇÑ´Ù´Â Á¡À» ±â¾ïÇÏÀÚ.¸ÕÀú libpq¿¡ Æ÷ÇԵǾî ÀÖ´Â ¶óÀ̺귯¸® ÇÔ¼öµéÀ» »ìÆìº¸µµ·Ï ÇÑ´Ù.
   1) µ¥ÀÌÅͺ£À̽º ÃʱâÈ¿Í Á¦¾î¿Í °ü·ÃÇÑ È¯°æº¯¼ö 
                Linux ȯ°æÀÇ ´Ù¸¥ ¾îÇø®ÄÉÀ̼ǵé°ú ¸¶Âù°¡Áö·Î 
                libpq¿¡¼µµ ÃʱâÈ¿Í ¾îÇø®ÄÉÀ̼ÇÀÇ ÇൿÀ» Á¦¾îÇϱâ À§ÇÏ¿© ȯ°æº¯¼ö¸¦ 
                »ç¿ëÇÑ´Ù. ´ÙÀ½ÀÇ È¯°æº¯¼öÀÇ °ªÀÌ libpq¿¡¼ ±âº»°ªÀ¸·Î »ç¿ëµÈ´Ù.
 
                        
                            | PGHOST           ±âº» 
                            ¼¹ö¸íÀ» ÁöÁ¤ÇÑ´Ù.PGOPTIONS      º¤¿£µå 
                            ¼¹ö¸¦ À§ÇÑ Ãß°¡ÀûÀÎ ½Ç½Ã°£ ¿É¼ÇÀ»                        ¼³Á¤ÇÑ´Ù.
 PGPORT           º¤¿£µå 
                            ¼¹ö¿Í Åë½ÅÇÒ ±âº» Æ÷Æ®¸¦ ÁöÁ¤ÇÑ´Ù.
 PGTTY             º¤¿£µå 
                            ¼¹ö°¡ Ãâ·ÂÇÏ´Â µð¹ö±ë ¸Þ½ÃÁö¸¦
 ó¸®ÇÒ 
                            ÆÄÀÏÀ̳ª tty¸¦ ÁöÁ¤ÇÑ´Ù.
 PGDATABASE   ±âº» 
                            µ¥ÀÌÅͺ£À̽º ¸íÀ» ÁöÁ¤ÇÑ´Ù.
 PGREALM         Kerberos 
                            ÀÎÁõ ½Ã½ºÅÛÀÌ »ç¿ëµÉ ¶§¿¡¸¸
 ¼³Á¤ÇÑ´Ù.
 |    2) µ¥ÀÌÅͺ£À̽º Á¢¼Ó ÇÔ¼ö 
                ´ÙÀ½ÀÇ ÇÔ¼öµéÀº µ¥ÀÌÅͺ£À̽º Á¢¼Ó°ú °ü·ÃµÈ 
                °ÍµéÀÌ´Ù. PQsetdb¼¹ö¿Í 
                »õ·Î¿î ¿¬°áÀ» ¸¸µé¾î ÁØ´Ù.
 
 
                        
                            | PGconn *PQsetdb(char 
                            *pghost,char 
                            *pgport,
 char 
                            *pgoptions,
 char 
                            *pgtty,
 char 
                            *dbName);
 |    
                ÀÎÀÚ°¡ NULLÀ̸é, ÇØ´çÇϴ ȯ°æº¯¼ö¸¦ °Ë»çÇϰí, 
                ȯ°æº¯¼ö°¡  ¼³Á¤µÇÁö ¾Ê¾Ò´Ù¸é ³»ºÎ ±âº» ¼³Á¤°ªÀ» »ç¿ëÇÑ´Ù. 
                ÀÌ ÇÔ¼ö´Â Ç×»ó À¯È¿ÇÑ PGconn Æ÷ÀÎÅ͸¦ ¹ÝȯÇϴµ¥, PQstatus¸¦ 
                »ç¿ëÇÏ¿© ÁúÀǸ¦ ¼¹ö·Î º¸³»±â Àü¿¡ ¿¬°áÀÌ È®½ÇÈ÷ ¼º¸³µÇ¾ú´ÂÁö¸¦ 
                °Ë»çÇÒ ¼ö ÀÖ´Ù. libpq »ç¿ëÀÚ´Â PGconnÀ» °ü¸®Çϴµ¥ À¯ÀÇÇØ¾ß 
                ÇÑ´Ù. PGconn ±¸Á¶Ã¼´Â ¹Ì·¡¿¡ º¯°æµÉ ¼öµµ Àֱ⠶§¹®¿¡ Á÷Á¢ ±¸Á¶Ã¼ÀÇ 
                Çʵ带 ÂüÁ¶ÇÏ´Â °ÍÀº ÇÇÇÏ´Â°Ô ÁÁ´Ù.
 
                        
                            | ¿¹)PGconn 
                            *conn;
 /* 192.168.1.2 È£½ºÆ®ÀÇ 5432 Æ÷Æ®¸¦ ÅëÇÏ¿© 
                            web µ¥ÀÌÅͺ£À̽º¿¡ Á¢¼ÓÇÑ´Ù. */
 PQsetdb("192.168.1.2", 
                            "5432", NULL, NULL, "web");
 |                  
                PQfinish¼¹ö¿ÍÀÇ Á¢¼ÓÀ» Á¾·áÇÑ´Ù. ¶ÇÇÑ PGconn ±¸Á¶Ã¼¿¡ »ç¿ëµÈ ¸Þ¸ð¸®¸¦ 
                ¹ÝȯÇÑ´Ù. PQfinish¸¦ È£ÃâÇÑ ÀÌÈÄ¿¡´Â PGconn Æ÷ÀÎÅ͸¦ »ç¿ëÇÏÁö 
                ¸»¾Æ¾ß ÇÑ´Ù.
 
 
                        
                            | void PQfinish(PQconn 
                            *conn) |    
                PQreset¼¹ö¿ÍÀÇ 
                Á¢¼Ó Æ÷Æ®¸¦ ¸®¼ÂÇÑ´Ù. Áï, ¼¹ö¿¡ ¿¬°áµÈ IPC ¼ÒÄÏÀ» ´Ý°í µ¿ÀÏÇÑ 
                ¼¹ö¿¡ Á¢¼ÓÀ» »õ·Ó°Ô ½ÃµµÇÑ´Ù.
 
 
                        
                            | void PQreset(PGconn 
                            *conn) |    
                PQtrace¼¹ö¿Í 
                ÇÁ·ÐÆ®¿£µå »çÀÌ¿¡ ¿À°¡´Â ¸Þ½ÃÁö¸¦ ÃßÀûÇÑ´Ù. ÃßÀû ¸Þ½ÃÁö´Â debug_port 
                ÆÄÀÏ ½ºÆ®¸²À¸·Î Ãâ·ÂµÈ´Ù.
 
 
                        
                            | void PQtrace(PGconn 
                            *conn, FILE* debug_port); |    3) ÁúÀÇ ½ÇÇà ÇÔ¼ö 
                PQexecÁúÀǸ¦ 
                ¼¹ö¿¡ Àü´ÞÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ÁúÀǰ¡ ¼º°øÀûÀ¸·Î ¼öÇàµÇ¸é PGresult 
                Æ÷ÀÎÅ͸¦ µ¹·ÁÁÖ°í, ±×·¸Áö ¾ÊÀ¸¸é NULLÀ» µ¹·ÁÁØ´Ù. NULLÀÌ ¹ÝȯµÇ¸é, 
                PQerrorMessage¸¦ »ç¿ëÇÏ¿© ÇØ´ç ¿¡·¯¿¡ ´ëÇÑ Á» ´õ ÀÚ¼¼ÇÑ Á¤º¸¸¦ 
                ¾òÀ» ¼ö ÀÖ´Ù.
 
 
                        
                            | PGresult *PQexec(PGconn 
                            *conn, char *query); |  PGresult ±¸Á¶Ã¼¿¡´Â ¼¹ö°¡ ¹ÝȯÇÑ ÁúÀÇ 
                °á°ú°¡ µé¾îÀÖ´Ù. ÇÁ·Î±×·¡¸Ó´Â PGresult¸¦ Á¶½É½º·´°Ô °ü¸®ÇØ¾ß 
                ÇÒ Çʿ伺ÀÌ ÀÖ´Ù. ÁúÀÇ °á°ú¸¦ ȸ¼öÇÏ´Â µ¥ »ç¿ëµÇ´Â Á¢±Ù ÇÔ¼ö¸¦ 
                ¾Æ·¡¿¡ ¼³¸íÇÑ´Ù. PGresult ±¸Á¶Ã¼´Â PGconn ±¸Á¶Ã¼¿Í ¸¶Âù°¡Áö·Î 
                ¾ÕÀ¸·Î ¾ðÁ¦µçÁö º¯ÇÒ °¡´É¼ºÀÌ Àֱ⠶§¹®¿¡ Á÷Á¢ ±¸Á¶Ã¼ÀÇ Çʵ带 
                ÂüÁ¶ÇÏ´Â °ÍÀº ÇÇÇϱ⠹ٶõ´Ù.
 PQresultStatusÁúÀÇ °á°ú »óŸ¦ ¾Ë·ÁÁØ´Ù.
 
 
                        
                            | ExecStatusType 
                            PQresultStatus(PGresult *res); |    ¹Ýȯ°ªÀÎ ExecStatusTypeÀº ´ÙÀ½ Áß Çϳª°¡ µÉ 
                ¼ö ÀÖ´Ù.
 
                        
                            | PGRES_EMPTY_QUERY 
                                   : ÁúÀǰ¡ 
                            ºñ¾î ÀÖ´Â °æ¿ìPGRES_COMMEND_OK        : 
                            °ªÀ» ¹ÝȯÇÏÁö ¾Ê´Â ÁúÀÇ ¸í·ÉÀÎ °æ¿ì
 PGRES_TUPLES_OK 
                                        : 
                            ÁúÀǰ¡ ¼º°øÀûÀ¸·Î ¼öÇàµÇ¾î¼ Æ©ÇÃÀ» ¹ÝȯÇÑ °æ¿ì
 PGRES_BAD_RESPONSE      : 
                            ¼¹ö·ÎºÎÅÍ ±â´ëÇÏÁö ¾ÊÀº ÀÀ´äÀ» ¹ÞÀº °æ¿ì
 PGRES_NONFATAL_ERROR 
                             : Ä¡¸íÀûÀÌÁö ¾ÊÀº ¿¡·¯°¡ ¹ß»ýÇÑ °æ¿ì
 PGRES_FATAL_ERROR 
                                    : 
                            Ä¡¸íÀûÀÎ ¿¡·¯°¡ ¹ß»ýÇÑ °æ¿ì
 PGRES_COPY_OUT
 PGRES_COPY_IN
 |  °á°úÀÇ »óŰªÀÌ PGRES_TUPLES_OKÀÌ¸é ¹ÝȯµÈ 
                Æ©ÇÃÀ» ȸ¼öÇϱâ À§ÇØ ´ÙÀ½ÀÇ ÇÔ¼öµéÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
 PQntuplesÁúÀÇ °á°úÀÇ Æ©ÇÃ(ÀνºÅϽº ¶Ç´Â ·¹ÄÚµå, ·Î¿ì)ÀÇ °³¼ö¸¦ ¹ÝȯÇÑ´Ù.
 
 
                        
                            | int PQntuples(PGresult 
                            *res); |          
                PQftypeÀúÀåÇÏ´Â 
                Çʵå À妽ºÀÇ Çʵå ŸÀÔÀ» µ¹·ÁÁØ´Ù. ¹ÝȯµÇ´Â Á¤¼ö°ªÀº ³»ºÎÀûÀ¸·Î 
                Á¤ÀǵǾî ÀÖ´Â text, int4 µîÀ» ³ªÅ¸³»´Â °ªÀÌ´Ù.
 
 
                        
                            | Oid PQftype(PGresult 
                            *res, int field_num); |    
                PQfsizeÁöÁ¤ÇÏ´Â 
                Çʵå À妽º¿Í °ü·ÃµÈ ÇʵåÀÇ Å©±â¸¦ ¹ÙÀÌÆ® ¼ö·Î µ¹·ÁÁØ´Ù. ¹ÝȯµÈ 
                Å©±â°¡ -1ÀÌ¸é °¡º¯ ±æÀÌÀÇ ÇʵåÀÓÀ» ³ªÅ¸³½´Ù.
 
 
                        
                            | int PQfsize(PGresult 
                            *res, int field_index); |    
                PQgetvalueÇʵåÀÇ À̸§À» ÁöÁ¤ÇÏ¸é ±× ÇʵåÀÇ °ªÀ» µ¹·ÁÁØ´Ù. PQgetvalue¿¡¼ 
                ¹ÝȯµÇ´Â °ªÀº ÇʵåÀÇ °ªÀ» ³Î·Î ³¡³ª´Â ¾Æ½ºÅ° ¹®ÀÚ¿·Î º¯È¯ÇÑ 
                °ªÀÌ´Ù. ÁúÀǰ¡ ¹ÙÀ̳ʸ®(BINARY) Ä¿¼ÀÏ °æ¿ì¿¡ ¹ÝȯµÇ´Â °ªÀº 
                ¼¹öÀÇ ³»ºÎÀûÀÎ Æ÷¸ËÀÇ ¹ÙÀ̳ʸ® ŸÀÔÀÌ´Ù. ÀÌ °æ¿ì¿¡ ÇØ´ç µ¥ÀÌÅ͸¦ 
                ¿Ã¹Ù¸¥ CŸÀÔÀ¸·Î º¯È¯ÇØ¾ß ÇÑ´Ù. PQgetvalue°¡ ¹ÝȯÇÏ´Â °ªÀº PGresult 
                ±¸Á¶Ã¼ÀÇ ÇØ´ç Çʵ忡 ´ëÇÑ Æ÷ÀÎÅÍÀ̹ǷΠPGresult¸¦ ÇØÁ¦ÇÏ°í ³ 
                ´ÙÀ½¿¡µµ »ç¿ëÇÏ·Á¸é ±× °ªÀ» º¹»çÇØ µÖ¾ß ÇÑ´Ù.
 
 
                        
                            | char *PQgetvalue(PGresult 
                            *res, int tup_num, int field_num); |        
                PQoidStatus¸¶Áö¸·À¸·Î ¼öÇàÇÑ ÁúÀǰ¡ INSERT ¸í·ÉÀÏ ¶§, »ðÀÔµÈ Æ©ÇÃÀÇ °´Ã¼ 
                ¾ÆÀ̵𸦠¹®ÀÚ¿·Î µ¹·ÁÁØ´Ù. ±× ¿Ü¿¡´Â ºó ¹®ÀÚ¿À» µ¹·ÁÁØ´Ù.
 
 
                        
                            | char *PQoidStatus(PGresult 
                            *res); |    
                PQdisplayTuplesÀÓÀÇÀÇ ¸ðµç ·¹Äڵ带 Ãâ·ÂÇÑ´Ù. ¼±ÅÃÀûÀ¸·Î ŸÀÌÆ²°ÝÀÎ ¼Ó¼º À̸§ÀÇ 
                Ãâ·Â¿©ºÎ¿Í Ãâ·Â ½ºÆ®¸²À» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ´ëÇ¥ÀûÀ¸·Î psqlÀÌ Å×À̺íÀÇ 
                ³»¿ëÀ» Ãâ·ÂÇϱâ À§ÇØ PQdisplayTuples ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.
 
 
                        
                            | void PQprintTuples(PGresult *res,
 FILE 
                            *fout,     /* Ãâ·Â°á°ú¸¦ º¸³¾ 
                            ÆÄÀÏ ½ºÆ®¸² */
 int fillAlign, 
                            /*Çʵ带 Á¤·ÄÇϱâ À§ÇØ ºóºÎºÐÀ» °ø¹éÀ¸·Î ä¿ò¿©ºÎ*/
 char *fieldSep, /* Çʵå 
                            ±¸ºÐÀÚ·Î »ç¿ëÇÒ ¹®ÀÚ¿, ÀϹÝÀûÀ¸·Î '|'¸¦ »ç¿ë */
 int printHeader, /* Çì´õÀÇ 
                            Ãâ·Â ¿©ºÎ */
 int quit
 );
 |    
                PQclearPGresult¿Í 
                °ü·ÃµÈ ³»¿ëÀ» ÇØÁ¦ÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ÁúÀÇ °á°ú°¡ ´õ ÀÌ»ó ÇÊ¿ä 
                ¾øÀ» ½Ã¿¡´Â ¹Ýµå½Ã ÇØÁ¦ÇÏ¿©¾ß ÇÑ´Ù. ÀÌ·¸°Ô ÇÏÁö ¾ÊÀ¸¸é ÇÁ·ÐÆ®¿£µå 
                ÀÀ¿ëÇÁ·Î±×·¥¿¡¼ ¸Þ¸ð¸®°¡ À¯ÃâµÇ´Â °á°ú¸¦ ³º´Â´Ù.
   4) COPY ÁúÀÇ¿Í °ü·ÃµÈ ÇÔ¼ö 
                PQgetlineÀÌ ÇÔ¼ö´Â ´º¶óÀÎÀ¸·Î ³¡³ª´Â ¹®ÀÚ¿À» ÀÐ¾î¼ string ¹öÆÛ¿¡
 
 
                        
                            | void PQclear(PQresult 
                            *res); |  ÀúÀåÇÑ´Ù. fgets¿Í ºñ½ÁÇϰÔ, length-1 
                ¹®ÀÚ¸¦ stringÀ¸·Î º¹»çÇϰí, ¸¶Áö¸·ÀÇ ´º¶óÀÎ ¹®ÀÚ¸¦ ³Î ¹®ÀÚ·Î 
                º¯È¯ÇÑ´Ù´Â °ÍÀÌ gets¿Í´Â ´Ù¸¥ Á¡ÀÌ´Ù.
 
 
                        
                            | int PQgetlline(PQconn 
                            *conn, char *string, int length); |  PQgetlineÀº ÀÐ¾î µéÀÌ´Â µµÁß¿¡ EOF¸¦ 
                ¸¸³ª¸é EOF¸¦ ¹ÝȯÇϰí, Àüü ¶óÀÎÀ» Àоîµé¿´´Ù¸é 0À», ´º¶óÀÎÀ» 
                Àб⵵ Àü¿¡ ¹öÆÛ°¡ Â÷¹ö¸®¸é 1À» ¹ÝȯÇÑ´Ù. ¾îÇø®ÄÉÀ̼ǿ¡¼´Â 
                ÇϳªÀÇ ´º¶óÀÎÀÌ "."·Î ÀԷµǴ Áö¸¦ °Ë»çÇÏ¿©¾ß ÇÑ´Ù. 
                ÀÌ ¹®ÀÚ´Â ¼¹ö°¡ copy ¸í·ÉÀÇ °á°ú Àü¼ÛÀ» Á¾·áÇÑ´Ù´Â °ÍÀ» ¶æÇÑ´Ù. 
                ±×¸®°í length-1 º¸´Ù Å« ±æÀÌÀÇ ¶óÀÎÀ» ÀоîµéÀÏ ¼öµµ ÀÖÀ¸¹Ç·Î 
                PQgetlineÀÇ ¹Ýȯ°ªÀ» üũÇÏ¿©¾ß ÇÑ´Ù.
 PQputlineÀÌ ÇÔ¼ö´Â ³Î·Î ³¡³ª´Â stringÀ» ¼¹ö¿¡ Àü¼ÛÇÑ´Ù. ¾îÇø®ÄÉÀ̼ǿ¡¼´Â 
                ¸¶Áö¸· ¹®ÀÚ "."¸¦ µ¥ÀÌÅÍ Àü¼ÛÀÌ ¿Ï·áµÇ¾ú´Ù´Â °ÍÀ» 
                ¼¹ö¿¡°Ô Á¤È®È÷ ¾Ë¸®±â À§ÇØ º¸³»¾ß ÇÑ´Ù.
 
 
                        
                            | void PQputline(PGconn 
                            *conn, char *string); |    
                PQendcopy¼¹ö°¡ copy¸¦ ³¡³¾ ¶§±îÁö ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ±â´Ù¸®µµ·Ï ÇÑ´Ù. ÀÌ 
                ÇÔ¼ö´Â PQputlineÀ» »ç¿ëÇÏ¿© ¼¹ö¿¡°Ô ¸¶Áö¸· ¹®ÀÚ¿À» º¸³ÂÀ» 
                °æ¿ì³ª PQgetlineÀ» »ç¿ëÇÏ¿© ¼¹ö¿¡°Ô¼ ¸¶Áö¸· ¹®ÀÚ¿À» ȸ¼öÇÏ¿´À» 
                °æ¿ì¿¡ »ç¿ëÇÑ´Ù. ÀÌ ÇÔ¼öÀÇ ¹Ýȯ°ª¿¡ µû¶ó, ¼¹ö´Â ´ÙÀ½ ÁúÀǸ¦ 
                ¹Þ¾ÆµéÀÏ Áغñ¸¦ ÇÑ´Ù. ¼º°øÀûÀ¸·Î ¼öÇàµÇ¾ú´Ù¸é 0À», ±× ¿Ü¿¡´Â 
                0ÀÌ ¾Æ´Ñ °ªÀ» ¹ÝȯÇÑ´Ù.
 
 
                        
                            | int PQendcopy(PGconn 
                            *conn); |    
                Âü°í·Î PostgreSQL¿¡¼´Â ÁúÀÇ ¹öÆÛ°¡ 8192 ¹ÙÀÌÆ® 
                ±æÀÌÀ̹ǷÎ, 8K¸¦ ³Ñ´Â ÁúÀÇÀÇ µÞºÎºÐÀº Àß·Á³ª°¡¹Ç·Î ÁÖÀÇÇϱâ 
                ¹Ù¶õ´Ù. ¹°·Ð ±×·² °æ¿ì´Â ¾ø°ÚÁö¸¸...
 
                        
                            | ¿¹)PQexec(conn, 
                            "create table foo (a int4, b char16, d float8)");
 PQexec(conn, "copy foo from stdin");
 /* ¿©±â¿¡¼ <TAB>Àº ½ÇÁ¦·Î TAB۸¦ ÀÔ·ÂÇÔÀ» 
                            À̾߱âÇÑ´Ù. */
 PQputline(conn, "3<TAB>hello 
                            world<TAB>4.5¡¬n");
 PQputline(conn, 
                            "4<TAB>goodbye world<TAB>7.11¡¬n");
 PQputline(conn, ".¡¬n");
 PQendcopy(conn);
 |  
 3. libpqÀÇ È°¿ë 1) ¿¹Á¦ ÇÁ·Î±×·¥ - testlibpq.c 
                ¿©±â¿¡¼´Â ¸ÕÀú PostgreSQL¿¡¼ Á¦°øÇÏ´Â ±¦ÂúÀº 
                ¿¹Á¦ ¼Ò½º¸¦ ¸ÕÀú »ìÆìº»´Ù. ÀÌ ÆÄÀÏÀº src/test/examples/testlibpq.c 
                ÆÄÀÏÀÌ´Ù. ¸ÕÀú ÄÄÆÄÀÏÀ» ÇÏ¿© ½ÇÇàÀ» ÇØº¸ÀÚ. 
 
                        
                            | $ make$ ./testlibpq
 datname        datdba 
                                    datpath
 template1       501 
                                        template1ddoch            501 
                                        ddoch
 test3              501 
                                        test3
 mydb             501 
                                        mydb
 web               506 
                                        web
 test                501 
                                        test
 |    
                ÀÌ ÇÁ·Î±×·¥Àº Àӽà µ¥ÀÌÅͺ£À̽º·Î »ç¿ëµÇ´Â 
                template1 µ¥ÀÌÅͺ£À̽º¿¡ Á¢¼ÓÇÏ¿© ½Ã½ºÅÛ Ä«Å»·Î±×ÀÇ ÀÏÁ¾ÀÎ pg_database 
                Ŭ·¡½º¿¡¼ µ¥ÀÌÅͺ£À̽º ¸ñ·ÏÀ» ÃàÃâÇÏ¿© Ãâ·ÂÇϰí ÀÖ´Ù. ´ÙÀ½Àº 
                ¼Ò½º ÇÁ·Î±×·¥ÀÌ´Ù. ÀÚ¼¼ÇÑ ÁÖ¼®À» ºÙ¿©³õ¾Ò´Ù.
 
                        
                            | /* * testlibpq.c
 *    PostgreSQL ÇÁ·ÐÆ®¿£µå ¶óÀ̺귯¸®ÀÎ 
                            LIBPQ¸¦ »ç¿ëÇÑ Å×½ºÆ® ÇÁ·Î±×·¥
 *
 *
 */
 #include <stdio.h>#include 
                            "libpq-fe.h" /* LIBPQ¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥¿¡¼ 
                            ²À Æ÷ÇÔÇØ¾ß ÇÑ´Ù. */
 static voidexit_nicely(PGconn 
                            *conn)
 {
 PQfinish(conn);
 exit(1);
 }
 intmain()
 {
 char 
                            *pghost, *pgport, *pgoptions, *pgtty;
 char *dbName;
 int nFields; /* ÇʵåÀÇ °¹¼ö¸¦ ÀúÀåÇÒ º¯¼ö */
 int i,j;
 #ifdef DEBUGFILE *debug; 
                            /* µð¹ö±ëÀ» À§ÇÑ ÆÄÀÏ ½ºÆ®¸² */
 #endif  /* 
                            DEBUG */
 PGconn *conn; /* µ¥ÀÌÅͺ£À̽º 
                            Á¢¼Ó µð½ºÅ©·´Æ® ±¸Á¶Ã¼ */PGresult *res; /*ÁúÀÇ 
                            °á°ú¸¦ ÀúÀåÇÒ PGresult ±¸Á¶Ã¼ Æ÷ÀÎÅÍ*/
 /** ¸ÕÀú, ¼¹ö Á¢¼ÓÀ» À§Çؼ 
                            ¸Å°³ÀÎÀÚ¸¦ ¼³Á¤ÇÑ´Ù.
 * ¸Å°³ÀÎÀÚ°¡ ³ÎÀ̸é, ȯ°æº¯¼ö¸¦ 
                            °Ë»çÇϰí,
 * ȯ°æº¯¼ö°¡ ¼³Á¤µÇ¾î ÀÖÁö ¾ÊÀ¸¸é 
                            ½Ã½ºÅÛ ±âº» ³»Á¤°ªÀ» »ç¿ëÇÑ´Ù.
 */
 pghost = NULL;    /* 
                            ¼¹öÀÇ È£½ºÆ® À̸§ */pgport = NULL;    /* 
                            ¼¹ö Æ÷Æ® */
 pgoptions = NULL;    /* 
                            ¼¹ö·Î Àü´ÞÇÒ Æ¯º°ÇÑ ¿É¼Ç */
 pgtty = NULL;    /* 
                            ¼¹ö¸¦ À§ÇÑ µð¹ö±ë tty */
 dbName = "template1"; 
                               /* Á¢¼ÓÇÒ Àӽà µ¥ÀÌÅͺ£À̽º */
 /* µ¥ÀÌÅͺ£À̽º·Î Á¢¼ÓÀ» ½ÃµµÇÑ´Ù. 
                            */conn = PQsetdb(pghost, pgport, pgoptions, 
                            pgtty, dbName);
 /* ¼¹ö¿ÍÀÇ Á¢¼ÓÀÌ ¼º°øÀûÀ¸·Î 
                            ÀÌ·ç¾îÁ³´ÂÁö °Ë»çÇÑ´Ù.* ¸¸ÀÏ ½ÇÆÐÇÏ¿´´Ù¸é ¿¡·¯ 
                            ¸Þ½ÃÁö¸¦ Ãâ·ÂÇϰí Á¾·áÇÑ´Ù. */
 if (PQstatus(conn) 
                            == CONNECTION_BAD)
 {
 fprintf(stderr, "Connection 
                            to database '¡¬s' failed.¡¬n", dbName);
 fprintf(stderr, "¡¬s", PQerrorMessage(conn));
 exit_nicely(conn);
 }
 #ifdef DEBUG/* µð¹ö±ë ÆÄÀÏ 
                            ½ºÆ®¸²À» ¿°í ÃßÀûÀ» ½ÃÀÛÇÑ´Ù. */
 debug = fopen("/tmp/trace.out", 
                            "w");
 PQtrace(conn, debug);
 #endif 
                                 /* DEBUG */
 /* Æ®·£Àè¼Ç ºí·ÏÀ» ½ÃÀÛÇÑ´Ù. ¸ðµç 
                            ÀÛ¾÷Àº Æ®·£Àè¼Ç ±¸¹®¾È¿¡¼ * ÀÌ·ç¾îÁ®¾ß ÇÑ´Ù. 
                            */
 res = PQexec(conn, "BEGIN");
 if (PQresultStatus(res) ! = PGRES_COMMAND_OK)
 {
 fprintf(stderr, "BEGIN command failed¡¬n");
 PQclear(res);
 exit_nicely(conn);
 }
 /** ¸Þ¸ð¸® À¯ÃâÀ» ¸·À¸·Á¸é 
                            ´õ ÀÌ»ó ÇÊ¿äÇÏÁö ¾Ê´Â PGresult¸¦
 * PQclear 
                            ÇØ¾ß ÇÑ´Ù.
 */
 PQclear(res);
 /* * µ¥ÀÌÅͺ£À̽ºÀÇ ½Ã½ºÅÛ 
                            īŻ·Î±×ÀÎ pg_database Ŭ·¡½º¿¡¼ ¸ðµç
 * µ¥ÀÌÅͺ£À̽º 
                            Ç׸ñÀ» ¾ò¾î¼ Ä¿¼¸¦ ¼±¾ðÇÑ´Ù. */
 res = PQexec(conn, "DECLARE 
                            myportal CURSOR FOR select *from pg_database");if (PQresultStatus(res) ! = PGRES_COMMAND_OK)
 {
 fprintf(stderr, "DECLARE CURSOR command 
                            failed¡¬n");
 PQclear(res);
 exit_nicely(conn);
 }
 PQclear(res);
 /* ¼±¾ðÇÑ Ä¿¼¿¡¼ µ¥ÀÌÅ͸¦ ¸ðµÎ 
                            ºÒ·¯µéÀδÙ. */res = PQexec(conn, "FETCH 
                            ALL in myportal");
 if (PQresultStatus(res) 
                            ! = PGRES_TUPLES_OK)
 {
 fprintf(stderr, "FETCH 
                            ALL command didn't return tuples properly¡¬n");
 PQclear(res);
 exit_nicely(conn);
 }
 /* ¸ÕÀú Çʵå Çì´õ¸¦ Ãâ·ÂÇÑ´Ù. 
                            */nFields = PQnfields(res);
 for (i = 0; 
                            i<nFields;i++)
 {
 printf("¡¬-15s", 
                            PQfname(res, i));
 }
 printf("¡¬n¡¬n");
 /* ´ÙÀ½À¸·Î ÀνºÅϽº Àüü¸¦ ·¹ÄÚµå 
                            ¼ö¿Í ÇÊµå ¼ö¸¸Å Ãâ·ÂÇÑ´Ù. */for (i = 0; i<PQntuples(res); 
                            i++)
 {
 for (j = 0; j<nFields; j++)
 {
 printf("¡¬-15s", PQgetvalue(res, 
                            i, j));
 }
 printf("¡¬n");
 }
 PQclear(res); /* Ä¿¼¸¦ ´Ý´Â´Ù. Ä¿¼°¡ ´õ ÀÌ»ó 
                            ÇÊ¿ä¾øÀ¸¸é Ä¿¼¸¦ ´Ý¾Æ¾ß ÇÑ´Ù. */res = PQexec(conn, 
                            "CLOSE myportal");
 PQclear(res);
 /* Æ®·£Àè¼ÇÀ» ³¡³½´Ù. */res 
                            = PQexec(conn, "END");
 PQclear(res);
 /* µ¥ÀÌÅͺ£À̽º Á¢¼ÓÀ» Á¾·áÇϰí 
                            Á¤¸®ÇÑ´Ù. */PQfinish(conn);
 #ifdef DEBUGfclose(debug); 
                            /* µð¹ö±ë ÃßÀûÀ» Áß´ÜÇÑ´Ù. */
 #endif            /* 
                            DEBUG */
 exit(0);}
 |    2) °£ÀÌ SQL ¸ð´ÏÅ͸µ ÇÁ·Î±×·¥ 
                °£´ÜÇÑ ¿¹Á¦ ÇÁ·Î±×·¥À» »ìÆìº¸¾ÒÀ¸¹Ç·Î, ÀÌÁ¦ 
                Á¶±Ý ´õ »ö´Ù¸¥ ÇÁ·Î±×·¥À» ÀÛ¼ºÇغ¸ÀÚ. ¾Õ¼¿Í º°´Ù¸¦ ¹Ù¾ß ¾øÁö¸¸ 
                psql°ú ºñ½ÁÇÑ °£ÀÌ SQL ¸ð´ÏÅ͸µ ÇÁ·Î±×·¥À» ÀÛ¼ºÇغ¸°Ú´Ù. psqlµµ 
                »ç½ÇÀº libpq¸¦ ÀÌ¿ëÇÏ¿© ÀÛ¼ºÇÑ ÀÀ¿ë ÇÁ·Î±×·¥À̶ó´Â °ÍÀ» ¾Õ¼ 
                ¼³¸íÇÑ ¹Ù ÀÖ´Ù. ¿©±â¿¡ ³ª¿À´Â spsql ÇÁ·Î±×·¥Àº psqlÀÇ ±âº»ÀûÀÎ 
                ±â´ÉÀ» ¸ð¹æÇÏ¿© ÀÛ¼ºÇÑ °ÍÀ¸·Î, ³»ºÎ ±¸Á¶´Â ¸ÕÀú localhost¿¡ 
                Á¢¼ÓÇÏ¿© pg_database īŻ·Î±×¿¡¼ Àüü µ¥ÀÌÅͺ£À̽º ¸ñ·ÏÀ» ÃàÃâÇÏ¿© 
                »ç¿ëÀÚ¿¡°Ô º¸¿©ÁÖ°í, »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ µ¥ÀÌÅͺ£À̽º¿¡ ´Ù½Ã Á¢¼ÓÇÏ¿© 
                »ç¿ëÀÚÀÇ ÀÔ·ÂÀ» ¹Þ¾Æ¼ ¼¹ö¿¡°Ô Àü´ÞÇϰí, ¼¹ö¿¡¼ °á°ú¸¦ µ¹·Á¹ÞÀ» 
                °æ¿ì ±×°ÍÀ» Ãâ·ÂÇÑ´Ù.
 
                        
                            | #include <stdio.h>#include <string.h>
 #include <stdlib.h>
 #include <ctype.h>
 #include "libpq-fe.h" 
                            /* libpq ¾îÇø®ÄÉÀ̼ǿ¡ ÇÊ¿äÇÑ Çì´õÆÄÀÏ */ void main() { char *pghost = NULL;char 
                            *pgport = NULL;
 char *pgoptions = NULL;
 char *pgtty = NULL;
 char *dbname = NULL;
 int nTuples;
 int i, j;
 PGconn *conn;
 PGresult *res;
 FILE *debug; /* µð¹ö±ë ½ºÆ®¸² 
                            */ char database¡²256¡³;char 
                            buf¡²2048¡³, query¡²2048¡³;
 /* ±âº»°ªÀ¸·Î µ¥ÀÌÅͺ£À̽º¿¡ Á¢¼ÓÇÑ´Ù. 
                            */conn = PQsetdb(pghost, pgport, pgoptions, 
                            pgtty, dbname);
 if (PQstatus(conn) == CONNECTION_BAD) 
                            {fprintf(stderr, "Connection to database 
                            '¡¬s' failed.¡¬n", dbname);
 fprintf(stderr, 
                            "¡¬s", PQerrorMEssage(conn));
 PQfinish(conn);
 exit(1);
 }
 /* µð¹ö±ë Á¤º¸¸¦ ¾ò±â À§ÇØ ½ºÆ®¸²À¸·Î 
                            ¿¬°áÇÑ´Ù. */debug = fopen("/tmp/trace.out", 
                            "w");
 PQreace(conn, debug);
 |  
 
 ¡ã top
 
 
 |