| PostgreSQL 8.3.3¹®¼ | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 5. µ¥ÀÌÅÍ Á¤ÀÇ | Fast Forward | Next |
PostgreSQL´Â ±âº»ÀûÀÎ Å×À̺íÀÇ ÆÄƼ¼Å´×(ºÐÇÒ)À» ¼Æ÷Æ®Çϰí ÀÖ½À´Ï´Ù. ÀÌ ¸¶µð¿¡¼´Â µ¥ÀÌÅͺ£À̽º ¼³°è¿¡ ´ëÇØ¼, ¿Ö ±×¸®°í ¾î¶»°Ô ÆÄƼ¼Å´×À» ½ÇÇàÇÏ´ÂÁö¸¦ ÇØ¼³ÇÕ´Ï´Ù.
ÆÄƼ¼Å´×Àº ³í¸®ÀûÀ¸·Î 1°³ÀÇ Å« Å×À̺íÀ», ¹°¸®ÀûÀ¸·Î ÀÛÀº ÆÄƼ¼ÇÀ¸·Î ³ª´©´Â °ÍÀ» °¡¸®Åµ´Ï´Ù. ÆÄƼ¼Å´×Àº ¸î °¡Áö ÀÌÁ¡ÀÌ ÀÖ½À´Ï´Ù.
ƯÁ¤ÇÑ »óȲ¿¡ ÀÖ¾î, Äõ¸®ÀÇ ÆÛÆ÷¸Õ½º°¡ ±ØÀûÀ¸·Î °³¼±µË´Ï´Ù. ±¸Ã¼ÀûÀ¸·Î ¾×¼¼½º°¡ ¸¹Àº Å×ÀÌºí ³»ÀÇ ÇàÀ» ´ÜÀÏ ÆÄƼ¼Ç ¶Ç´Â ÀϺÎÀÇ ÆÄƼ¼Ç ³»¿¡ ³Ö´Â °ÍÀÔ´Ï´Ù. ÆÄƼ¼Å´×Àº À妽ºÀÇ ¼±µÎ¿¡ ¿À» ¿Å°Ü³õ¾Æ À妽º Å©±â°¡ °¨¼ÒÇÕ´Ï´Ù. ÀÌ ¶§¹®¿¡, À妽º ³»ÀÇ ÀÚÁÖ »ç¿ëµÇ´Â ºÎºÐÀÌ ¸Þ¸ð¸® ³»¿¡ µé¾î°¡±â ½¬¿öÁý´Ï´Ù.
Äõ¸®³ª ¾÷µ¥ÀÌÆ®°¡ ´ÜÀÏ ÆÄƼ¼ÇÀÇ ´ëºÎºÐ¿¡ ¾×¼¼½º ÇÏ´Â °æ¿ì, À妽º¿Í Å×À̺í Àüü¿¡ °ÉÃÄ »Ñ·ÁÁø ·£´ý ¾×¼¼½º read ´ë½Å¿¡, ±× ÆÄƼ¼ÇÀÇ ½ÃÄö¼È ½ºÄµÀ¸·Î ÇÒ ¼ö°¡ ÀÖ¾î ¼º´ÉÀº °³¼±ÇÕ´Ï´Ù.
±× »ç¾çÀÌ ÆÄƼ¼Ç ¼³°è¿¡ ¸Âµµ·Ï °èȹµÇ°í ÀÖÀ¸¸é, ´ë·®ÀÇ ·Îµå³ª »èÁ¦°¡ ÆÄƼ¼ÇÀÇ Ãß°¡³ª »èÁ¦¿¡ ÀÇÇØ ÀÌ·ç¾îÁú °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. ALTER TABLE´Â ´ë·® Á¶ÀÛº¸´Ù ºü¸¨´Ï´Ù. ¶ÇÇÑ, ´ë·®ÀÇDELETE¿¡ ÀÇÇØ ¹ß»ýÇÏ´Â VACUUMÀÇ ¿À¹öÇìµå¸¦ ¿ÏÀüÇÏ°Ô ¸·½À´Ï´Ù.
Á»Ã³·³ »ç¿ëµÇÁö ¾Ê´Â µ¥ÀÌÅÍ´Â Àú·ÅÇÑ °¡°Ý°ú ´À¸° ÀúÀå ¹Ìµð¾î·Î Àå¼Ò¸¦ ¹Ù²Ü ¼ö ÀÖ½À´Ï´Ù.
ÀÌ·¯ÇÑ ÀåÁ¡Àº Å×À̺íÀÇ Å©±â°¡ ¸Å¿ì Ä¿Áö´Â °æ¿ì¿¡ ¹ß°ßµË´Ï´Ù. Å×À̺íÀÇ ÆÄƼ¼Å´×¿¡ ÀÇÇÑ ÀåÁ¡Àº ¾îÇø®ÄÉÀ̼ǿ¡ ÀÇÁ¸ÇÏÁö¸¸, °æÇèÀûÀ¸·Î Å×À̺íÀÇ Å©±â°¡ µ¥ÀÌÅͺ£À̽º ¼¹öÀÇ ¹°¸®Àû ¸Þ¸ð¸®¸¦ ÃʰúÇÏ´Â Áö°¡ Æ÷ÀÎÆ®°¡ µË´Ï´Ù.
ÇöÀç »óÅ·μ´Â PostgreSQL´Â ÆÄƼ¼Å´×À» Å×À̺íÀÇ »ó¼Ó¿¡ ÀÇÇØ ¼Æ÷Æ®Çϰí ÀÖ½À´Ï´Ù. °¢°¢ÀÇ ÆÄƼ¼ÇÀº 1°³ÀÇ ºÎ¸ð Å×À̺íÀÇ ÀÚ½Ä Å×À̺í·Î¼ ÀÛ¼ºµÇÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. ºÎ¸ð Å×À̺í ÀÚ½ÅÀº º¸Åë, ºñ¾î ÀÖ´Â Å×À̺íÀÌ µÇ¸ç, ÀüüÀÇ µ¥ÀÌÅ͸¦ ´ëÇ¥Çϱâ À§Çؼ Á¸ÀçÇÕ´Ï´Ù. ÆÄƼ¼Å´×À» ¼³Á¤Çϱâ Àü¿¡, »ó¼Ó(Section 5.8¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä)¿¡ ´ëÇØ ÀÚ¼¼ÇÏ°Ô ¾Ë¾Æ µÑ Çʿ䰡 ÀÖ½À´Ï´Ù.
ÆÄƼ¼Å´×¿¡ ´ëÇØ ´ÙÀ½ÀÇ Á¾·ù°¡PostgreSQL¿¡ ½ÇÇàµÇ°í ÀÖ½À´Ï´Ù.
Å×À̺íÀº ۰¡ µÇ´Â ¿ ȤÀº ¿¼¼Æ®¿¡ ÀÇÇØ Á¤ÀǵǴ "¹üÀ§"¿¡ ÆÄƼ¼Å´× µË´Ï´Ù. ´Ù¸¥ ÆÄƼ¼Ç¿¡ ÁöÁ¤ÇÒ ¼ö ÀÖ¾ú´ø °ªÀÇ ¹üÀ§´Â °ãÄ¥ °ÍÀº ¾ø½À´Ï´Ù. ¿¹¸¦ µé¸é, ³¯Â¥ÀÇ ¹üÀ§¿¡ ÀÇÇØ ÆÄƼ¼Å´× µÇ°Å³ª ƯÁ¤ÇÑ ºñÁö´Ï½º ¿ÀºêÁ§Æ®ÀÇ ½Äº°ÀÚÀÇ ¹üÀ§¿¡ ÀÇÇØ ÆÄƼ¼Å´× µÇ°Å³ª ÇÕ´Ï´Ù.
Ű °ªÀÌ °¢ ÆÄƼ¼Ç¿¡ ³ªÅ¸³ª´Â ¸í½ÃÀûÀÎ ¸®½ºÆ®¿¡ ÀÇÇØ¼, Å×À̺íÀÌ ÆÄƼ¼Å´× µË´Ï´Ù.
Å×À̺íÀÇ ÆÄƼ¼Å´×À» ½ÇÇàÇÏ·Á¸é , ÀÌÇϸ¦ ½Ç½ÃÇØ Áֽʽÿä.
¸ðµç ÆÄƼ¼ÇÀÌ »ó¼ÓÇÏ°Ô µÇ´Â "¸¶½ºÅÍ"Å×À̺íÀ» ÀÛ¼ºÇØ Áֽʽÿä.
ÀÌ Å×À̺íÀº µ¥ÀÌÅ͸¦ ÀúÀåÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ Å×À̺íÀº ¸ðµç ÆÄƼ¼Ç¿¡ ´ëÇØ Àû¿ëÇÒ »ý°¢ÀÌ ¾Æ´Ò °æ¿ì üũ Á¦ÇÑÀº Á¤ÀÇÇÏÁö ¸»¾Æ Áֽʽÿä. À妽º³ª À¯ÀÏÇÑ Á¦ÇÑÀ» Á¤ÀÇÇÏ´Â Àϵµ Àǹ̰¡ ¾ø½À´Ï´Ù.
¸¶½ºÅÍ Å×ÀÌºí¿¡¼ »ó¼ÓµÈ, ¸î °³ÀÇ"ÀÚ½Ä"Å×À̺íÀ» ÀÛ¼ºÇÕ´Ï´Ù. º¸Åë, ÀÌ·¯ÇÑ ÀÚ½Ä Å×À̺íÀº ¸¶½ºÅͷκÎÅÍ »ó¼ÓµÈ ¿ À̿ܿ¡´Â ¿À» Ãß°¡ÇÏÁö ¾Ê°Ô ÇÕ´Ï´Ù.
ÀÚ½Ä Å×À̺íÀº ¸ðµç Á¡¿¡¼ PostgreSQLÀÇ º¸Åë Å×À̺íÀÌÁö¸¸, ÀÚ½Ä Å×À̺íÀº ÆÄƼ¼ÇÀ¸·Î¼ ÂüÁ¶ÇÏ°Ô µË´Ï´Ù.
°¢°¢ÀÇ ÆÄƼ¼Ç¿¡¼ÀÇ Å° °ª¸¦ Á¤ÀÇÇϱâ À§Çؼ, ÆÄƼ¼Å´×µÈ Å×ÀÌºí¿¡ Å×À̺í Á¦ÇÑÀ» Ãß°¡ÇØ Áֽʽÿä.
ÀüÇüÀûÀÎ ¿¹´Â
CHECK ( x = 1 ) CHECK ( county IN ( 'Oxfordshire', 'Buckinghamshire', 'Warwickshire' )) CHECK ( outletID >= 100 AND outletID < 200 )
Á¦ÇÑÀÌ, ´Ù¸¥ ÆÄƼ¼Ç¿¡ ´ëÇØ Çã°¡µÇ°í Àִ Ű °ªÀÇ »çÀÌ¿¡ °ãÄ¡Áö ¾Êµµ·Ï º¸ÁõÇØ Áֽʽÿä. ÀÚÁÖ ÀÖ´Â ½Ç¼ö´Â ¹üÀ§ Á¦ÇÑÀ» ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇØ ¹ö¸³´Ï´Ù.
CHECK ( outletID BETWEEN 100 AND 200 ) CHECK ( outletID BETWEEN 200 AND 300 )
Ű °ª 200ÀÌ ¾î´À ÂÊÀÇ ÆÄƼ¼Ç¿¡ ¼ÓÇÏ´ÂÁö ¸íÈ®ÇÏÁö ¾Ê±â ¶§¹®¿¡, À̰ÍÀº ½Ç¼ö°¡ µË´Ï´Ù.
¹üÀ§¿Í ¸®½ºÆ® ºÐÇÒ µ¿¾È¿¡ ±¸¹®ÀÇ Â÷À̰¡ ¾ø´Â °ÍÀ» ÁÖÀÇÇϽʽÿä. ÀÌ·¯ÇÑ Á¶°ÇÀº ±â¼ú»óÀÏ »ÓÀÔ´Ï´Ù.
°¢°¢ÀÇ ÆÄƼ¼Ç¿¡ ´ëÇØ, ´Ù¸¥ À妽º¿Í °°ÀÌ Å°°¡ µÇ´Â ¿(¿ÀÇ ÁýÇÕ)¿¡ À妽º¸¦ ÀÛ¼ºÇØ Áֽʽÿä. (Ű À妽º´Â ¹Ýµå½Ã ÇÊ¿äÇÏÁø ¾ÊÁö¸¸, ´ëºÎºÐÀÇ °æ¿ì¿¡ µµ¿òÀÌ µË´Ï´Ù. ¸¸¾à Ű °ªÀÌ À¯ÀÏÇÏ°Ô ÇÏ·Á¸é Ç×»ó À¯ÀÏÇÑ È¤Àº ÁÖŰ Á¦ÇÑÀ» °¢°¢ÀÇ ÆÄƼ¼Ç¿¡ ÀÛ¼ºÇØ Áֽʽÿä. )
¼±ÅÃÀûÀ¸·Î, ÀûÀýÇÑ ÆÄƼ¼Ç¿¡ ¸¶½ºÅÍ Å×À̺íÀÇ º¯°æÀÇ ¹æÇâÀ» ´Ù½Ã ¼³Á¤Çϱâ À§ÇØ ·êÀ̳ª Æ®¸®°Å¸¦ Á¤ÀÇÇØ Áֽʽÿä.
constraint_exclusion¼³Á¤ ÆÄ¶ó¹ÌÅͰ¡postgresql.conf³»¿¡¼ À¯È¿ÇÑ Áö È®ÀÎÇØ Áֽʽÿä. ¿©±â¿¡ ¾ø´Ù°í Äõ¸®´Â ÃÖÀûȵÇÁö ¾Ê½À´Ï´Ù.
¿¹¸¦ µé¾î, ´ë±Ô¸ð ¾ÆÀ̽ºÅ©¸² ȸ»çÀÇ µ¥ÀÌÅͺ£À̽º¸¦ ±¸ÃàÇÑ´Ù°í °¡Á¤ÇØ Áֽʽÿä. ȸ»ç´Â °¢ Áö¹æÀÇ ¾ÆÀ̽ºÅ©¸²ÀÇ ¸Å»ó°ú ¸¶Âù°¡Áö·Î ¸ÅÀÏ ÃÖ°í±â¿ÂÀ» ÃøÁ¤Çϰí ÀÖ½À´Ï´Ù. °³³äÀûÀ¸·Î, ´ÙÀ½°ú °°Àº Å×À̺íÀÌ ÇÊ¿äÇÏ°Ô µË´Ï´Ù.
CREATE TABLE measurement (
city_id int not null,
logdate date not null,
peaktemp int,
unitsales int
);
´ëºÎºÐÀÇ Äõ¸®°¡ Áö³ ÁÖ, Áö³´Þ ȤÀº ¹Ý³âÀüÀÇ µ¥ÀÌÅ͸¦ Äõ¸®ÇÏ´Â °ÍÀ» ¾Ë°í ÀÖ½À´Ï´Ù. ±× ÀÌÀ¯´Â ÀÌ Å×À̺íÀÌ °æ¿µ¿¡ ´ëÇØ¼ ¿Â¶óÀÎÀÇ ¸®Æ÷Æ®¸¦ ÀÛ¼ºÇÏ´Â °ÍÀ¸·Î ÁÖ·Î »ç¿ëµÇ±â ¶§¹®ÀÔ´Ï´Ù. ÇÊ¿äÇÑ °ú°ÅÀÇ µ¥ÀÌÅ;çÀ» ÁÙÀ̱â À§Çؼ, °ú°Å 3°³¿ùÀÇ µ¥ÀÌÅ͸¸À» º¸Á¸Çϱâ·Î ÇϰڽÀ´Ï´Ù. ¸Å´ÞÀÇ ½ÃÀÛÇÏ°í °ú°ÅÀÇ µ¥ÀÌÅ͸¦ »èÁ¦ÇÕ´Ï´Ù.
ÀÌ·¯ÇÑ °æ¿ì, measurements Å×ÀÌºí¿¡ ´ëÇÑ ´Ù¸¥ ¿ä±¸¸¦ ¸ðµÎ ä¿ìµµ·Ï ÆÄƼ¼Å´×À» ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. À§¿Í °°Àº ¹æ¹ýÀ¸·Î, ÆÄƼ¼Å´×À» ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÕ´Ï´Ù.
¸¶½ºÅÍ Å×À̺íÀº À§¿¡¼ ¼±¾ðµÈmeasurementÅ×À̺íÀÔ´Ï´Ù.
´ÙÀ½¿¡ °¢°¢ÀÇ ´Þ¿¡ ´ëÇØ¼ 1°³ÀÇ ÆÄƼ¼ÇÀ» ÀÛ¼ºÇÕ´Ï´Ù.
CREATE TABLE measurement_y2004m02 ( ) INHERITS (measurement); CREATE TABLE measurement_y2004m03 ( ) INHERITS (measurement); ... CREATE TABLE measurement_y2005m11 ( ) INHERITS (measurement); CREATE TABLE measurement_y2005m12 ( ) INHERITS (measurement); CREATE TABLE measurement_y2006m01 ( ) INHERITS (measurement);
°¢°¢ÀÇ ÆÄƼ¼ÇÀº ¿Ï°áµÈ Å×À̺íÀÌÁö¸¸ measurementÅ×À̺íÀÇ Á¤ÀǸ¦ »ó¼ÓÇϰí ÀÖ½À´Ï´Ù.
À̰ÍÀº µ¥ÀÌÅÍÀÇ »èÁ¦¶ó°í ÇÏ´Â ¹®Á¦¸¦ ÇØ°áÇÕ´Ï´Ù. ¸Å¿ù, °¡Àå ¿À·¡µÈ ÀÚ½Ä Å×À̺íÀ»DROP TABLEÇϰí, ½Å±Ô ´Þ¿¡ ´ëÇØ¼´Â ÀÚ½Ä Å×À̺íÀ» ÀÛ¼ºÇÕ´Ï´Ù.
°ãÄ¡Áö ¾Ê´Â °Í °°Àº Å×À̺í Á¦ÇÑÀ» Ãß°¡ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ÀÌÇÏ¿Í °°Àº Å×À̺í ÀÛ¼º ½ºÅ©¸³Æ®°¡ µÉ °ÍÀÔ´Ï´Ù.
CREATE TABLE measurement_y2004m02 (
CHECK ( logdate >= DATE '2004-02-01' AND logdate < DATE '2004-03-01' )
) INHERITS (measurement);
CREATE TABLE measurement_y2004m03 (
CHECK ( logdate >= DATE '2004-03-01' AND logdate < DATE '2004-04-01' )
) INHERITS (measurement);
...
CREATE TABLE measurement_y2005m11 (
CHECK ( logdate >= DATE '2005-11-01' AND logdate < DATE '2005-12-01' )
) INHERITS (measurement);
CREATE TABLE measurement_y2005m12 (
CHECK ( logdate >= DATE '2005-12-01' AND logdate < DATE '2006-01-01' )
) INHERITS (measurement);
CREATE TABLE measurement_y2006m01 (
CHECK ( logdate >= DATE '2006-01-01' AND logdate < DATE '2006-02-01' )
) INHERITS (measurement);
۰¡ µÇ´Â ¿¿¡ À妽º°¡ ÇÊ¿äÇÒ °ÍÀÔ´Ï´Ù.
CREATE INDEX measurement_y2004m02_logdate ON measurement_y2004m02 (logdate); CREATE INDEX measurement_y2004m03_logdate ON measurement_y2004m03 (logdate); ... CREATE INDEX measurement_y2005m11_logdate ON measurement_y2005m11 (logdate); CREATE INDEX measurement_y2005m12_logdate ON measurement_y2005m12 (logdate); CREATE INDEX measurement_y2006m01_logdate ON measurement_y2006m01 (logdate);
À̹ø¿¡´Â ´õ ÀÌ»óÀÇ À妽º¸¦ Ãß°¡ÇÏÁö ¾Êµµ·Ï ÇÕ´Ï´Ù.
¸¸¾à µ¥ÀÌÅͰ¡ ÃÖ±ÙÀÇ ÆÄƼ¼Ç¿¡¸¸ Ãß°¡ µÇ¾îÁø´Ù¸é, µ¥ÀÌÅ͸¦ »ðÀÔÇÏ´Â ¸Å¿ì °£´ÜÇÑ ·êÀ» ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¸Å´ÞÀ» ÀçÁ¤ÀÇÇØ¼ À̰ÍÀÌ Ç×»ó ÃÖ±Ù ÆÄƼ¼ÇÀ» °¡¸®Å°µµ·Ï ÇØ¾ßÇÕ´Ï´Ù.
CREATE OR REPLACE RULE measurement_current_partition AS
ON INSERT TO measurement
DO INSTEAD
INSERT INTO measurement_y2006m01 VALUES ( NEW.city_id,
NEW.logdate,
NEW.peaktemp,
NEW.unitsales );
µ¥ÀÌÅ͸¦ »ðÀÔÇÏ±æ ¿øÇϰí ÀÚµ¿ÀûÀ¸·Î ÆÄƼ¼ÇÀ¸·Î ÇÒ´çµÇ´Â ¼¹ö¸¦ °¡Áý´Ï´Ù. ÀÌ ÇàÀº Ãß°¡µÇ¾îÁ®¾ß¸¸ ÇÕ´Ï´Ù. ¾Æ·¡¿¡ º¸¿©Áö´Â ´õ º¹ÀâÇÑ ·êÀÇ ÁýÇÕÀ» °¡Áö°í À̸¦ ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.
CREATE RULE measurement_insert_y2004m02 AS
ON INSERT TO measurement WHERE
( logdate >= DATE '2004-02-01' AND logdate < DATE '2004-03-01' )
DO INSTEAD
INSERT INTO measurement_y2004m02 VALUES ( NEW.city_id,
NEW.logdate,
NEW.peaktemp,
NEW.unitsales );
...
CREATE RULE measurement_insert_y2005m12 AS
ON INSERT TO measurement WHERE
( logdate >= DATE '2005-12-01' AND logdate < DATE '2006-01-01' )
DO INSTEAD
INSERT INTO measurement_y2005m12 VALUES ( NEW.city_id,
NEW.logdate,
NEW.peaktemp,
NEW.unitsales );
CREATE RULE measurement_insert_y2006m01 AS
ON INSERT TO measurement WHERE
( logdate >= DATE '2006-01-01' AND logdate < DATE '2006-02-01' )
DO INSTEAD
INSERT INTO measurement_y2006m01 VALUES ( NEW.city_id,
NEW.logdate,
NEW.peaktemp,
NEW.unitsales );
ÆÄƼ¼ÇÀ» À§ÇØ °¢ ·ê°ú Á¤È®ÇÏ°Ô ÀÏÄ¡ÇÏ´ÂCHECKÁ¦ÇÑÀº WHERE±¸¹®À̶ó´Â °ÍÀ» ÁÖÀÇÇϽʽÿä.
ÀÌ»ó°ú °°ÀÌ, º¹ÀâÇÑ ÆÄƼ¼ÇÈÀÇ °èȹÀº ¸¹Àº DDL°¡ ÇÊ¿äÇÕ´Ï´Ù. À§ÀÇ ¿¹¿¡¼´Â ¸Å¿ù »õ·Î¿î ÆÄƼ¼ÇÀ» ÀÛ¼ºÇÏ°Ô µË´Ï´Ù¸¸, ÇÊ¿äÇÑ DDL¸¦ ÀÚµ¿À¸·Î »ý¼ºÇÏ´Â ½ºÅ©¸³Æ®¸¦ ¾²´Â °ÍÀÌ Çö¸íÇÕ´Ï´Ù.
ºÐÇÒÀº Å×ÀÌºí »ó¼ÓÀÌ ¾Æ´Ñ,UNION ALLºä¸¦ »ç¿ëÇØ Á¶Á¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
CREATE VIEW measurement AS
SELECT * FROM measurement_y2004m02
UNION ALL SELECT * FROM measurement_y2004m03
...
UNION ALL SELECT * FROM measurement_y2005m11
UNION ALL SELECT * FROM measurement_y2005m12
UNION ALL SELECT * FROM measurement_y2006m01;
±×·¯³ª, ºäÀÇ ÀçÀÛ¼ºÀÌ ÇÊ¿äÇϹǷÎ, µ¥ÀÌÅÍ ÁýÇÕÀÇ °³°³ÀÇ ÆÄƼ¼ÇÀÇ Ãß°¡ ¹× »èÁ¦¿¡ ºÒÇÊ¿äÇÑ Ã³¸®°¡ ´õÇØÁý´Ï´Ù.
º¸Åë, ÃʱâÀÇ Å×À̺í Á¤ÀÇ·Î Á¤Àû »óŸ¦ ÀǵµÇÏÁö ¾Ê´Â °æ¿ì¿¡, ÆÄƼ¼Ç ÁýÇÕÀº È®¸³µË´Ï´Ù. ³°Àº µ¥ÀÌÅÍ ÆÄƼ¼ÇÀÇ »èÁ¦³ª ½Å±Ô µ¥ÀÌÅÍÀü¿ëÀÇ Á¤±âÀûÀÎ ½Å±Ô ÆÄƼ¼ÇÀÇ Ãß°¡ ¿ä±¸´Â ÀÚÁÖ ÀÖ½À´Ï´Ù. ÆÄƼ¼Å´×ÀÇ °¡Àå Áß¿äÇÑ ÀÌÁ¡Àº Á¤È®¼ºÀÔ´Ï´Ù. ÀÌ ¶§¹®¿¡, ´Ù¸¥ ÇÑÆíÀ¸·Î °ÅÀÇ µ¿½Ã¿¡ À§ÇèÇÑ ÀÛ¾÷À» ½ÇÇàÀ», ´ë·®ÀÇ µ¥ÀÌÅ͸¦ À̵¿½ÃŰÁö ¾Ê°í , ÆÄƼ¼Ç ±¸Á¶ Á¶ÀÛÀ¸·Î °ÅÀÇ ¼ø°£ÀûÀ¸·Î ½Ç½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù.
³°Àº µ¥ÀÌÅ͸¦ »èÁ¦ÇÏ´Â °¡Àå °£´ÜÇÑ ¹æ¹ýÀº ´ÜÁö ºÒÇÊ¿äÇØÁø ÆÄƼ¼ÇÀ» »èÁ¦ÇÏ´Â °ÍÀÔ´Ï´Ù.
DROP TABLE measurement_y2003m02;
·¹ÄÚµå ¸¶´Ù »èÁ¦ÇÒ Çʿ䰡 ¾ø±â ¶§¹®¿¡, À̰ÍÀº °í¼ÓÀ¸·Î 100¸¸ ·¹Äڵ带 »èÁ¦ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ ¿Ü, ÀÚÁÖ »ç¿ëµÇ´Â ¹æ¹ýÀº Å×À̺í ÀÚü¿¡ÀÇ ¾×¼¼½º±ÇÇÑÀ» ±×´ë·Î ³²±ä ä, ÆÄƼ¼ÇµÈ Å×ÀÌºí¿¡¼ ÆÄƼ¼ÇÀ» »èÁ¦ÇÏ´Â °ÍÀÔ´Ï´Ù.
ALTER TABLE measurement_y2003m02 NO INHERIT measurement;
À̰Ϳ¡ ÀÇÇØ, »èÁ¦ Àü¿¡ µ¥ÀÌÅÍ Á¶ÀÛÀ» ÇÑÃþ ´õ ½Ç½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î,COPY,pg_dumpµîÀÇ ÅøÀ» »ç¿ëÇØ µ¥ÀÌÅ͸¦ ¹é¾÷ ÇÏ´Â °ÍÀº ÀÚÁÖ ÀÖ½À´Ï´Ù. ¶Ç, µ¥ÀÌÅ͸¦ º¸´Ù ÀÛÀº ¼½Ä¿¡ Áý¾àÇϰųª ´Ù¸¥ µ¥ÀÌÅÍ Á¶ÀÛÀ» ½Ç½ÃÇϰųª º¸°í¸¦ ÀÛ¼ºÇϰųª ÇÏ´Â Àϵµ ÀÚÁÖ ÀÖ½À´Ï´Ù.
°°ÀÌ »õ·Î¿î µ¥ÀÌÅ͸¦ Ãë±ÞÇϱâ À§Çؼ »õ·Î¿î ÆÄƼ¼ÇÀ» Ãß°¡ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. À§¿¡¼ ¿ø·¡ÀÇ ÆÄƼ¼ÇÀ» ÀÛ¼ºÇßÀ» ¶§¿Í °°ÀÌ, ÆÄƼ¼ÇµÈ Å×ÀÌºí¿¡ ºñ¾îÀÖ´Â ÆÄƼ¼ÇÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
CREATE TABLE measurement_y2006m02 (
CHECK ( logdate >= DATE '2006-02-01' AND logdate < DATE '2006-03-01' )
) INHERITS (measurement);
´Ù¸¥ ¹æ¹ýÀ¸·Î ÆÄƼ¼Ç ±¸Á¶ÀÇ ¿ÜºÎ¿¡¼ »õ·Î¿î Å×À̺íÀ» ÀÛ¼ºÇϰí, ´ÙÀ½¿¡ ÀûÀýÈ÷ ÆÄƼ¼ÇÇÏ´Â °ÍÀÌ Æí¸®ÇÑ °æ¿ìµµ ÀÖ½À´Ï´Ù. À̰Ϳ¡ ÀÇÇØ, ÆÄƼ¼ÇµÈ Å×ÀÌºí¿¡ Ãß°¡Çϱâ Àü¿¡, µ¥ÀÌÅ͸¦ ·ÎµåÇϰí, °Ë»ç, º¯È¯ÇÒ ¼ö ÀÖ½À´Ï´Ù.
CREATE TABLE measurement_y2006m02 (LIKE measurement INCLUDING DEFAULTS INCLUDING CONSTRAINTS); ALTER TABLE measurement_y2006m02 ADD CONSTRAINT y2006m02 CHECK ( logdate >= DATE '2006-02-01' AND logdate < DATE '2006-03-01' ); \copy measurement_y2006m02 from 'measurement_y2006m02' -- possibly some other data preparation work ALTER TABLE measurement_y2006m02 INHERIT measurement;
Á¦ÇÑ¿¡ ÀÇÇÑ Á¦¿Ü´Â À§ÀÇ ¹æ¹ýÀ¸·Î Á¤ÀÇµÈ ÆÄƼ¼Å´×µÈ Å×ÀÌºí¿¡ ´ëÇÑ ÆÛÆ÷¸Õ½º¸¦ Çâ»ó½ÃŰ´Â Äõ¸®ÀÇ ÃÖÀûÈ ±â¼úÀÔ´Ï´Ù. ¿¹¸¦ µé¸é,
SET constraint_exclusion = on; SELECT count(*) FROM measurement WHERE logdate >= DATE '2006-01-01';
Á¦ÇÑ¿¡ ÀÇÇÑ Á¦¿Ü°¡ ¾ø´Â °æ¿ì, À§ÀÇ Äõ¸®´Â measurementÅ×À̺íÀÇ ÆÄƼ¼ÇÀ» ½ºÄµ ÇÒ °ÍÀÔ´Ï´Ù. Á¦ÇÑ¿¡ ÀÇÇÑ Á¦¿Ü°¡ À¯È¿ÇÒ °æ¿ì, planner´Â °¢°¢ÀÇ ÆÄƼ¼Ç Á¦ÇÑÀ» Á¶»çÇϰí, ÆÄƼ¼ÇÀÌ Äõ¸®WHERE¿¡ ÀÏÄ¡ÇÏ´Â ÇàÀ» Æ÷ÇÔÇÏÁö ¾Êµµ·Ï Çϱâ À§ÇØ, ½ºÄµ µÉ Çʿ䰡 ¾øÀ¸¸é ºÐ¼®ÇÏ·Á°í ÇÕ´Ï´Ù.
constraint_exclusion¸¦ À¯È¿ÇÑ °èȹ°ú ±×·¸Áö ¾ÊÀº °èȹÀÇ Â÷À̸¦ º¸±â À§Çؼ,EXPLAINÄ¿¸Çµå¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÇüÅÂÀÇ Å×ÀÌºí ¼³Á¤¿¡ ´ëÇÑ ÀüÇüÀûÀÎ µðÆúÆ®ÀÇ °èȹÀº ÀÌÇÏ¿Í °°ÀÌ µË´Ï´Ù.
SET constraint_exclusion = off;
EXPLAIN SELECT count(*) FROM measurement WHERE logdate >= DATE '2006-01-01';
QUERY PLAN
-----------------------------------------------------------------------------------------------
Aggregate (cost=158.66..158.68 rows=1 width=0)
-> Append (cost=0.00..151.88 rows=2715 width=0)
-> Seq Scan on measurement (cost=0.00..30.38 rows=543 width=0)
Filter: (logdate >= '2006-01-01'::date)
-> Seq Scan on measurement_y2004m02 measurement (cost=0.00..30.38 rows=543 width=0)
Filter: (logdate >= '2006-01-01'::date)
-> Seq Scan on measurement_y2004m03 measurement (cost=0.00..30.38 rows=543 width=0)
Filter: (logdate >= '2006-01-01'::date)
...
-> Seq Scan on measurement_y2005m12 measurement (cost=0.00..30.38 rows=543 width=0)
Filter: (logdate >= '2006-01-01'::date)
-> Seq Scan on measurement_y2006m01 measurement (cost=0.00..30.38 rows=543 width=0)
Filter: (logdate >= '2006-01-01'::date)
ÀϺÎÀÇ ÆÄƼ¼Ç, ȤÀº ¸ðµç ÆÄƼ¼ÇÀ¸·Î, Å×À̺í Àüü¿¡ ´ëÇÑ ½ÃÄö¼È ½ºÄµÀº ¾Æ´Ñ, À妽º ½ºÄµÀÌ »ç¿ëµÉ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. ±×·¯³ª ¿©±â¼ÀÇ Æ÷ÀÎÆ®´Â ÀÌ Äõ¸®¿¡ ´ëÇÑ ´ë´äÀ» À§Çؼ ¿À·¡µÈ ÆÄƼ¼ÇÀ» ½ºÄµ ÇÒ Çʿ䰡 ÀüÇô ¾ø´Ù´Â °ÍÀÔ´Ï´Ù. Á¦ÇÑ¿¡ ÀÇÇÑ Á¦¿Ü¸¦ °¡´ÉÇϵµ·Ï ÇßÀ» ¶§, Å«ÆøÀ¸·Î ÀÛ¾ÆÁø °°Àº ´ë´äÀ» µ¹·ÁÁÙ °èȹÀ» ¾òÀ» ¼ö ÀÖ½À´Ï´Ù.
SET constraint_exclusion = on;
EXPLAIN SELECT count(*) FROM measurement WHERE logdate >= DATE '2006-01-01';
QUERY PLAN
-----------------------------------------------------------------------------------------------
Aggregate (cost=63.47..63.48 rows=1 width=0)
-> Append (cost=0.00..60.75 rows=1086 width=0)
-> Seq Scan on measurement (cost=0.00..30.38 rows=543 width=0)
Filter: (logdate >= '2006-01-01'::date)
-> Seq Scan on measurement_y2006m01 measurement (cost=0.00..30.38 rows=543 width=0)
Filter: (logdate >= '2006-01-01'::date)
Á¦ÇÑ¿¡ ÀÇÇÑ Á¦¿Ü´Â CHECKÁ¦ÇѸ¸À¸·Î µ¿ÀÛÇϰí, À妽ºÀÇ À¯¹«¿¡¼´Â µ¿ÀÛÇÏÁö ¾Ê´Â °ÍÀ» ÁÖÀÇÇϽʽÿä. µû¶ó¼ Ű¿ÀÇ À妽º¸¦ Á¤ÀÇÇÏ´Â °ÍÀº ÇÊ¿äÇÏÁö ¾Ê½À´Ï´Ù. ¾î´À ÆÄƼ¼ÇÀ¸·Î À妽º°¡ ÇÊ¿äÇѰ¡´Â ÆÄƼ¼ÇÀ» ½ºÄµ ÇÏ´Â Äõ¸®°¡ ÆÄƼ¼ÇÀÇ ´ëºÎºÐÀ̳ª ÀÛÀº ºÎºÐÀ» ½ºÄµÇÏ´ÂÁö¿¡ µû¶ó °áÁ¤µË´Ï´Ù. ÀüÀÚ´Â ¾Æ´Ï°í ÈÄÀÚ¿¡ ÀÖ¾î, À妽º´Â µµ¿òÀÌ µË´Ï´Ù.
ÀÌÇÏÀÇ °æ°í°¡ ÆÄƼ¼ÇµÈ Å×ÀÌºí¿¡ ´ëÇØ¼ Àû¿ëµË´Ï´Ù.
ÃÖ±Ù¿¡ CHECKÀÇ ¸ðµç Á¦ÇÑÀÌ ¼·Î ¹èŸÀûÀÌ¾î¼ °ËÁõÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ¾ø½À´Ï´Ù. µ¥ÀÌÅͺ£À̽º µðÀÚÀ̳ʿ¡ ÀÇÇØ ÁÖÀǰ¡ ¿ä±¸µÇ¾ú½À´Ï´Ù.
ÇàÀº ¸¶½ºÅÍ Å×ÀÌºí¿¡ »ðÀԵǼ´Â ¾ÈµÈ´Ù´Â °ÍÀ» ÁöÁ¤ÇÏ´Â °£´ÜÇÑ ¹æ¹ýÀº ¾ø½À´Ï´Ù. ¸¶½ºÅÍ Å×À̺íÀÇ CHECK (false) Á¦ÇÑÀº ¸ðµç ÀÚ½Ä Å×ÀÌºí¿¡ ÀÇÇØ »ó¼ÓµÇ¾îÁý´Ï´Ù. ÀÌ´Â ÀÌ·¯ÇÑ ¸ñÀûÀ» À§ÇØ »ç¿ëµÇÁö ¸øÇϵµ·Ï Çϱâ À§Çؼ ÀÔ´Ï´Ù. ÇϳªÀÇ °¡´É¼ºÀº ON INSERT Æ®¸®°Å¸¦ Ç×»ó ¿¡·¯°¡ ³ª´Â ¸¶½ºÅÍ Å×ÀÌºí¿¡ ¼³Á¤ÇÏ´Â °ÍÀÔ´Ï´Ù. (´Ù¸¥ ¹æ¹ýÀ¸·Î, Æ®¸®°Å´Â ÀûÀýÇÑ ÀÚ½Ä Å×À̺í·Î µ¥ÀÌÅͰ¡ »õ·Î¿î ¹æÇâÀ» Àâ±â À§ÇØ »ç¿ëµË´Ï´Ù. À§¿¡ Á¦¾ÈÇÑ ·êÀÇ ÁýÇÕÀ» »ç¿ëÇÏ´Â °ÍÀ» ´ë½ÅÇØ¼ ¸»ÀÔ´Ï´Ù.
ÀÌÇÏÀÇ °æ°í°¡ Á¦ÇÑ¿¡ ÀÇÇÑ Á¦¿Ü¿¡ Àû¿ëµË´Ï´Ù.
Á¦ÇÑÀÇ Á¦¿Ü´Â Äõ¸®ÀÇWHERE±¸¹®ÀÌ Á¤¼ö¸¦ Æ÷ÇÔÇϰí ÀÖ¾úÀ» ¶§¿¡¸¸ µ¿ÀÛÇÕ´Ï´Ù. ÆÄ¶ó¹ÌÅÍÈµÈ Äõ¸®´Â ÃÖÀûȵÇÁö ¾Ê½À´Ï´Ù.
±× ÀÌÀ¯·Î planner´Â ½ÇÇà½Ã¿¡, ÆÄ¶ó¹ÌÅÍÄ¡°¡ ¾î´À ÆÄƼ¼ÇÀ» ¼±ÅÃÇұ ¾Ë ¼ö ¾ø½À´Ï´Ù.
°°Àº ÀÌÀ¯·Î½á,CURRENT_DATE¿Í °°Àº"¾ÈÁ¤µÈ"ÇÔ¼ö´Â ÇÇÇØ¾ß ÇÕ´Ï´Ù.
CHECKÁ¦ÇÑ¿¡¼ cross-µ¥ÀÌÅÍÇü ºñ±³¸¦ ÇÇÇϱâ À§Çؼ, planner´Â »óÅ false¸¦ Áõ¸íÇØ¼ ½ÇÆÐÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, x°¡ integer¿ÀÌ¸é ´ÙÀ½ÀÇ Á¦ÇÑÀº ÀÛµ¿ÇÕ´Ï´Ù. ±×·¯³ª x °¡ bigintÀÏ °æ¿ì´Â ¾Æ´Õ´Ï´Ù.
CHECK ( x = 1 )
For a bigint column we must use a constraint like:
CHECK ( x = 1::bigint )
¹®Á¦´Â bigint µ¥ÀÌÅÍÇüÀÌ Á¦ÇѵÇÁö ¾ÊÀº °ÍÀÔ´Ï´Ù. Á¤¼öÀÇ µðÆúÆ® µ¥ÀÌÅÍÇüÀÌ ¿ÀÇ µ¥ÀÌÅÍÇü°ú ÀÏÄ¡ÇÏÁö ¾ÊÀ¸¸é, ÀÌ µÑÀÌ ºñ±³µÇ¾î Áú ¼ö ÀÖ½À´Ï´Ù. cross-µ¥ÀÌÅÍÇüÀº Á¦°øµÇ´Â Äõ¸®¿Í ºñ±³ÇÒ ¶§´Â º¸Åë ±¦ÂúÁö¸¸, CHECK Á¶°Ç¿¡¼´Â ±×·¸Áö ¾Ê½À´Ï´Ù.
¸¶½ºÅÍ Å×À̺íÀÇ ¸ðµç ÆÄƼ¼ÇÀÇ ¸ðµç Á¦ÇÑÀº Á¦ÇÑ¿¡ ÀÇÇÑ Á¦¿Ü·Î °ËÁõµË´Ï´Ù. µû¶ó¼ ÆÄƼ¼ÇÀÇ ¼ö°¡ ¸¹¾ÆÁö¸é ½ÇÇà °èȹÀÇ ½Ã°£ÀÌ Áõ°¡ÇÕ´Ï´Ù.
°³º°ÀûÀÎ ÆÄƼ¼Ç¿¡ ´ëÇØ¼ ¾ÆÁ÷µµ ANALYZE¸¦ ½ÇÇàÇÒ Çʿ䰡 ÀÖ´Ù´Â °ÍÀ» ÀØÁö ¸¶½Ê½Ã¿ä. Ä¿¸Çµå´Â ¾Æ·¡¿Í °°½À´Ï´Ù.
ANALYZE measurement;
À§¿Í °°Àº Ä¿¸Çµå¿¡¼´Â ¸¶½ºÅÍ Å×ÀÌºí ¹Û¿¡ 󸮵ÇÁö ¾Ê½À´Ï´Ù.