°ø°³ µ¥ÀÌÅͺ£À̽º ¼­¹ö PostgreSQL (5)
Large Object ¿Í ¸ÖƼ¹Ìµð¾î·Î ¹ã»õ±â

Çѵ¿ÈÆ ddoch@hitel.kol.co.kr

    

     

1. Large Object¶õ ¹«¾ùÀΰ¡?

    Large Object´Â ¿ì¸®¸»·Î Ç¥ÇöÇÏ¸é °Å´ë °´Ã¼¶ó°í ÇÒ ¼ö ÀÖ°Ú´Ù. PostgreSQL¿¡¼­´Â ±âº» µ¥ÀÌÅÍ ÆäÀÌÁö°¡ 8K(8192¹ÙÀÌÆ®)·Î ÇÑÁ¤µÇ¾î ÀÖ´Ù.
    Áï, ³¯¾¾¶ó´Â Å×À̺íÀÌ ÀÖ´Ù°í ÇÑ´Ù¸é ±×Áß ÇÑ ·¹ÄÚµåÀÇ µµ½Ã, ³¯Â¥, ÃÖÀú¿Âµµ, ÃÖ°í¿Âµµ µîÀÇ ¸ðµç ÇʵåÀÇ ±æÀÌ(¹ÙÀÌÆ®´ÜÀ§)ÀÇ ÇÕÀÌ 8192¸¦ ³ÑÀ» ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù. ÀÌ Á¤µµÀÇ ·¹ÄÚµå ±æÀÌ Á¦ÇÑÀº À¥ °Ô½ÃÆÇ µîÀÇ ¼Ò±Ô¸ðÀÇ µ¥ÀÌÅ͸¦ ´Ù·ç±â¿¡´Â ÃæºÐÇÒÁö ¸ð¸£³ª, ¸ÖƼ¹Ìµð¾î ÀÚ·á°ü¸®³ª ÅؽºÆ® °Ô½ÃÆÇ µîÀ» ó¸®Çϱ⿡´Â ¿ªºÎÁ·ÀÌ´Ù. ¿äÁò ±×¸²ÆÄÀÏ Çϳª¸¸ Çصµ 100K´Â ÃæºÐÈ÷ ³Ñ¾î°¡¸ç »ç¿îµå ÆÄÀÏ °°Àº °æ¿ì¿¡´Â 1MB¸¦ ÃÊ°úÇÏ´Â °æ¿ìµµ ¸¹À¸¸ç µ¿¿µ»ó °°Àº °æ¿ì¿¡´Â ´õÇÒ ³ªÀ§°¡ ¾øÀ» °ÍÀÌ´Ù. 8K Á¤µµ¸é ÅؽºÆ® °Ô½ÃÆÇ¿¡¼­ ¸¹¾ÆºÁ¾ß 15ÆäÀÌÁö Á¤µµ¹Û¿¡ µÇÁö ¾Ê´Â´Ù. ÀÌ Á¤µµ·Î´Â ¿øÇÏ´Â µ¥ÀÌÅͳª ÀڷḦ °ü¸®Çϱ⿡ ºÎÁ·ÇÔÀ» ´ç¿¬È÷ ´À³¥ °ÍÀÌ´Ù. °Å´ë°´Ã¼´Â PostgreSQL¿¡¼­ ÀÌ·¯ÇÑ 8K ÀÌ»óÀÇ µ¥ÀÌÅ͸¦ ´Ù·ç±â À§ÇÑ ÀÎÅÍÆäÀ̽ºÀÌ´Ù.

    ÀÌÁ¦ µ¥ÀÌÅÍ ÀúÀåÃø¸é¿¡¼­ »ý°¢Çغ¸ÀÚ. ¿ì¸®°¡ ´Ù·ç±â¸¦ ¿øÇÏ´Â µ¥ÀÌÅÍ°¡ 8K º¸´Ù Å©´Ù°í ÇÏ´õ¶óµµ °Å´ë°´Ã¼¸¦ »ç¿ëÇÏÁö ¾Ê´õ¶óµµ ó¸®ÇÒ ¼ö ÀÖ´Â °æ¿ì°¡ ÀÖ´Ù. °¡·É À̹ÌÁö¸¦ ´Ù·ç´Â °æ¿ì¸¦ »ý°¢Çغ»´Ù¸é, À̹ÌÁö¿¡ ´ëÇÑ °¢Á¾ Á¤º¸´Â Å×ÀÌºí¿¡ ÀúÀåÇÏ°í ½ÇÁ¦ À̹ÌÁö ÆÄÀÏÀº ÆÄÀÏ ½Ã½ºÅÛ¿¡ ÆÄÀÏ·Î ±×³É ÀúÀåÇÒ ¼ö ÀÖ´Ù. ÀÌ·² °æ¿ì¿¡ »ç¿ëÀÚ°¡ À̹ÌÁö ÆÄÀÏÀ» °Ë»öÇϱ⸦ ¿øÇÑ´Ù¸é Å×À̺í Á¤º¸¿¡¼­ ¿øÇÏ´Â Å°¿öµå·Î °Ë»öÀ» ÇÑ´Ù.

    À½, ÀÌ¿¡ ÇØ´çÇÏ´Â ÆÄÀÏ ½Ã½ºÅÛ»óÀÇ À̹ÌÁö ÆÄÀÏÀ» ÀÏ¹Ý UNIX ÆÄÀÏ Ã³¸® ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ÀоîµéÀÏ ¼ö ÀÖ´Ù. ¹°·Ð, ¿øÇÑ´Ù¸é À¥ ºê¶ó¿ìÀú »ó¿¡ ±×³É Ãâ·ÂÇÒ ¼öµµ ÀÖ´Ù. ÀϹÝÀûÀ¸·Î ÀÚÁÖ »ç¿ëÇÏ´Â ¹æ¹ýÀÌ, ÀÌ·¸°Ô ¿øÇÏ´Â °Å´ë µ¥ÀÌÅ͸¦ ÆÄÀÏ ½Ã½ºÅÛ»ó¿¡ ÀúÀåÇÏ°í ÀÌ¿¡ ´ëÇÑ Á¤º¸¸¸ Å×ÀÌºí¿¡ ÀúÀåÇÏ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô¸¸ »ç¿ëÇÑ´Ù¸é °Å´ë°´Ã¼¸¦ ±»ÀÌ »ç¿ëÇÒ ÇÊ¿ä´Â ¾ø¾îÁø´Ù. ±×¸®°í ÀÌ °æ¿ì¿¡ À̹ÌÁö ÆÄÀÏÀº ¾ö¹ÐÈ÷ µûÁø´Ù¸é RDBMSÀÇ ¿ÜºÎ¿¡ ÀÖ´Ù°í º¼ ¼ö ÀÖ´Ù. µû¶ó¼­ µ¥ÀÌÅͺ£À̽ºÀÇ °ü¸® Ãø¸é¿¡¼­ º¼ ¶§, µ¥ÀÌÅͺ£À̽ºÀÇ ¿ÜºÎ¿¡ ÀÖÀ½À¸·Î ÀÎÇØ µ¥ÀÌÅÍÀÇ ¹«°á¼ºÀÌ º¸ÀåµÇÁö ¾Ê°í, °Ë»ö µîÀÇ ÀÛ¾÷¿¡ À־ µ¥ÀÌÅͺ£À̽ºÀÇ È¿À²¼ºÀ» È°¿ëÇÒ ¼ö ¾ø´Ù´Â ´ÜÁ¡ÀÌ ÀÖ´Ù. ÀÌ·¯ÇÑ ´ÜÁ¡Àº RDBMSÀÇ »ç¿ë¿¡ À־ Ä¡¸íÀûÀÎ ¼ÕÇØ°¡ ¾Æ´Ò ¼ö ¾ø´Ù. ÀÌ·Î ÀÎÇØ µîÀåÇÑ °ÍÀÌ °Å´ë°´Ã¼ÀÌ´Ù.

    ±×¸²¿¡¼­ ¾Ë ¼ö ÀÖµíÀÌ RDBMS´Â ³»ºÎ ÀúÀå ½Ã½ºÅÛÀ» °¡Áö°í ÀÖ´Ù. °Å´ë µ¥ÀÌÅÍÀÇ °æ¿ì¿¡´Â ÆÄÀÏ À̹ÌÁö´Â µ¥ÀÌÅͺ£À̽ºÀÇ ³»ºÎ ÀúÀå ¸ÞÄ«´ÏÁò¿¡ µû¶ó ÀúÀå½Ã½ºÅÛ¿¡ ºÐ¸®µÇ¾î È¿À²ÀûÀ¸·Î ÀúÀåµÇ¸ç, ÀÌ¿¡ ´ëÇÑ Á¤º¸´Â Å×ÀÌºí ³»ÀÇ °´Ã¼ ½Äº°ÀÚ(oid)¿Í ¿¬°áµÇ¾î À¯ÁöÇÏ´Â °ÍÀÌ´Ù. Oid´Â PostgreSQL ¼­¹ö°¡ µ¥ÀÌÅͺ£À̽º ³»ÀÇ ¸ðµç ÀνºÅϽº¿¡ ÀÚµ¿ÀûÀ¸·Î ºÎ¿©ÇÏ´Â Áߺ¹µÇÁö ¾Ê´Â À¯ÀÏÇÑ ½Äº°ÀÚÀÌ´Ù. °Å´ë°´Ã¼ ¸ÞÄ«´ÏÁòÀ» »ç¿ëÇÒ ¶§ÀÇ ÀåÁ¡Àº µ¥ÀÌÅÍÀÇ ¹«°á¼ºÀ» º¸ÀåÇÏ°í, °Ë»ö½Ã¿¡ µ¥ÀÌÅͺ£À̽ºÀÇ È¿À²¼ºÀ» È®º¸ÇÒ ¼ö ÀÖ´Ù´Â Á¡ ¿Ü¿¡µµ ½Ã°£¿©Çà(time travel) ±â´ÉÀ» Á¦°øÇÑ´Ù. UNIX ÆÄÀÏ ½Ã½ºÅÛ¿¡¼­ ÆÄÀÏÀÌ Áö¿öÁö¸é ³¡ÀåÀÌÁö¸¸, PostgreSQL µ¥ÀÌÅͺ£À̽º ¼­¹ö ³»¿¡¼­ Áö¿î ÆÄÀÏÀº ¿ÏÀüÈ÷ Áö¿öÁø°Ô ¾Æ´Ï¶ó¼­ ½Ã°£¿©ÇàÀ» ÅëÇØ °í½º¶õÈ÷ º¹±¸ÇÒ ¼ö ÀÖ´Ù.

    PostgreSQL ¼­¹öÀÇ °Å´ë°´Ã¼ÀÇ ÃÖ´ë ´ÜÁ¡Àº ÀÏ¹Ý UNIX Á¤±ÔÆÄÀÏÀ» °Å´ë°´Ã¼ ³»¿¡ Èí¼öÇϱâ À§ÇÏ¿© ÇÊ¿äÇÑ ¼öÀÔ(import)°ú ¼öÃâ(export)½Ã¿¡ ¸¹Àº ½Ã°£ÀÌ °É¸°´Ù´Â °ÍÀÌ´Ù. ¼ö ¸Þ°¡ ¹ÙÀÌÆ® ÀÌ»óÀÇ ÆÄÀÏÀ» ´Ù·ê ¶§, ¼öÀÔÀº ÇÑ ¹ø¸¸ ÇÏ°ÚÁö¸¸ ¼öÃâÀº ¿©·¯ ¹ø ÇÏ°Ô µÉ °ÍÀÌ´Ù. »ç¿ëÀÚ¿¡°Ô ¿Â¶óÀÎÀ¸·Î µ¥ÀÌÅ͸¦ µð½ºÇ÷¹ÀÌÇØ¾ß ÇÒ °æ¿ì°¡ ÀÚÁÖ ¹ß»ýÇÒ °ÍÀ̱⠶§¹®ÀÌ´Ù. ÀÌ·² °æ¿ì¿¡´Â Â÷¶ó¸® °Å´ë°´Ã¼¸¦ »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ ÁÁ´Ù°í »ý°¢ÇÑ´Ù. ³Ê¹« ÀÚÁÖ ¼öÃâÀ» ÇÏ°Ô µÇ¸é ÆÄÀÏÀ» º¹»çÇÏ´Â °Í ÀÌ»óÀÇ ÀÚ¿øÀ» Àâ¾Æ¸Ô±â ¶§¹®ÀÌ´Ù. ¶Ç ÇÑ°¡Áö´Â ´©±¸³ª ´À³¢´Â ¹®Á¦°ÚÁö¸¸ Á» ¹ø°Å·Ó´Ù´Â °ÍÀÌ´Ù. Å×ÀÌºí ³»¿¡ ÇÊ¿äÇÑ ¸ðµç µ¥ÀÌÅ͸¦ ÀúÀåÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó °´Ã¼ ½Äº°ÀÚ¸¸ ÀúÀåÇÏ°í Á¤ÀÛ µ¥ÀÌÅÍ´Â µ¥ÀÌÅͺ£À̽º ³»ºÎÀÇ º°µµÀÇ ÀúÀå½Ã½ºÅÛ¿¡ ÀúÀåÇÑ´Ù´Â °Íµµ ±×·¸°í, ¼öÀÔ(import)°ú ¼öÃâ(export)ÀÌ ÇÊ¿äÇÏ´Ù´Â Á¡µµ ±×·¸´Ù.

    ¢Ñ °Å´ë°´Ã¼¸¦ ¼³¸íÇÒ ¶§ »ç¿ëµÇ´Â import¿Í export¸¦ ´ëüÇÒ Àû´çÇÑ ¿ì¸®¸»ÀÌ ¾ø´Â °Í °°¾Æ,
        ¼öÀÔ°ú ¼öÃâÀ̶ó´Â ¾î°¨ÀÌ ÁÁÁö ¾ÊÀº ¸»À» ºÎµæÀÌ »ç¿ëÇÑ´Ù. ¼öÀÔ(import)Àº ÆÄÀÏ ½Ã½ºÅÛ
        »óÀÇ ÆÄÀÏÀ» µ¥ÀÌÅͺ£À̽º ¼­¹ö¿¡¼­ °ü¸®ÇÒ ¼ö ÀÖµµ·Ï ³»ºÎ ÀúÀå ½Ã½ºÅÛ¿¡ Àß°Ô ÂÉ°³¾î
        °Ë»öÇϱâ ÁÁµµ·Ï À妽ºÈ­ÇÏ¿© ÀúÀåÇÏ´Â °ÍÀ» À̾߱âÇÑ´Ù. ¼öÃà(export)Àº °Å²Ù·Î
        µ¥ÀÌÅͺ£À̽º ³»ºÎ ÀúÀå ½Ã½ºÅÛ¿¡ ÀúÀåµÇ¾î ÀÖ´Â °Å´ë°´Ã¼¸¦ ¿ÜºÎ ÆÄÀÏ ½Ã½ºÅÛ»ó¿¡ Ãâ·Â
        ÇÏ´Â °ÍÀ» À̾߱âÇÑ´Ù.

     

