36.1. ¼ö¼Ó ¾ð¾îÀÇ ¼³Ä¡

¼ö¼Ó ¾ð¾î´Â, ±×°ÍµéÀÌ »ç¿ëµÇ´Â ¸ðµç µ¥ÀÌÅͺ£À̽º¿¡ "¼³Ä¡"µÇ¾î ÀÖ¾î¾ß ÇÕ´Ï´Ù. ±×·¯³ª, template1µ¥ÀÌÅͺ£À̽º¿¡ ¼³Ä¡ µÈ ¼ö¼Ó ¾ð¾î´Â, CREATE DATABASE¿¡ ÀÇÇØ template1ÀÇ Ç׸ñ¿¡ º¹»çµÇ±â ¶§¹®¿¡, ±× ÈÄ¿¡ ÀÛ¼ºµÈ ¸ðµç µ¥ÀÌÅͺ£À̽º¿¡¼­ ÀÚµ¿ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. µû¶ó¼­, µ¥ÀÌÅͺ£À̽º °ü¸®ÀÚ´Â ¾î´À µ¥ÀÌÅͺ£À̽º¿¡ ¾î¶² ¾ð¾î¸¦ »ç¿ëÇÒÁö¸¦ °áÁ¤ÇÒ ¼ö ÀÖ°í, ±âº»°ªÀ¸·Î »ç¿ëÇÒ ¾ð¾îµµ °áÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

Ç¥ÁØ ¹èÆ÷¹°·Î Á¦°øµÇ´Â ¾ð¾î¿¡¼­, ±× ¾ð¾î¸¦ ÇöÀçÀÇ µ¥ÀÌÅͺ£À̽º¿¡ ¼³Ä¡ÇÏ·Á¸é CREATE LANGUAGE language_name ÀÇ ½ÇÇุÀÌ ÇÊ¿äÇÕ´Ï´Ù. ½© Ä¿¸àµå ¶óÀÎÀ¸·ÎºÎÅÍ createlang ÇÁ·Î±×·¥À» »ç¿ëÇØ À̰ÍÀ» ½Ç½ÃÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, PL/pgSQL¸¦ template1µ¥ÀÌÅͺ£À̽º¿¡ ¼³Ä¡ÇÏ·Á¸é, ¾Æ·¡¿Í °°ÀÌ ½ÇÇàÇØ ÁÖ¼¼¿ä.

createlang plpgsql template1

¾Æ·¡¿Í °°Àº ¼öµ¿ ÀÛ¾÷Àº CREATE LANGUAGE¸¦ ÀνÄÇÒ ¼ö ¾ø´Â µ¶ÀÚÀûÀÎ ¾ð¾î ¼³Ä¡¿¡ ´ëÇØ¼­¸¸ »ç¿ëÇÏ´Â °ÍÀ» Ãßõ ÇÕ´Ï´Ù.

¼ö¼Ó ¾ð¾îÀÇ ¼öµ¿ ¼³Ä¡ ¹æ¹ý

