| PostgreSQL 8.3.3¹®¼ | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 40. PL/Python - Python ¼ö¼Ó ¾ð¾î | Fast Forward | Next |
PL/Python ¾ð¾î ¸ðµâÀº ÀÚµ¿ÀûÀ¸·Î plpy¶ó´Â Python ¸ðµâÀ» ÀÓÆ÷Æ® ÇÕ´Ï´Ù.
ÀÌ ¸ðµâÀÇ ÇÔ¼ö¿Í Á¤¼ö´Â,
plpy.
foo
¿Í °°ÀÌ ÀÛ¼ºÇÑ Python ÄÚµå·ÎºÎÅÍ »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
ÇöÀç plpy¿¡¼´Â,
plpy.debug(
msg
),
plpy.log(
msg
),
plpy.info(
msg
),
plpy.notice(
msg
),
plpy.warning(
msg
),
plpy.error(
msg
),¹× plpy.fatal(
msg
) ÇÔ¼ö¸¦ ±¸ÇöÇϰí ÀÖ½À´Ï´Ù.
plpy.error ¹× plpy.fatal´Â,
½ÇÁ¦·Î PythonÀÇ ¿¹¿Ü¸¦ ¹ß»ý½Ãŵ´Ï´Ù.
À̰ÍÀÌ Æ÷ÂøµÇÁö ¾Ê´Â °æ¿ì, È£ÃâÁßÀÇ Äõ¸® ¿ÜºÎ¿¡ ÀüÇØÁ®, ±× °á°ú, ÇöÀçÀÇ Æ®·£Àè¼Ç ȤÀº ¼ºêÆ®·£Àè¼ÇÀÌ Áß´Ü(abort) ÇÕ´Ï´Ù.
raise plpy.ERROR("msg") ¹× raise plpy.FATAL("msg")´Â,
°¢°¢ plpy.error ¹× plpy.fatalÀÇ È£Ãâ°ú °°½À´Ï´Ù.
´Ù¸¥ ·¹º§Àº, ´Ù¸¥ Á߿䵵ÀÇ ¸Þ¼¼Áö¸¦ »ý¼ºÇÒ »ÓÀÔ´Ï´Ù.
log_min_messages °ú client_min_messages¼³Á¤ º¯¼ö´Â,
ƯÁ¤ÀÇ Á߿䵵ÀÇ ¸Þ¼¼Áö¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡ º¸°íÇÏ´ÂÁö,
¼¹öÀÇ ·Î±×¿¡ ½á³»´ÂÁö, ȤÀº ±× ¾çÂÊ ¸ðµÎ ÀÎÁö¸¦ Á¦¾îÇÕ´Ï´Ù.
ÀÚ¼¼ÇÑ °ÍÀº Chapter 17À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä.
°Ô´Ù°¡
plpy¸ðµâÀº
execute ¹× prepare¶ó´Â 2°³ÀÇ ÇÔ¼ö¸¦ ÁغñÇϰí ÀÖ½À´Ï´Ù.
plpy.execute¸¦, Äõ¸® ¹®ÀÚ¿ ¹× »ý·« °¡´ÉÇÑ Á¦ÇÑ ÀÎÀÚ¸¦ ºÙ¿© È£ÃâÇϸé, Äõ¸®°¡ ½ÇÇàµÇ¾î °á°ú °´Ã¼·Î¼ Äõ¸® °á°ú°¡ µ¹¾Æ°©´Ï´Ù.
ÀÌ °á°ú °´Ã¼´Â ¸®½ºÆ® ȤÀº ÀÌÀü °´Ã¼¸¦ ¸ð¹æ ÇÕ´Ï´Ù.
°á°ú °´Ã¼´Â, Çà ¹øÈ£³ª ·Ä¸íÀ» ÅëÇØ Á¢±Ù ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
°á°ú °´Ã¼¿¡´Â,
Äõ¸® °á°úÀÇ Çà¼ö¸¦ µ¹·ÁÁÖ´Â nrows(),
SPI_execute°¡ µ¹·ÁÁÖ´Â °ªÀ» µ¹·ÁÁÖ´Â,
status¶ó´Â ¹æ¹ýÀÌ Ãß°¡µÇ°í ÀÖ½À´Ï´Ù.
°á°ú °´Ã¼´Â º¯°æÀÌ °¡´ÉÇÕ´Ï´Ù.
ÀÌÇÏ¿¡ ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.
rv = plpy.execute("SELECT * FROM my_table", 5)
À̰ÍÀº, my_table·ÎºÎÅÍ 5Çà±îÁö¸¦ µ¹·ÁÁÝ´Ï´Ù. my_table¿¡ my_column¿ÀÌ Á¸ÀçÇÏ´Â °æ¿ì, ±× ¿¿¡´Â ÀÌÇÏ¿Í °°ÀÌ Á¢±Ù ÇÒ ¼ö ÀÖ½À´Ï´Ù.
foo = rv[i]["my_column"]
2¹øÂ°ÀÇ ÇÔ¼ö plpy.prepare´Â, Äõ¸®ÀÇ ½ÇÇà °èȹÀ» ÁغñÇÕ´Ï´Ù.
Äõ¸®³»¿¡ ¸Å°³º¯¼ö ÂüÁ¶°¡ ÀÖ´Â °æ¿ì, Äõ¸® ¹®ÀÚ¿ ¹× ÀÎÀÚÇüÀÇ ¸®½ºÆ®¿Í ÇÔ²² ºÒ·Á °©´Ï´Ù.
¿¹¸¦ µé¸é, ÀÌÇÏ¿Í °°ÀÌ ÇÕ´Ï´Ù.
plan = plpy.prepare("SELECT last_name FROM my_users WHERE first_name = $1", [ "text" ])
text´Â, $1·Î¼ °Ç³×ÁÖ´Â º¯¼öÀÇ ÇüÅÂÀÔ´Ï´Ù.
¸í·É¹®À» ÁغñÇÑ ÈÄ, ±×°ÍÀ» ½ÇÇàÇϱâ À§Çؼ ÇÔ¼öplpy.execute¸¦ »ç¿ëÇÕ´Ï´Ù.
rv = plpy.execute(plan, [ "name" ], 5)
3¹øÂ°ÀÇ ÀÎÀÚ´Â Á¦ÇÑ ÀÎÀÚÀ̸ç, »ý·« °¡´ÉÇÕ´Ï´Ù.
PL/Python ¸ðµâÀ» »ç¿ëÇØ ÁغñÇÑ °èȹÀº ÀÚµ¿ÀûÀ¸·Î º¸Á¸µË´Ï´Ù. À̰ÍÀÌ ¹«¾ùÀ» ÀǹÌÇÏ´ÂÁö¿¡ ´ëÇØ¼´Â SPIÀÇ ¹®¼(Chapter 41)¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä. À̰ÍÀ» º¹¼ö È£Ãâ¿¡ ´ëÇØ È¿°úÀûÀ¸·Î »ç¿ëÇϱâ À§Çؼ´Â, ¿µ¼ÓÀûÀÎ ÀúÀå¿ë »çÀüÀÎ SD ¶Ç´Â GD(Section 40.1¸¦ ÂüÁ¶)ÀÇ ¾î´ÀÂÊÀÌµç »ç¿ëÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é, ÀÌÇÏ¿Í °°ÀÌ ÇÕ´Ï´Ù.
CREATE FUNCTION usesavedplan() RETURNS trigger AS $$
if SD.has_key("plan"):
plan = SD["plan"]
else:
plan = plpy.prepare("SELECT 1")
SD["plan"] = plan
# rest of function
$$ LANGUAGE plpythonu;