2. ¸ÖƼ¹Ìµð¾î µ¥ÀÌÅÍ¿Í °Ë»ö

    ±»ÀÌ ¸ÖƼ¹Ìµð¾î»Ó¸¸ÀÌ ¾Æ´Ï¶ó 8K¸¦ ³Ñ¾î°¡´Â ¹®ÀÚ, ¼ýÀÚ, Åë°è µ¥ÀÌÅÍ µîÀ» ´Ù·ç´Â µ¥¿¡µµ °Å´ë°´Ã¼¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ½À» ¾Õ¼­ ¾ð±ÞÇÏ¿´´Ù. ±×¸®°í ÀÌµé °Å´ë°´Ã¼¸¦ »ç¿ëÇÏ´Â µ¥ÀÌÅÍ´Â oid¸¦ ÅëÇؼ­ Á¢±ÙÇÒ ¼ö ÀÖ´Ù°í ¾ð±ÞÇÏ¿´´Ù. ¸ÖƼ¹Ìµð¾îµçÁö ¾Æ´Ï´øÁö ÀÌµé °Å´ë°´Ã¼ µ¥ÀÌÅÍÀÇ °Ë»öÀ̳ª ¼öÁ¤Àº ¸ðµÎ µ¿ÀÏÇÒ °ÍÀÌ´Ù. °Å´ë°´Ã¼¿¡ ´ëÇÑ ÁÖº¯ÀûÀÎ Á¤º¸´Â ±âº» Å×ÀÌºí¿¡ ÀúÀåÇÒ °ÍÀÌÁö¸¸ º»°Ý °Å´ë°´Ã¼ µ¥ÀÌÅÍ´Â Å×ÀÌºí ³»ÀÇ oid¸¦ ÅëÇØ Á¢±ÙµÉ °ÍÀ̱⠶§¹®ÀÌ´Ù. µû¶ó¼­ ÀÌµé µ¥ÀÌÅ͸¦ °Ë»öÇÏ´Â ¹æ¹ýÀº ´ëü·Î µÎ °¡Áö°¡ ÀÖ´Ù°í º¼ ¼ö ÀÖ´Ù. ´Ü¼øÈ÷ ÁÖº¯ÀûÀÎ Å×ÀÌºí µ¥ÀÌÅ͸¦ °Ë»öÇÏ´Â ¹æ¹ý°ú Å×ÀÌºí ³»ÀÇ oid Çʵ带 ÅëÇÏ¿© °Å´ë°´Ã¼ µ¥ÀÌÅ͸¦ Á÷Á¢ °Ë»öÇÏ´Â ¹æ¹ýÀÌ´Ù.

    °Å´ë°´Ã¼ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ´Â µ¥ÀÌÅÍÀÇ À¯ÇüÀÌ ¿©·¯ °¡Áö°¡ ÀÖ°ÚÁö¸¸ ¿©±â¼­´Â ³í¹®À» °ü¸®ÇÏ´Â µ¥ÀÌÅͺ£À̽ºÀÇ ¿¹¸¦ µé¾îº¸ÀÚ(±× ¿ÜÀÇ ¸ÖƼ¹Ìµð¾î µ¥ÀÌÅ͵µ ¸¶Âù°¡ÁöÀÏ °ÍÀÌ´Ù).

    ¸ÕÀú, ³í¹®À̶ó´Â Å×À̺íÀ» Çϳª ¸¸µé °ÍÀÌ°í, Çʵå´Â ´ë·« ÁöÀºÀÌ, ³¯Â¥, Á¦¸ñ, ÀÚ·á¸í, Å©±â, Çü½Ä, OID Á¤µµ°¡ µÉ °ÍÀÌ´Ù. ¿ÜºÎ ³í¹® ÆÄÀÏÀ» ¼öÀÔ(import)Çϸ鼭 Å×À̺íÀÇ ³ª¸ÓÁö Ç׸ñÀ» ä¿ì°Ô µÉ °ÍÀÌ´Ù. ¹°·Ð ¼öÀÔ(import)½Ã¿¡ ¹ÝȯÇÏ´Â oid¸¦ Å×À̺íÀÇ OID Çʵ忡 ÀúÀåÇÔÀ¸·Î½á oid¸¦ ÅëÇØ °Å´ë°´Ã¼¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ÀÌÁ¦ ±âº» °ñ°ÝÀº ´Ù ¸¸µé¾îÁ³´Ù°í °¡Á¤ÇÏÀÚ(ÀÚ¼¼ÇÑ ¹æ¹ýÀº ÀÌÈÄ¿¡ ¼³¸íÇÑ´Ù). »ç¿ëÀÚ°¡ °Ë»öÀ» ¿øÇÒ ¶§¿¡´Â Å×ÀÌºí ³»ÀÇ ¾î´À ÇÑ°¡Áö ÀÌ»óÀÇ Ç׸ñÀ» »ç¿ëÇÏ°ÚÁö¸¸, ÆíÀǸ¦ À§ÇØ Á¦¸ñÀ» ÅëÇØ °Ë»öÇÏ°í ½Í¾îÇÑ´Ù°í °¡Á¤ÇÑ´Ù. SELECT¸¦ »ç¿ëÇÏ¿© ³í¹® Å×À̺íÀÇ Á¦¸ñ Çʵ忡¼­ ¿øÇÏ´Â ·¹Äڵ带 ã¾Ò´Ù¸é, OID Çʵ带 ÅëÇØ °Å´ë°´Ã¼¿¡ Á¢±ÙÇÒ °ÍÀÌ´Ù. ÀÌ ºÎºÐ¿¡¼­ °Å´ë°´Ã¼¸¦ ¾î¶»°Ô ´Ù·ç´À³Ä¿¡ µû¶ó µÎ °¡Áö Á¢±Ù ¹æ¹ýÀÌ ÀÖ´Ù°í ÇÒ ¼ö ÀÖ´Ù.

    ¢º ³í¹®À̶ó´Â °Å´ë°´Ã¼¿¡ ´ëÇÑ Á¢±ÙÀ» ÇÏÁö ¾Ê´Â ¹æ¹ýÀÌ´Ù. º¸Åë ÀÌ °æ¿ì°¡ ¸¹ÀÌ »ç¿ëµÉ °Í
        ÀÌ´Ù. Oid¸¦ ÅëÇÑ °Å´ë°´Ã¼¿¡ ´ëÇÑ Á÷Á¢ÀûÀÎ Á¢±ÙÀ» ÇÑ´Ù´Â °ÍÀº ÀÌ °æ¿ì¿¡ À־ ³í¹®À»
        °Å´ë°´Ã¼ ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ ¿­¾î¼­ °Ë»öÇÏ°í ¼öÁ¤ÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ÅؽºÆ® ÆÄÀÏÀ̳ª
        Æ¯Á¤ÇÑ ±×·¡ÇÈ ÆÄÀÏÀÏ °æ¿ì¿¡¾ß ÀǹÌÀÖ´Â ÀÏÀÌ°ÚÁö¸¸ °³º° ¹ÙÀÌÆ®³ª µ¥ÀÌÅÍ ºí·ÏÀÌ º°
        Àǹ̾ø´Â °æ¿ìÀÏ ¶§¿¡´Â °Å´ë°´Ã¼¿¡ Á÷Á¢ Á¢±ÙÇÑ´Ù´Â °ÍÀÌ Èûµé °ÍÀÌ´Ù. ³í¹® ÆÄÀÏÀÇ Çü½Ä
        ¿¡µµ ¿©·¯ °¡Áö°¡ ÀÖÀ» °ÍÀÌ´Ù. Latex ÆÄÀÏ Çü½ÄÀ̳ª ps ÆÄÀÏ, ±×·²¸®¾ß ¾ø°ÚÁö¸¸ hwp
        ÆÄÀÏ, text ÆÄÀÏ Çü½Äµµ ÀÖ´Ù°í °¡Á¤Çغ¸ÀÚ. ÀÌ °æ¿ì¿¡ °¢°¢ÀÇ µ¥ÀÌÅÍ ÆÄÀÏÀÇ Çü½ÄÀ» ¸ð¸£°í
        ¼­´Â ³í¹®ÆÄÀÏ¿¡ ´ëÇÑ Á÷Á¢ÀûÀÎ °Ë»öÀº º° ÀÇ¹Ì ¾ø´Ù°í º¼ ¼ö ÀÖ´Ù. ÀÌ·¸°Ô Á÷Á¢ÀûÀÎ °Ë»öÀ»
        ¿øÄ¡ ¾ÊÀ» °æ¿ì¿¡, ³í¹® ÆÄÀÏÀ» ¼öÃâ(export)ÇÏ¿© ÆÄÀÏ ½Ã½ºÅÛ»óÀÇ Á¤±ÔÆÄÀÏ·Î ¸¸µé¾î¼­
        »ç¿ëÀÚ°¡ ³»·Á¹Þ±â¸¦ ÇÒ ¼ö ÀÖµµ·Ï ¸¸µé ¼ö ÀÖÀ» °ÍÀÌ´Ù.

    ¢º ´Ù¸¥ ÇϳªÀÇ ¹æ¹ýÀº ³í¹®(°Å´ë°´Ã¼)¿¡ Á÷Á¢ÀûÀ¸·Î Á¢±ÙÇÏ´Â ¹æ¹ýÀÌ´Ù. ³í¹®ÀÌ ps ÆÄÀÏ
        À̶ó¸é ps ÇüÅÂÀÇ ³í¹® Áß¿¡¼­ ƯÁ¤ÇÑ ºÎºÐÀ» ã¾Æ¼­ ¹ßÃéÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚ Á¤ÀÇÇÔ¼ö¸¦
        ¸¸µé¾î¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´Ù¸¥ ÇϳªÀÇ ¿¹¸¦ µç´Ù¸é ¾ó±¼ »çÁøÀ» ÀúÀåÇÏ°í ÀÖ´Â ¾ó±¼»çÁø
        À̶ó´Â °Å´ë°´Ã¼ À¯ÇüÀÌ ÀÖ´Ù°í ÇÑ´Ù¸é, match¶ó´Â ÇÔ¼ö¸¦ ¾ó±¼»çÁøÀ̶ó´Â µ¥ÀÌÅÍ¿¡
        ´ëÇؼ­ ¼±¾ðÇÒ ¼ö ÀÖ´Ù. match ÇÔ¼ö´Â »ç¿ëÀÚ°¡ ÀÔ·ÂÇÏ´Â »çÁø¿¡ °¡Àå ±ÙÁ¢ÇÏ´Â ¾ó±¼»çÁø
        À» Ã£¾Æ³»´Â ¿ªÇÒÀ» Çϵµ·Ï ¸¸µé ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. Áï, °Å´ë°´Ã¼ ³»ºÎ¿¡¼­ µ¥ÀÌÅÍ ÆÄÀÏÀÇ
        Á÷Á¢ÀûÀÎ °Ë»öÀ̳ª ÆíÁýµîÀº ƯÁ¤ ÀÛ¾÷¿¡ ´ëÇÑ »ç¿ëÀÚ ÇÔ¼ö¸¦ Á¤ÀÇÇÏ¿© »ç¿ëÇÏ´Â °ÍÀÌ
        ÁÁ´Ù. ¹®Á¦´Â ÀÌµé »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ´Â °ÍÀÌ ÇØ´ç ºÐ¾ß¿¡ ´ëÇÑ ¾à°£ÀÇ Àü¹®Áö½ÄÀ»
        ÇÊ¿ä·Î ÇÑ´Ù´Â °ÍÀÌ´Ù. °¡·É JPEG Çü½ÄÀÇ ±×¸²À» ´Ù·é´Ù¸é JPEG Çü½Ä¿¡ ´ëÇؼ­ ¾Ë¾Æ¾ß
        ÇÑ´Ù. ÀÌ·¯ÇÑ »ç¿ëÀÚ Á¤ÀÇ ÀÎÅÍÆäÀ̽º¸¦ ½º½º·Î ¸¸µé ¼ö ÀÖ´Ù¸é, °Ë»ö»Ó¸¸ÀÌ ¾Æ´Ï¶ó ¼öÁ¤
        ±îÁöµµ °¡´ÉÇÏ´Ù. ÀÌ·¯ÇÑ ÀÏÀ» °¡´ÉÇÏ°Ô ÇØÁÖ´Â °ÍÀº °Å´ë°´Ã¼ ÀÎÅÍÆäÀ̽ºÀÌ´Ù.
        °Å´ë°´Ã¼ ÀÎÅÍÆäÀ̽º´Â UNIXÀÇ Àú¼öÁØ ÆÄÀÏ ±â¼úÀÚ¸¦ ´Ù·ç´Â °Í°ú ¾ÆÁÖ À¯»çÇÏ´Ù.

     