¼ö¼Ó ¾ð¾î¸¦ ´ÙÀ½ÀÇ 4 ´Ü°è·Î µ¥ÀÌÅͺ£À̽º¿¡ ¼³Ä¡ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÀÛ¾÷Àº µ¥ÀÌÅͺ£À̽ºÀÇ ½´ÆÛ À¯Àú°¡ ½Ç½ÃÇØ¾ßÇÕ´Ï´Ù. (CREATE LANGUAGE¸¦ ÀνÄÇÒ ¼ö ÀÖ´Â ¾ð¾î¿¡¼­´Â, 2¹øÂ°¿Í 3¹øÂ°ÀÇ ´Ü°è´Â »ý·« ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÊ¿ä½Ã ÀÚµ¿ÀûÀ¸·Î ÇàÇØÁö±â ¶§¹®ÀÔ´Ï´Ù. )

  1. ¾ð¾î Çڵ鷯ÀÇ °øÀ¯ °´Ã¼°¡ ÄÄÆÄÀÏ µÇ¾î, ÀûÀýÇÑ ¶óÀ̺귯¸® µð·ºÅ丮¿¡ ¼³Ä¡µÇ¾î¾ß ÇÕ´Ï´Ù. À̰ÍÀº, Åë»óÀÇ »ç¿ëÀÚ Á¤ÀÇÀÇ CÇÔ¼ö¸¦ ÀÛ¼ºÇØ ¼³Ä¡ ÇÒ ¶§ °Í°ú °°½À´Ï´Ù. Section 33.9.6¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä. ½ÇÁ¦ ÇÁ·Î±×·¥ ¾ð¾î ¿£ÁøÀ» Á¦°øÇÏ´Â ¿ÜºÎ ¶óÀ̺귯¸®¿¡, ¾ð¾î Çڵ鷯°¡ ÀÇÁ¸ÇÏ´Â ÀÏÀÌ ÀÚÁÖ ÀÖ½À´Ï´Ù. ÀÌ °æ¿ì´Â ±× ¶óÀ̺귯¸®µµ ¼³Ä¡µÇ¾î¾ß ÇÕ´Ï´Ù.

  2. Çڵ鷯´Â ¾Æ·¡¿Í °°Àº ¸í·ÉÀ¸·Î ¼±¾ð¾î¾ß ÇÕ´Ï´Ù.

    CREATE FUNCTION 
    handler_function_name
    ()
        RETURNS language_handler
        AS '
    path-to-shared-object
    '
        LANGUAGE C;

    language_handlerÀÇ Æ¯º°ÇÑ ¹Ýȯ°ªÀÇ ÇüÅ´Â, µ¥ÀÌÅͺ£À̽º¿¡ ÀÌ ÇÔ¼ö°¡ Á¤ÀÇµÈ SQLµ¥ÀÌÅÍÇüÀ» µ¹·ÁÁÖÁö ¾Ê°í, SQL¹®¿¡¼­ Á÷Á¢ »ç¿ëÇÒ ¼ö ¾ø´Ù´Â °ÍÀ» ÀüÇÕ´Ï´Ù.

  3. »ý·« °¡´ÉÇÏÁö¸¸, ¾ð¾î Çڵ鷯´Â ½ÇÁ¦·Î ½ÇÇàÇÏ´Â ÀÏ ¾øÀÌ, ÇÔ¼ö Á¤ÀÇÀÇ Á¤È®¼ºÀ» °Ë»çÇÏ´Â "À¯È¿¼º °Ë»ç"ÇÔ¼ö¸¦ Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸¸¾à Á¸ÀçÇϸé, À¯È¿¼º °Ë»ç ÇÔ¼ö´Â CREATE FUNCTION·Î ºÒ·Á °©´Ï´Ù. À¯È¿¼º °Ë»ç ÇÔ¼ö´Â Çڵ鷯¿¡ ÀÇÇØ Á¦°øµÇ¾î ÀÌÇÏ¿Í °°Àº ¸í·ÉÀ¸·Î ¼±¾ðµË´Ï´Ù.

    CREATE FUNCTION 
    validator_function_name
    (oid)
        RETURNS void
        AS '
    path-to-shared-object
    '
        LANGUAGE C;

  4. PL´Â ¾Æ·¡¿Í °°Àº ¸í·ÉÀ¸·Î ¼±¾ðµÇ¾î¾ß ÇÕ´Ï´Ù.

    CREATE [TRUSTED] [PROCEDURAL] LANGUAGE 
    language-name
    
        HANDLER 
    handler_function_name
    
        [VALIDATOR 
    validator_function_name
    
    ] ;

    TRUSTED¶ó°í ÇÏ´Â ¿É¼Ç Ű¿öµå´Â, ½´ÆÛ À¯Àú ±ÇÇÑÀ» °¡ÁöÁö ¾Ê´Â ÀÏ¹Ý »ç¿ëÀÚ°¡ ÀÌ ¾ð¾î¸¦ »ç¿ëÇØ ÇÔ¼ö³ª Æ®¸®°Å ÇÁ·Î½ÃÀú¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖÀ»Áö ¾î¶³Áö¸¦ ÁöÁ¤ÇÕ´Ï´Ù. PLÇÔ¼ö´Â µ¥ÀÌÅÍ º£À̽º ¼­¹öÀÇ ³»ºÎ¿¡¼­ ½ÇÇàµÇ±â ¶§¹®¿¡, TRUSTEDÇ÷¡±×´Â µ¥ÀÌÅÍ º£À̽º ¼­¹ö ³»ºÎ³ª ÆÄÀÏ ½Ã½ºÅÛ¿¡ Á¢¼ÓÀ» Çã¿ëÇÏÁö ¾Ê´Â ¾ð¾î¸¸ÀÌ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. PL/pgSQL¿Í PL/Tcl, PL/Perl¾ð¾î´Â TRUSTEDÀÇ ´ë»óÀ̶ó°í °í·ÁµË´Ï´Ù. ¹«Á¦ÇÑÇÏ°Ô ±â´ÉÀÌ Á¦°øµÇµµ·Ï ¼³°èµÈ PL/TclU, PL/PerlU, PL/PythonU¾ð¾î¿¡ ´ëÇØ¼­´Â, TRUSTED¸¦ ÁöÁ¤ÇØ µÇÁö ¾Ê½À´Ï´Ù .

Example 36-1¿¡, ¼öµ¿ ¼³Ä¡ ¼ø¼­°¡ PL/pgSQL¾ð¾î·Î ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö¸¦ ³ªÅ¸³À´Ï´Ù.

Example 36-1. PL/pgSQLÀÇ ¼öµ¿ ¼³Ä¡

ÀÌÇÏÀÇ ¸í·ÉÀº, µ¥ÀÌÅÍ º£À̽º ¼­¹ö¿¡ PL/pgSQL¾ð¾îÀÇ È£Ãâ Çڵ鷯 ÇÔ¼öÀÇ °øÀ¯ °´Ã¼ÀÇ Á¸ÀçÇÏ´Â Àå¼Ò¸¦ ÅëÁöÇÕ´Ï´Ù.

CREATE FUNCTION plpgsql_call_handler() RETURNS language_handler AS
    '$libdir/plpgsql' LANGUAGE C;

PL/pgSQL´Â À¯È¿¼º °Ë»ç ÇÔ¼ö¸¦ °¡Áö°í Àֱ⠶§¹®¿¡, ÀÌÇÏ¿Í °°ÀÌ ¼±¾ðÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

CREATE FUNCTION plpgsql_validator(oid) RETURNS void AS
    '$libdir/plpgsql' LANGUAGE C;

ÀÌÇÏÀÇ Ä¿¸àµå´Â,

CREATE TRUSTED PROCEDURAL LANGUAGE plpgsql
    HANDLER plpgsql_call_handler
    VALIDATOR plpgsql_validator;

Á÷Àü¿¡ ¼±¾ðµÈ ÇÔ¼ö¸¦, ¾ð¾î ¼Ó¼ºÀÌ plpgsqlÀÎ ÇÔ¼ö³ª Æ®¸®°Å ÇÁ·Î½ÃÀú·Î È£ÃâÇØ¾ß¸¸ ÇÏ´Â °ÍÀ» Á¤ÀÇÇÕ´Ï´Ù.

±âº»°ªÀÇ PostgreSQL¼³Ä¡´Â, PL/pgSQL¾ð¾î¿ëÀÇ Çڵ鷯´Â ±¸ÃàµÇ¾î "library"µð·ºÅ丮¿¡ ¼³Ä¡µË´Ï´Ù. TclÁö¿ø ÷ºÎ·Î ±¸ÃàÇßÀ» °æ¿ì, PL/Tcl¿Í PL/TclUÀÇ Çڵ鷯µµ ±¸ÃàµÇ°í °°Àº Àå¼Ò¿¡ ¼³Ä¡µË´Ï´Ù. °°ÀÌ Perl Áö¿ø ÷ºÎ·Î ±¸ÃàÇßÀ» °æ¿ì´Â PL/Perl¿Í PL/PerlUÇڵ鷯°¡, Python Áö¿ø ÷ºÎ·Î ±¸ÃàÇßÀ» °æ¿ì´Â PL/PythonUÇڵ鷯°¡ ±¸ÃàµÇ¾î ¼³Ä¡µË´Ï´Ù.