3. °Å´ë°´Ã¼ÀÇ ÀÎÅÍÆäÀ̽º

    °Å´ë°´Ã¼¿¡ ´ëÇÑ ÀÎÅÍÆäÀ̽º´Â ÁÖ·Î C¾ð¾î·Î ÀÛ¼ºµÈ ÇÔ¼öÀÌ´Ù. °Å´ë°´Ã¼¿Í °ü·ÃµÈ ¸ðµç ÀÛ¾÷Àº °Å´ë°´Ã¼ ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ¾ß ÇÑ´Ù. PostgreSQL¿¡¼­´Â SQL¿¡¼­ À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Â ¼öÀÔ(import)°ú ¼öÃâ(export) ÇÔ¼ö¸¦ Áö¿øÇÑ´Ù. À̵é ÇÔ¼ö´Â PostgreSQL ³»ºÎ¿¡ ¹Ì¸® µî·ÏÀÌ µÇ¾î ÀÖ¾î ¹Ù·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿©±â¼­´Â ¸ÕÀú PostgreSQL ³»ºÎ¿¡ µî·ÏµÇ¾î ÀÖ´Â ¼öÀÔ(import)°ú ¼öÃâ(export)¿¡ °ü·ÃµÈ ÇÔ¼ö¸¦ »ìÆ캸µµ·Ï ÇÑ´Ù.

 

1) SQL ³»ºÎ µî·Ï ÇÔ¼ö

    PostgreSQL ³»ºÎ¿¡ µî·ÏµÇ¾î ÀÖ´Â ÇÔ¼ö´Â lo_export ÀÌ´Ù. lo_import´Â ¼öÀÔÀ» ´ã´çÇÏ°í lo_export´Â ¼öÃâÀ» ´ã´çÇÑ´Ù. lo_importÀÇ ¹Ýȯ°ªÀº ¼öÀÔÀ» ÇÑ °Å´ë°´Ã¼ÀÇ oid(°´Ã¼ ½Äº°ÀÚ Å¸ÀÔ)ÀÌ°í lo_exportÀÇ ¹Ýȯ°ªÀº ¼öÇà°á°úÀÇ ¼º°ø¿©ºÎ¸¦ ³ªÅ¸³»´Â Âü °ÅÁþ°ªÀÌ´Ù. ÀÌ µÎ ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é ¼öÀÔ°ú ¼öÃâÀº CÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾Ê°íµµ ÇÒ ¼ö ÀÖÀ¸¹Ç·Î, °Å´ë°´Ã¼¿¡ ´ëÇÑ Á÷Á¢ÀûÀÎ °Ë»öÀ» ÇÏÁö ¾Ê´Â °æ¿ì¶ó¸é °Å´ë°´Ã¼ÀÇ C ÀÎÅÍÆäÀ̽º¸¦ ÀüÇô »ç¿ëÇÏÁö ¾Ê¾Æµµ °Å´ë°´Ã¼¸¦ ±âº»ÀûÀ¸·Î ´Ù·ê ¼ö ÀÖ´Ù.
     

    CREATE TABLE »çÁø (
                  À̸§ text,
                  »çÁø oid
    );

    INSERT INTO »çÁø (À̸§, »çÁø)
                VALUES ('³»¾ó±¼', lo_import('/etc/fstab'));

    SELECT lo_export (»çÁø.»çÁø, '/tmp/fstab') from »çÁø
                WHERE À̸§ = '³»¾ó±¼';


    ¢Ñ oid´Â SQL¿¡¼­ »ç¿ëµÇ´Â µ¥ÀÌÅÍ Å¸ÀÔÀÌ°í, Oid´Â CÇÔ¼ö¿¡¼­ »ç¿ëµÇ´Â µ¥ÀÌÅÍ Å¸ÀÔÀ¸·Î ¼­·Î µ¿ÀÏÇÑ °ÍÀÌ´Ù.

     

2) C ÀÎÅÍÆäÀ̽º

    °Å´ë°´Ã¼ÀÇ C ÀÎÅÍÆäÀ̽º¿¡´Â °Å´ë°´Ã¼¸¦ ´Ù·ç´Â µ¥ ÇÊ¿äÇÑ °ÅÀÇ ¸ðµç ÇÔ¼öµéÀÌ Æ÷ÇԵǾî ÀÖ´Ù. ¾Õ¼­ ¾ð±ÞÇÑ °Å´ë°´Ã¼ÀÇ ¼öÀÔ°ú ¼öÃâÀ» ´Ù·ç´Â lo_import¿Í lo_export, °Å´ë°´Ã¼¸¦ ¸¸µé°í(lo_creat), ¿­°í(lo_open), ´Ý°í(lo_close), À̵¿ÇÏ°í(lo_lseek), ¾²´Â(lo_write) ÇÔ¼öµéÀÌ ÀÖ´Ù. °Å´ë°´Ã¼¸¦ ´Ù·ç´Â ±âº»ÀûÀÎ ÇÔ¼ö´Â Ç¥ÁØ UNIXÀÇ Àú±Þ ÆÄÀÏ ±â¼úÀÚ¸¦ ´Ù·ç´Â ÇÔ¼öµé°ú ±× À̸§ÀÇ ¾ÕºÎºÐ¿¡¼­ lo_¸¸ »©¸é µ¿ÀÏÇÏ´Ù. ¿©·¯ºÐµéÀº ÀÌ·¯ÇÑ lo_·ùÀÇ ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¸¶Ä¡ UNIX ÆÄÀÏ ½Ã½ºÅÛ¿¡¼­ ÆÄÀÏÀ» ¸¸µé°í(creat), ¿­°í(open), À̵¿ÇÏ°í(lseek), ¾²°í(write), ´Ý´Â(close)°Íó·³ ÀÌ·¯ÇÑ °Å´ë°´Ã¼ ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ °Å´ë°´Ã¼¿¡ ´ëÇؼ­µµ µ¿ÀÏÇÑ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Ù. UNIX ÆÄÀÏ°ú °Å´ë°´Ã¼¶ó´Â ´ë»ó¸¸ ´Ù¸¦ »ÓÀÌÁö Àû¿ëµÇ´Â °³³ä°ú ½ÇÁ¦ »ç¿ë¹ýÀº µ¿ÀÏÇϹǷΠ°Å´ë°´Ã¼¶ó´Â »ç½Ç¿¡ ´ëÇØ ³Ê¹« °ÆÁ¤ÇÏÁö ¸»±â¸¦ ¹Ù¶õ´Ù. ±×·³ °Å´ë°´Ã¼ÀÇ C ÀÎÅÍÆäÀ̽º ÇÔ¼ö¸¦ Çϳª¾¿ »ìÆ캸°í, ÀÌÈÄ¿¡ À̵é ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °£´ÜÇÑ ¿¹Á¦¸¦ º¸µµ·Ï ÇÏ°Ú´Ù.

     

    °Å´ë°´Ã¼ÀÇ »ý¼º

    Oid lo_creat (PGconn *conn, int mode)

    ÀÌ ÇÔ¼ö´Â °Å´ë°´Ã¼¸¦ »ý¼ºÇÏ¿© ±× oid(°´Ã¼ ½Äº°ÀÚ Å¸ÀÔ)¸¦ µ¹·ÁÁØ´Ù. UNIXÀÇ creat ÇÔ¼ö¿Í ¸¶Âù°¡Áö·Î ±×³É ºó °Å´ë°´Ã¼¸¦ »ý¼ºÇÑ´Ù°í º¸¾Æµµ ÁÁ´Ù. ½ÇÁ¦·Î´Â °ÅÀÇ ¾²ÀÌÁö ¾Ê´Â´Ù. °Å´ë°´Ã¼ÀÇ »ý¼ºÀº ÁÖ·Î ¼öÀÔ(lo_import)À» ÅëÇÏ¿© ¸¸µé¾îÁö±â ¶§¹®ÀÌ´Ù.

    °Å´ë°´Ã¼ÀÇ ¼öÀÔ

    Oid lo_import (PGconn *conn, text *filename)

    ¾Õ¼­ ¼³¸íÇÑ °Å´ë°´Ã¼¸¦ ¼öÀÔ(import)ÇÏ´Â ÇÔ¼öÀÌ´Ù. filename À̶ó ºÒ¸®´Â ÆÄÀÏÀ» ¼öÀÔÇÏ¿©, ±× oid(°´Ã¼ ½Äº°ÀÚ Å¸ÀÔ)¸¦ ¹ÝȯÇÑ´Ù. ÆÄÀÏ ½Ã½ºÅÛ»ó¿¡ Á¸ÀçÇÏ´Â ¿ÜºÎ µ¥ÀÌÅÍ ÆÄÀÏÀ» µ¥ÀÌÅͺ£À̽º ³»ºÎ¿¡ °¡Áö°í ¿Ã ¶§ »ç¿ëµÈ´Ù.

    °Å´ë°´Ã¼ÀÇ ¼öÃâ

    int lo_export (PGconn *conn, Oid large_object_id, text *filename)

    ¾Õ¼­ ¼³¸íÇÑ °Å´ë°´Ã¼¸¦ ¼öÃâ(export)ÇÏ´Â ÇÔ¼öÀÌ´Ù. oid(°Å´ë°´Ã¼ ½Äº°ÀÚ)·Î large_object_id¸¦ °¡Áö´Â °Å´ë°´Ã¼¸¦ ¿ÜºÎ ÆÄÀÏ ½Ã½ºÅÛ»ó¿¡ filenameÀ̶ó´Â À̸§À¸·Î ²ôÁý¾î ³½´Ù. µÇµ¹¸² °ªÀº ¼öÃâÀÇ ¼º°ø¿©ºÎ¸¦ ³ªÅ¸³»´Â Âü °ÅÁþ°ªÀÌ´Ù.

    °Å´ë°´Ã¼¸¦ ¿­±â

    int lo_open (PGconn *conn, Oid large_object_id, int mode, ...)

    large_object_id´Â ¿­·Á´Â °Å´ë°´Ã¼ ½Äº°ÀÚÀÌ´Ù. mode´Â Àбâ(INV_READ)³ª ¾²±â(INV_WRITE), ¶Ç´Â µÑ ´Ù¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. Á¸ÀçÇÏÁö ¾Ê´Â °Å´ë°´Ã¼¸¦ lo_openÀ¸·Î ¿­ ¼ö´Â ¾ø´Ù. lo_openÀÇ ¹Ýȯ°ªÀº °Å´ë°´Ã¼ ±â¼úÀÚ(UNIXÀÇ Àú¼öÁØ ÆÄÀÏ ±â¼úÀÚ¿Í µ¿ÀϽÃÇϱ⠹ٶõ´Ù)·Î, ³ªÁßÀÇ lo_read, lo_write, lo_write, lo_lseek, lo_tell, lo_close ÇÔ¼ö¿¡¼­ ÀÎÀÚ·Î »ç¿ëµÈ´Ù.

    °Å´ë°´Ã¼¿¡¼­ Àоî¿À±â

    int lo_read (PGconn *conn, int fd, char *buf, int len)

    °Å´ë°´Ã¼ ±â¼úÀÚ fd¿¡¼­ len ±æÀ̸¸Å­ Àо buf¿¡ ÀúÀåÇÑ´Ù.

    °Å´ë°´Ã¼¿¡ ¾²±â

    int lo_write (PGconn *conn, int fd, char *buf, int len)

    ÀÌ ÇÔ¼ö´Â buf¿¡¼­ len ±æÀ̸¸Å­ÀÇ ¹ÙÀÌÆ®¸¦ ÇöÀçÀÇ °Å´ë°´Ã¼ ±â¼úÀÚÀÎ fd¿¡ ¾´´Ù. ´ç¿¬ÇÑ À̾߱â°ÚÁö¸¸ fd´Â ÀÌÀüÀÇ lo_open¿¡¼­ ¹ÝȯµÈ °ªÀ̾î¾ß ÇÑ´Ù. lo_writeÀÇ ¹Ýȯ°ªÀº ½ÇÁ¦·Î ¾²¿©Áø ¹ÙÀÌÆ® ¼öÀÌ´Ù. ¸¸ÀÏ ¿¡·¯°¡ ¹ß»ýÇÏ¿´´Ù¸é À½¼ö¸¦ µ¹·ÁÁØ´Ù.

    °Å´ë°´Ã¼ ³»ºÎ¿¡¼­ÀÇ À̵¿

    int lo_lseek (PGconn *conn, int fd, int offset, int whence)

    ÀÌ ÇÔ¼ö´Â ±â¼úÀÚ fd·Î Ç¥ÇöµÇ´Â °Å´ë°´Ã¼ ³»ºÎ¿¡¼­ ÇöÀçÀÇ Àбâ/¾²±â À§Ä¡¸¦ º¯°æÇÏ´Â µ¥ »ç¿ëµÈ´Ù. offsetÀº À̵¿°Å¸®ÀÌ´Ù. whence´Â UNIXÀÇ lseekó·³ SEEK_SET, SEEK_CUR, SEEK_END¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

    °Å´ë°´Ã¼ ³»ºÎ¿¡¼­ÀÇ À§Ä¡ ÆľÇ

    int lo_tell (PGconn *conn, int fd)

    ÇöÀçÀÇ °Å´ë°´Ã¼ÀÇ ±â¼úÀÚÀÎ fd¿¡¼­ÀÇ À§Ä¡¸¦ µ¹·ÁÁØ´Ù.

    °Å´ë°´Ã¼¸¦ ´Ý±â

    int lo_close (PGconn *conn, int fd)

    ÀÌ ÇÔ¼ö´Â °Å´ë°´Ã¼ ±â¼úÀÚ fd¸¦ ´Ý´Â ¿ªÇÒÀ» ÇÑ´Ù. lo_close°¡ ¼º°øÀûÀ¸·Î ¼öÇàµÇ¸é 0À» µ¹·ÁÁÖ°í, ¿¡·¯½Ã¿¡´Â À½¼ö°ªÀ» ¹ÝȯÇÑ´Ù.

    °Å´ë°´Ã¼¸¦ ¾ø¾Ö±â

    int lo_unlink (PGconn *conn, Oid large_object_id)

    °Å´ë°´Ã¼ ½Äº°ÀÚ·Î large_object_id °ªÀ» °¡Áö´Â °Å´ë°´Ã¼¸¦ ³»ºÎ ÀúÀå½Ã½ºÅÛ¿¡¼­ Á¦°ÅÇÑ´Ù.

    Áö±Ý±îÁö °£´ÜÇÏ°Ô °Å´ë°´Ã¼ ÀÎÅÍÆäÀ̽º¸¦ »ìÆ캸¾Ò´Ù. À̵é ÇÔ¼ö¸¦ »ç¿ëÇϱâ À§Çؼ­´Â libpq/libpq-fs.h Çì´õÆÄÀÏÀ» Æ÷ÇÔÇÏ¿©¾ß ÇÑ´Ù. ¹°·Ð libpq¿Í ¸µÅ©¸¦ ½ÃÅ°´Â °ÍÀÌ ÇÊ¿äÇÏ´Ù.
    ÀÌÁ¦ ÀÌ·¯ÇÑ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ¿© ¾î¶»°Ô ½ÇÀü ¾îÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇÒ °ÍÀÎÁö¿¡ ´ëÇؼ­ ¾Ë¾Æº¸ÀÚ.

     

4. ¿¹Á¦ ÇÁ·Î±×·¥ÀÇ ÀÛ¼º

 

1) °Å´ë°´Ã¼¸¦ »ç¿ëÇÒ °ÍÀΰ¡ ¸» °ÍÀΰ¡

    °Å´ë°´Ã¼¸¦ »ç¿ëÇÏ´Â ÀÀ¿ë ÇÁ·Î±×·¥À» ¾î¶»°Ô ¸¸µé °ÍÀΰ¡ ÇÏ´Â ¹®Á¦´Â ÀüüÀûÀÎ ¼³°è¸¦ ¾î¶»°Ô ÇÒ °ÍÀΰ¡ ÇÏ´Â ¹®Á¦´Ù. ¾Õ¿¡¼­µµ »ìÆ캸¾ÒÁö¸¸ °Å´ë°´Ã¼¶ó°í Çؼ­ Ưº°ÇÑ °ÍÀº ¾ø´Ù.

    PostgreSQL ³»ºÎ¿¡¼­ 8K ÀÌÇÏÀÇ µ¥ÀÌÅÍ´Â È¿À²ÀûÀ¸·Î ´Ù·ê ¼ö ÀÖ°í, ±× ÀÌ»óÀÇ µ¥ÀÌÅÍ´Â °Å´ë°´Ã¼¶ó´Â ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ´Â °Í»ÓÀÌ´Ù. ±×¸®°í °Å´ë°´Ã¼¿¡ ´ëÇÑ Á¢±ÙÀ» º¸ÀåÇϱâ À§ÇØ ¹Ù·Î À§¿¡¼­ ¼³¸íÇÑ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÏ´Â °ÍÀÌ´Ù. ¿©·¯ºÐµéÀº °Å´ë°´Ã¼¸¦ »ç¿ëÇÏ´Â ¾îÇø®ÄÉÀ̼ÇÀ» ¸¸µé°í ½Í¾îÇÒ °ÍÀÌ´Ù.

    ¿©·¯ºÐÀÌ ¿øÇÏ´Â µ¥ÀÌÅ͸¦ ´Ù·ç±â À§ÇÑ µ¥ÀÌÅͺ£À̽º¸¦ ±¸ÃàÇϴµ¥ °Å´ë°´Ã¼°¡ ÇÊ¿äÇÒ ¼öµµ ÀÖ´Ù. ÇÊÀÚÀÇ °æ¿ì¿¡µµ ½Ç¹« ÇÁ·Î±×·¡¹Ö¿¡¼­´Â ´ëºÎºÐ °Å´ë°´Ã¼¸¦ »ç¿ëÇÏÁö ¾Ê¾Ò¾ú´Ù. ÀÌÀ¯´Â ´Ü ÇÑ°¡Áö, ±ÍÂú´Ù´Â °ÍÀ̾ú´Ù. ÀϰŸ®°¡ ¸¹¾ÆÁø´Ù´Â °ÍÀº ÇÁ·Î±×·¡¸Ó¿¡°Ô´Â Á¤¸» ±ÍÂúÀº ÀÏÀÌ´Ù. ¿©·¯ºÐÀÌ »ç¿ëÇÏ°íÀÚ ÇÏ´Â µ¥ÀÌÅÍ°¡ ´Ü¼øÈ÷ µ¢Ä¡¸¸ Å« µ¥ÀÌÅͶó¸é °Å´ë°´Ã¼¸¦ »ç¿ëÇÏÁö ¾Ê¾Æµµ »ó°ü¾ø´Ù. ÆÄÀÏÀÇ À̸§¸¸ Å×ÀÌºí¿¡ ÀúÀåÇسõ°í ÇÊ¿äÇÒ ½Ã¿¡´Â ±× ÆÄÀÏÀ» º¸¿©ÁÖ¸é µÈ´Ù.

    ¶ÇÇÑ ¼öÃâ(export)ÀÌ ÀÚÁÖ ¹ß»ýÇÒ °ÍÀ̶ó¸é ÀÌ ¿ª½Ã °Å´ë°´Ã¼¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ´ÜÁ¡ÀÌ µÈ´Ù. ¼ö ¸Þ°¡³ª µÇ´Â ¿ë·®ÀÇ ÆÄÀÏÀ» ÇÏ·ç¿¡ ¿©·¯ ¼ö½Ê ¹ø, ¾Æ´Ï ¿©·¯ ¼ö¹é ¹ø¾¿ ¼öÃâ(export)À» Çϱâ À§ÇØ º¹»ç¸¦ ÇÏ´Â °ÍÀº ¾îÂ¸é ´ë´ÜÈ÷ ºÒ¸¸½º·¯¿ï ¼öµµ ÀÖ´Ù. ÀÌ·± °æ¿ì¶ó¸é °Å´ë°´Ã¼¸¦ »ç¿ëÇÏÁö ¾Ê¾Æµµ µÈ´Ù´Â °ÍÀ» À̾߱âÇÏ°í ½Í´Ù. ÇÏÁö¸¸ ¿©·¯ºÐµéÀÇ µ¥ÀÌÅͺ£À̽º°¡ ¹«°á¼ºÀ» º¸ÀåÇÏ´Â °ÍÀ» ¿øÇÏ°í, ´ëÇüÀÇ ¸ÖƼ¹Ìµð¾î µ¥ÀÌÅ͸¦ µ¥ÀÌÅͺ£À̽º ¼­¹öÀÇ Àå¾Ç±Ç¿¡ È®½ÇÈ÷ µÎ°í ½Í´Ù¸é, ±×¸®°í ½Ã°£¿©Çà, À妽º¿Í °°Àº µ¥ÀÌÅͺ£À̽º ¼­¹öÀÇ È¿À²ÀûÀÎ ±â´ÉÀ» È°¿ëÇÏ°í ½Í´Ù¸é °Å´ë°´Ã¼¸¦ »ç¿ëÇÏÀÚ. ¾Æ¿ï·¯ ¿©·¯ºÐµéÀÇ ¸ÖƼ¹Ìµð¾î µ¥ÀÌÅÍ¿¡ ´ëÇÑ È®½ÇÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖ´Ù¸é, ȤÀº ÀÌ¿¡ ´ëÇÑ °Ë»ö, ¼öÁ¤ Ãß°¡¿¡ ´ëÇÑ »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö¸¦ ¸¸µé ¼ö¸¸ ÀÖ´Ù¸é, °Å´ë°´Ã¼ ÀÎÅÍÆäÀ̽º´Â ¿©·¯ºÐµéÀÇ °úÁ¦¸¦ ÇØ°áÇϴµ¥ ÃÖ»óÀÇ ¼Ö·ç¼ÇÀ» Á¦°øÇÒ °ÍÀÌ´Ù. ¹Ï°Å³ª ¸»°Å³ª.

     

2) °£´ÜÇÑ ¿¹Á¦ ÇÁ·Î±×·¥

    ¾Õ¼­ ¼³¸íÇÑ ÀÎÅÍÆäÀ̽º ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© °£´ÜÇÑ ¿¹Á¦¸¦ ¸¸µé¾î º¸ÀÚ. PostgreSQL ¹èÆ÷ ÆÐÅ°Áö ¾ÈÀÇ src/examples/ µð·ºÅ丮¿¡ testlo.c¶ó´Â ¿¹Á¦ ÇÁ·Î±×·¥ÀÌ ÀÖ´Ù. ´ÙÀ½¿¡ ³ª¿À´Â ¿¹Á¦ ÇÁ·Î±×·¥°ú ÇÔ²² »ìÆ캻´Ù¸é »ó´çÇÑ µµ¿òÀÌ µÇ¸®¶ó º»´Ù. ±×¸®°í ÀÎÅÍÆäÀ̽º ÇÔ¼ö¿¡ ´ëÇÑ ¼³¸íÀ» Áï¼®¿¡¼­ º¸°íÀÚ ÇÑ´Ù¸é man large_objects ¸í·ÉÀ¸·Î ¸Å´º¾ó ÆäÀÌÁö¸¦ Âü°íÇÏ´Â °Íµµ ÁÁ´Ù. ¸Å´º¾ó ÆäÀÌÁö¿¡´Â ¸î °³ÀÇ ÇÔ¼ö°¡ ºüÁ®ÀÖ´Ù. lo_tellÀ̳ª lo_unlinkµîÀÌ ±×·¸´Ù. º» ¿¹Á¦ÇÁ·Î±×·¥¿¡¼­´Â °Å´ë°´Ã¼ ÀÎÅÍÆäÀ̽º ÇÔ¼öÀÇ »ç¿ë¹ýÀ» º¸À̱â À§ÇÑ ¸ñÀûÀ¸·Î ÀÛ¼ºÇÑ °ÍÀÌ´Ù.
    ¿¹Á¦ ÇÁ·Î±×·¥ÀÇ À̸§Àº lo.cÀÌ´Ù. °Å´ë°´Ã¼¸¦ »ý¼ºÇÏ°í, »ç¿ëÀÚ¿¡°Ô¼­ ÀÔ·ÂÀ» ¹Þ¾Æ¼­ °Å´ë°´Ã¼ ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¸î °¡Áö Å×½ºÆ®¸¦ ÇÑ °ÍÀÌ´Ù. ¿¹Á¦ ÇÁ·Î±×·¥¿¡¼­ ÁøÇà¼ø¼­´Â ´ÙÀ½°ú °°´Ù.

    °Å´ë°´Ã¼ÀÇ »ý¼º - lo_creat
    °Å´ë°´Ã¼¸¦ ¿­±â - lo_open
    »ç¿ëÀÚÀÇ ÀÔ·ÂÀ» ¹Þ¾Æ¼­ °Å´ë°´Ã¼¿¡ ¾²±â - lo_write
    ±â¼úÀÚ Æ÷ÀÎÅ͸¦ ¸¶Áö¸·¿¡ À§Ä¡½ÃÄѼ­ °Å´ë°´Ã¼ÀÇ Å©±â¸¦ ±¸Çϱâ - lo_lseek, lo_tell
    °Å´ë°´Ã¼ÀÇ ¾ÕºÎºÐÀÇ ³»¿ëÀ» Àо Ãâ·ÂÇϱâ - lo_read
    °Å´ë°´Ã¼ÀÇ ±â¼úÀÚ¸¦ ´Ý±â - lo_close
    °Å´ë°´Ã¼¸¦ exportÇϱâ - lo_export
    °Å´ë°´Ã¼¸¦ »èÁ¦Çϱâ - lo_unlink

    ¡² ¸®½ºÆ® 1 ¡³lo.c
     

    #include <stdio.h>
    #include <unistd.h>
    #include <string.h>

    #include "libpq-fe.h"
    #include "libpq/libpq-fs.h"

    void main (int argc, char *argv[]) {
                  char *database;
                  PGconn *conn;
                  PGresult *res;

                  Oid large_object_id;
                  int lo_fd, n, tmp;
                  char buf[BUFSIZ];

                  if (argc != 2) {
                               fprintf(stderr, "»ç¿ë¹ý: %s database_name¡¬n",                                        argv[0]);
                               exit(1);
                  }

                  database = argv[1];

                  /* µ¥ÀÌÅͺ£À̽º¿¡ Á¢¼ÓÇÑ´Ù. */
                  conn = PQsetdb(NULL, NULL, NULL, NULL, database);

                  if (PQstatus(conn) == CONNECTION_BAD) {
                              fprintf(stderr, "µ¥ÀÌÅͺ£À̽º '%s'¿¡
                                          Á¢¼Ó ½ÇÆÐ.¡¬n", database);
                              fprintf(stderr, "%s", PQerrorMessage(conn));
                              PQfinish(conn);
                              exit(1);
                  }
                  res = PQexec(conn, "begin"); /* Æ®·£Àè¼Ç ºí·ÏÀÇ ½ÃÀÛ */
                  PQclear(res);

                  /* ºó °Å´ë°´Ã¼¸¦ ¸¸µé°í, ¿­¾î¼­ µ¥ÀÌÅ͸¦ ¾²°í, export¸¦ ÇÑ ´ÙÀ½ Áö¿î´Ù. */

                  /* °Å´ë°´Ã¼¸¦ »ý¼ºÇؼ­ °´Ã¼ ½Äº°ÀÚ¸¦ ¾ò´Â´Ù. */
                  large_object_id = lo_creat(conn, INV_READ|INV_WRITE);
                  if (large_object_id == 0) { /* ¿¡·¯ */
                             fprintf(stderr, "°Å´ë°´Ã¼¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù.¡¬n");
                  }
                  printf("°Å´ë°´Ã¼ÀÇ ½Äº°ÀÚ °ªÀº %dÀÔ´Ï´Ù.¡¬n",                          large_object_id);

                  /* °Å´ë°´Ã¼¸¦ ¿­¾î¼­ ±â¼úÀÚ¸¦ ¾ò´Â´Ù. */
                  lo_fd = lo_open(conn, large_object_id, INV_WRITE |                          INV_READ);
                  if (lo_fd < 0) {
                             fprintf(stderr, "°Å´ë°´Ã¼¸¦ ¿­ ¼ö ¾ø½À´Ï´Ù.¡¬n");
                  }

                  /* »ç¿ëÀÚÀÇ ÀÔ·ÂÀ» ¹Þ¾Æ¼­ °Å´ë°´Ã¼¿¡ Áý¾î ³Ö´Â´Ù. */
                  printf("°Å´ë°´Ã¼¿¡ µé¾î°¥ ³»¿ëÀ» ÀÔ·ÂÇØ ÁֽʽÿÀ.¡¬n");
                  printf("¸¶Ä¡·Á¸é CTRL-D¸¦ ÀÔ·ÂÇϽʽÿÀ.¡¬n¡¬n");
                  while ((n = read(0, buf, BUFSIZ)) > 0) {
                             tmp = lo_write(conn, lo_fd, buf, n);
                             if (tmp < n) {
                             fprintf(stderr, "Error while reading from stdin.                                      ¡¬n");
                             }
                  }

                  /* °Å´ë°´Ã¼ÀÇ Å©±â¸¦ ±¸ÇÑ´Ù. */
                  tmp = lo_lseek(conn, lo_fd, 0, SEEK_END);
                  printf("ÀÔ·ÂÇÑ ³»¿ëÀº ÃÑ %d ¹ÙÀÌÆ®ÀÔ´Ï´Ù.¡¬n¡¬n", tmp);
                  memset(buf, 0, BUFSIZ);

                  /* °Å´ë°´Ã¼¿¡¼­ ÀϺθ¦ ÀоîµéÀδÙ. */
                  lo_lseek(conn, lo_fd, 0, SEEK_SET);
                  lo_read(conn, lo_fd, buf, 80);
                  printf("°Å´ë°´Ã¼¿¡ ÀúÀåµÈ ³»¿ë Áß Ã³À½ 80 ¹ÙÀÌÆ®´Â ´ÙÀ½°ú                          °°½À´Ï´Ù.¡¬n¡¬n");
                  printf("%s¡¬n¡¬n", buf);
                  lo_close(conn, lo_fd);

                  /* °Å´ë°´Ã¼¸¦ exportÇÑ ´ÙÀ½, »èÁ¦ÇÑ´Ù. */
                  printf("ÀÔ·ÂÇÑ °Å´ë°´Ã¼¸¦ /tmp/lo_%d ÆÄÀÏ·Î exportÇÑ ´ÙÀ½ ³»ºÎÀÇ" "
                  °Å´ë°´Ã¼¸¦ »èÁ¦ÇÕ´Ï´Ù.¡¬n", getpid());
                  memset(buf, 0, BUFSIZ);
                  sprintf(buf, "/tmp/lo_%d", getpid());

                  lo_export(conn, large_object_id, buf);
                  tmp = lo_unlink(conn, large_object_id);
                  if (tmp >= 0) {
                             printf("»èÁ¦ ¼º°ø.¡¬n");
                  }
                  res = PQexec(conn, "end"); /* Æ®·£Àè¼Ç ºí·ÏÀÇ ³¡ */

                  /* Á¤¸®ÇÏ°í ¸¶Ä£´Ù. */
                  PQclear(res);
                  PQfinish(conn);
                  exit(0);
    }

 

    ÄÄÆÄÀÏÀº ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.

    $ gcc -o lo lo.c -I/usr/local/pgsql/include -L/usr/local/pgsql/lib -lpq -g -Wall;

    Å×½ºÆ® °á°ú´Â ´ÙÀ½°ú °°´Ù.

     

5. ³í¹® µ¥ÀÌÅͺ£À̽º ±¸Ãà ¿¹Á¦

    ¾Õ¼­ Àá½Ã ¾ð±ÞÇÑ ³í¹® µ¥ÀÌÅͺ£À̽º¸¦ Çϳª ±¸ÃàÇغ¸ÀÚ. óÀ½¿¡´Â °£´ÜÇÑ XPM ÆÄÀÏÀ» ¿¹Á¦·Î ´Ù·ç·Á°í ÇßÀ¸³ª Á» ´õ ½Ç¿ëÀûÀÎ ³í¹® µ¥ÀÌÅͺ£À̽º¸¦ ´Ù·ç¾î º¸µµ·Ï ÇÏ°Ú´Ù. ±×¸®°í °Å´ë°´Ã¼¸¦ »ç¿ëÇÒ ½Ã¿¡ °Å´ë°´Ã¼¿¡ ´ëÇÑ Àú±ÞÀûÀÎ Á¢±ÙÀº ÇÇÇϵµ·Ï ÇÏ°Ú´Ù. ÀÌÀ¯´Â ³í¹® µ¥ÀÌÅÍ ÆÄÀÏÀÇ Çü½Ä¿¡ ´ëÇÑ ¾î¶°ÇÑ Á¦ÇÑÀ» µÎ±â¿¡µµ Á» ±×·¸°í, Àú±ÞÀûÀÎ Á¢±ÙÀ» ÇÏ·Á¸é ¾î´À Á¤µµ ½Ã°£ µ¿¾ÈÀÇ ¿¬±¸°¡ ÇÊ¿äÇÏ´Ù°í º¸¿©Áö±â ¶§¹®ÀÌ´Ù.

    ³í¹® µ¥ÀÌÅͺ£À̽º¸¦ À¥°ú ¿¬µ¿À» ÇÒ °æ¿ìµµ ¹«½ÃÇÏÁö ¸øÇϴµ¥, ÀÌ·² °æ¿ì¿¡ ³í¹® ÆÄÀÏ Çü½Ä¿¡ ´ëÇÑ CGI ÇÊÅ͸µÀÌ ÇÊ¿äÇÒ Áöµµ ¸ð¸¥´Ù. °¡±î¿î ¿¹¸¦ Çϳª µé¸é PSÆÄÀÏÀ» CGI ÇÁ·Î±×·¥¿¡¼­ HTML ÆÄÀÏ·Î º¯È¯ÇÏ¿© ½Ç½Ã°£À¸·Î À¥ ºê¶ó¿ìÀú »ó¿¡ º¸¿©ÁÖ´Â °æ¿ì¸¦ µé ¼ö ÀÖ´Ù. (¶Ç ÇϳªÀÇ ¿¹·Î ƯÁ¤ ȸ»çÀÇ ÀüÀ¯¹°À̱ä ÇÏÁö¸¸ HWP Çü½ÄÀÇ ÆÄÀÏÀ» ½Ç½Ã°£À¸·Î À¥ ºê¶ó¿ìÀú »ó¿¡ HTML·Î Ãâ·ÂÇØÁÖ´Â HWP CGI ¼­¹ö µîÀÌ ÀÖ´Ù.) À¥ ºê¶ó¿ìÀú »ó¿¡¼­ °ð¹Ù·Î ó¸®ÇÏÁö ¸øÇÏ´Â ÆÄÀÏ Çü½ÄÀ» °¡Áö´Â °Å´ë°´Ã¼¸¦ À¥ »ó¿¡ Ãâ·ÂÇÏ·Á¸é ÀÌ·¯ÇÑ Áß°£ CGI ÀÎÅÍÆäÀ̽º°¡ ÇÊ¿äÇÒ °ÍÀÌ´Ù.

    ÀÌ·¯ÇÑ º¯È¯Àº ¿©·¯ºÐÀÇ ¸òÀÌ´Ù. ¿©±â¼­´Â °Å´ë°´Ã¼¿¡ ´ëÇؼ­´Â import¿Í export¸¸À» »ç¿ëÇÒ °ÍÀÌ´Ù. ³ª¸ÓÁö °Ë»öÀº ³í¹® µ¥ÀÌÅÍ¿¡ ´ëÇÑ Á¤º¸¸¦ ÀúÀåÇÏ´Â Å×À̺íÀ» ÅëÇؼ­ ÀÌ·ç¾îÁú °ÍÀÌ´Ù.

    ¸ÕÀú µ¥ÀÌÅͺ£À̽º¿¡ ÇÊ¿äÇÑ Å×À̺íÀ» Á¤ÀÇÇÏ¿© º¸ÀÚ. µ¥ÀÌÅͺ£À̽º´Â mydb¸¦ »ç¿ëÇÒ °ÍÀÌ°í, Å×À̺íÀº ³í¹®À̶ó°í ¸í¸íÇÒ °ÍÀÌ´Ù. ³í¹® Å×À̺íÀº ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÑ´Ù.

    CREATE TABLE ³í¹® (
    ÁöÀºÀÌ text,
    ³¯Â¥ date,
    Á¦¸ñ text,
    ÀÚ·á¸í text,
    Å©±â int4,
    Çü½Ä text,
    ½Äº°ÀÚ oid
    );

    ÀÌ¿Ü¿¡µµ Å×ÀÌºí¿¡ ³í¹®¿¡ ´ëÇÑ ¼³¸í Çʵ峪 ºÐ·ùÄÚµå µîÀÌ µé¾î°¥ ¹ýÇÏÁö¸¸ °£´ÜÇÏ°Ô Çϱâ À§Çؼ­ »ý·«Çϵµ·Ï ÇÑ´Ù. ÀÌÁ¦ µ¥ÀÌÅ͸¦ ÀÔ·ÂÇغ¸ÀÚ. psqlÀÇ ¡¬copy ¸í·ÉÀ» »ç¿ëÇÏ¸é º¸ÅëÀÇ µ¥ÀÌÅÍ´Â ½±°Ô Áý¾î ³ÖÀ» ¼ö Àִµ¥, lo_import ¶§¹®¿¡ µÇÁö ¾Ê´Â °Í °°´Ù. ±ÍÂú´õ¶óµµ ´ÙÀ½ÀÇ ¸í·ÉÀ» ÀÏÀÏÀÌ ÃÄÁֱ⠹ٶõ´Ù. ¾Æ´Ï¸é ÆÄÀÏ¿¡ ´ã¾Æ¼­ psqlÀÇ ¡¬i ¸í·ÉÀ» »ç¿ëÇصµ ÁÁ´Ù. ÀÔ·Â ÀÎÅÍÆäÀ̽º´Â ½ÇÁ¦·Î´Â À¥À» ÅëÇÏ´Â °ÍÀÌ Á¦ÀÏ °£ÆíÇÏ°í Çö´ëÀûÀÎ ¹æ½ÄÀÏ °ÍÀÌ´Ù. ±× ¿Ü¿¡µµ PostgreSQLÀ» Áö¿øÇÏ´Â X¿ë ÇÁ·ÐÆ® ¿£µå ÇÁ·Î±×·¥À» »ç¿ëÇÏ¸é ½±°Ô ÇÒ ¼ö ÀÖ´Â °Íµµ ÀÖÀ¸´Ï ã¾Æº¸±â ¹Ù¶õ´Ù. lo_import ÇÔ¼ö ¾ÈÀÇ ÆÄÀϸíÀº ¹Ì¸® ÆÄÀÏ ½Ã½ºÅÛ»ó¿¡ ¾Æ¹« °ÍÀ̳ª º¹»çÇؼ­ ¸¸µé¾î µÎµµ·Ï ÇÏÀÚ.

    INSERT INTO ³í¹® VALUES ('¹Ì½Ä°¡', '1980-02-20', '¹ÙÄû¹ú·¹ µÞ´Ù¸®¿¡ ´ëÇÑ ¿µ¾çÇÐÀû ºÐ¼®', '¹ÙÄû¹ú·¹.html', 234500, 'HTML', lo_import('/tmp/¹ÙÄû¹ú·¹.ps'));

    INSERT INTO ³í¹® VALUES ('ÀüÀϼö', '1995-05-05', '°´Ã¼ÁöÇâ µ¥ÀÌÅÍ ¸ðµ¨¿¡¼­ Ŭ¶ó½º °èÃþ ¹× Ŭ¶ó½º ÇÕ¼º °èÃþÀÇ ÁýÁßÈ­ ±â¹ý', 'object_class.html', 101010, 'HTML', lo_import('/tmp/object_class.html'));

    INSERT INTO ³í¹® VALUES ('µ¿¼®È£', '1995-06-30', 'BÇü °£¿° ¹ÙÀÌ·¯½ºÀÇ ¹ßÇö ¹× Áõ½Ä¿¡ À־ X À¯ÀüÀÚÀÇ ¿ªÇÒ', 'xgene.html', 41098, 'HTML', lo_import('/tmp/xgene.html'));

    INSERT INTO ³í¹® VALUES ('Àåżº', '1995-09-25', '2´Ü°è µð½ºÅ© ij½¬ ¸ðÇü¿¡ °üÇÑ ¿¬±¸', 'disk_cache.html', 141342, 'HTML', lo_import('/tmp/disk_cache.html'));

    INSERT INTO ³í¹® VALUES ('¾ÈÀ̱â', '1995-10-15', 'ºñÁ¤»ó ¹Ú¸®¿¡ °üÇÑ ½ÇÇèÀû ¿¬±¸', 'tunnel.html', 874345, 'HTML', lo_import('/tmp/tunnel.html'));

    ÀÌÁ¦ Å×ÀÌºí¿¡ µ¥ÀÌÅÍ°¡ »ðÀԵǾúÀ» °ÍÀÌ´Ù. µ¥ÀÌÅͺ£À̽ºÀÇ »ç¿ëÀÚ°¡ ƯÁ¤ Àι°À̳ª ³¯Â¥±â°£, Á¦¸ñ µî¿¡ ´ëÇÑ °Ë»öÀ» ÅëÇؼ­ ¿øÇÏ´Â ³í¹®À» ã°í ½Í´Ù°í ÇÏÀÚ. ½ÇÁ¦·Î´Â ¿©±â¿¡ ¸î °¡Áö ´õ Á¤º¸°¡ Ãß°¡µÇ°í ¿Â¶óÀÎÀ¸·Î ³í¹® ³»¿ëÀ» °Ë»öÇϵµ·Ï ÇÏ´Â °ÍÀÌ ÁÁÁö¸¸, ±×·² ¿©·ÂÀÌ ¾øÀ¸¹Ç·Î °£´ÜÇÑ SELECT¸¸ Çغ¸µµ·Ï ÇÑ´Ù.

    ´«À¸·Î È®ÀÎÇÒ ¼ö ÀÖ´Â °Íó·³, °Å´ë°´Ã¼¸¦ ¿ÜºÎ ÆÄÀÏ·Î exportÇÏ¿´´Ù. ¿øÇÑ´Ù¸é »ç¿ëÀÚ°¡ º¼ ¼ö ÀÖµµ·Ï Çϰųª ³»·Á¹Þ±â¸¦ Çϵµ·Ï ÇÏ´Â °Íµµ »ý°¢Çغ¼ ¼ö ÀÖ´Ù.

     

    ¢Ñ PHP/FI ¿Í °Å´ë°´Ã¼

    ¾ó¸¶ Àü¿¡ PHP/FI¿¡¼­ °Å´ë°´Ã¼¸¦ ´Ù·ê ¼ö ÀÖ´Â ¹æ¹ýÀÌ ¾ø´À³Ä´Â ¾î´À ºÐÀÇ Áú¹®ÀÌ ÀÖ¾ú´Âµ¥, ±íÀÌ »ý°¢Çغ¸Áö ¾Ê¾Æ¼­ ´äº¯À» µå¸®Áö ¸øÇß´Ù. °á·ÐÀº PHP/FI¿¡¼­ °Å´ë°´Ã¼¿¡ ´ëÇÑ ÀÎÅÍÆäÀ̽º´Â SQL¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â lo_export¿Í lo_import ¹Û¿¡ ¾ø´Ù´Â °ÍÀÌ´Ù. À̰͸¸ »ç¿ëÇصµ °Å´ë°´Ã¼ÀÇ ÀÔÃâ·ÂÀº ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¾Æ½¬¿î ´ë·Î »ç¿ëÇÒ ¼ö´Â ÀÖ´Ù. ÇÏÁö¸¸ °Å´ë°´Ã¼¿¡ ´ëÇÑ Àú±ÞÀûÀÎ Á¢±Ù ¹æ¹ýÀ» PHP/FI¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀº ¾ø´Ù. PHP/FI¿¡¼­ »ç¿ëÀÚ°¡ ÀÚ½ÅÀÇ C¾ð¾î Á¤ÀÇ ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ÀÖ±ä ÇÏÁö¸¸, PostgreSQLÀÇ C¾ð¾î °Å´ë°´Ã¼ ÀÎÅÍÆäÀ̽º¸¦ PHP/FI¿¡ °¡Á®´Ù ºÙÀδٴ °ÍÀº »ó´çÈ÷ Èûµé´Ù°í º¼ ¼ö ÀÖ´Ù. °á·ÐÀûÀ¸·Î, PHP/FI¿¡¼­µµ SQL¿¡¼­¿Í ¸¶Âù°¡Áö·Î ¸ÖƼ¹Ìµð¾î µ¥ÀÌÅ͸¦ µ¥ÀÌÅͺ£À̽º ³»ºÎ¿¡ µÑ ¼ö´Â ÀÖ´Ù. ÇÏÁö¸¸ Àú±ÞÀûÀÎ Á¢±ÙÀº ÇÒ ¼ö ¾øÀ¸¹Ç·Î Á¦ÇÑÀÌ ÀÖÀ» ¼ö¹Û¿¡ ¾ø´Ù.

    ¢Ñ Áö¿öÁø °Å´ë°´Ã¼ÀÇ º¹±¸

    ¾î¼´Ù°¡ µ¥ÀÌÅÍ°¡ Áö¿öÁö´Â ¿øÄ¡ ¾Ê´Â °æ¿ì°¡ ÀÖÀ» ¼ö ÀÖ´Ù. Æ®·£Àè¼ÇÀÌ »ì¸± ¼ö ¾ø´Â µ¥ÀÌÅ͵µ ½Ã°£¿©ÇàÀ» ÅëÇؼ­ ¶ó¸é »ì¸± ¼ö ÀÖ´Ù. ´Ù¸¸ Å×À̺íÀ̳ª µ¥ÀÌÅͺ£À̽ºÀÇ »èÁ¦°¡ ¾Æ´Ñ Å×ÀÌºí ³»ÀÇ µ¥ÀÌÅÍÀÇ »èÁ¦À̾î¾ß ÇÏ°í, vacuumÀÌ ½ÇÇàµÇ±â ÀüÀ̾î¾ß ÇÑ´Ù. ÀÌ·² °æ¿ì¿¡´Â ´ÙÀ½°ú °°Àº SQL¹®À» »ç¿ëÇÏ¿© ¿ø»ó º¹±¸½Ãų ¼ö ÀÖ´Ù.

    insert into ³í¹® select *from ³í¹®['epoch', 'now'];

     

6. ¿ä¾à

    Áö±Ý±îÁö °£´ÜÇÏ°Ô PostgreSQLÀÇ °Å´ë°´Ã¼ ÀÎÅÍÆäÀ̽º¿¡ °üÇØ »ìÆ캸¾Ò´Ù. °Å´ë°´Ã¼¿¡ ´ëÇÑ °³³ä°ú °Å´ë°´Ã¼¸¦ »ç¿ëÇÒ ¶§ÀÇ Àå´ÜÁ¡, °Å´ë°´Ã¼ ÇÔ¼ö ÀÎÅÍÆäÀ̽º¿Í ½ÇÁ¦ »ç¿ë ¿¹¸¦ »ìÆ캸¾Ò´Ù. ±×¸®°í »ó´çÈ÷ Ãʺ¸ÀûÀ̱ä ÇÏÁö¸¸ °£´ÜÇÑ ¸ÖƼ¹Ìµð¾î(¶ó°í ÇÒ ¼öµµ ¾øÀ» °Í°°Áö¸¸) µ¥ÀÌÅ͸¦ °Å´ë°´Ã¼¿¡¼­ ¾î¶»°Ô ´Ù·ç´ÂÁö¿¡ ´ëÇؼ­µµ »ç·Ê¸¦ ÅëÇؼ­ »ìÆ캸¾Ò´Ù. »ç½Ç ÀÌ°ÍÀº ¾ÆÁÖ ±âÃÊÀûÀÎ °Í¿¡ Áö³ªÁö ¾Ê´Â´Ù. ½ÇÁ¦·Î ÀÌ·¯ÇÑ µ¥ÀÌÅ͸¦ ´Ù·ç·Á¸é À¥ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ´Â °ÍÀÌ Çö½ÇÀûÀÌ°í, ±×·¸´Ù°í ÇÑ´Ù¸é À¥ »ó¿¡¼­ ¸ÖƼ¹Ìµð¾î µ¥ÀÌÅ͸¦ Ãâ·ÂÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ±×°Ô HTMLÀÌ µÇ´ø SGMLÀÌ µÇµç °£¿¡ µ¥ÀÌÅͺ£À̽º¸¦ »ç¿ëÇÏ°íÀÚ ÇÏ´Â ÀÌ¿¡°Ô ÃÖ´ëÇÑÀÇ ³»¿ëÀ» º¸¿©ÁÖ´Â °ÍÀÌ Áß¿äÇÏ´Ù°í º¼ ¼ö ÀÖ´Ù.

    óÀ½¿¡´Â °£´ÜÇϳª¸¶ À¥ »ó¿¡¼­ º¸¿©ÁÙ ¼ö ÀÖ´Â Àڱ׸¶ÇÑ °Å´ë°´Ã¼ ¾îÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇغ¸·Á°í ÇßÁö¸¸, ªÀº ½Ã°£ ¾È¿¡ ÀÌ°ÍÀú°Í ÇÏ·Á´Ï ¶æ´ë·Î µÇÁö ¾Ê¾Ò´Ù. Á¤¸» ¸®´ª½º¿¡¼­´Â ÇÒ °ÍÀÌ ³Ê¹« ¸¹¾Æ Æò»ýÀ» Çصµ ´Ù ¸øÇÒ °Í °°´Ù. :) ¾Æ, ÀÌÁ¦ ¾Æ½¬¿î ¼³ ¿¬ÈÞµµ PostgreSQL°ú ÇÔ²² ³¡³ª°¡°í ÀÖ´Ù.

     

    ¸®´ª½º ¿ùµå¿¡ ¿¬ÀçµÇ´Â PostgreSQL ±â»çÀÇ ÇÁ·Î±×·¥ ¼Ò½º¿Í Áö³­ 12¿ù¿¡ ¿¬ÀçµÇ¾ú´ø PHP/FI ÇÁ·Î±×·¥ ¼Ò½º´Â ÇÊÀÚÀÇ È¨ÆäÀÌÁö(http://free.sense.co.kr/CGI_database/)¿Í ÇÏÀÌÅÚ ¸®´ª½º µ¿È£È¸ ÀÚ·á½Ç¿¡ Á¤±âÀûÀ¸·Î ¿Ã·ÁµÎ°í ÀÖ´Ù. ¼Ò½º°¡ ÇÊ¿äÇϽŠºÐÀº Âü°íÇϱ⠹ٶõ´Ù.




¡ã top

homeÀ¸·Î...