5.9. ÆÄƼ¼Å´×

PostgreSQL´Â ±âº»ÀûÀÎ Å×À̺íÀÇ ÆÄƼ¼Å´×(ºÐÇÒ)À» ¼­Æ÷Æ®Çϰí ÀÖ½À´Ï´Ù. ÀÌ ¸¶µð¿¡¼­´Â µ¥ÀÌÅͺ£À̽º ¼³°è¿¡ ´ëÇØ¼­, ¿Ö ±×¸®°í ¾î¶»°Ô ÆÄƼ¼Å´×À» ½ÇÇàÇÏ´ÂÁö¸¦ ÇØ¼³ÇÕ´Ï´Ù.

5.9.1. °³¿ä

ÆÄƼ¼Å´×Àº ³í¸®ÀûÀ¸·Î 1°³ÀÇ Å« Å×À̺íÀ», ¹°¸®ÀûÀ¸·Î ÀÛÀº ÆÄƼ¼ÇÀ¸·Î ³ª´©´Â °ÍÀ» °¡¸®Åµ´Ï´Ù. ÆÄƼ¼Å´×Àº ¸î °¡Áö ÀÌÁ¡ÀÌ ÀÖ½À´Ï´Ù.

ÀÌ·¯ÇÑ ÀåÁ¡Àº Å×À̺íÀÇ Å©±â°¡ ¸Å¿ì Ä¿Áö´Â °æ¿ì¿¡ ¹ß°ßµË´Ï´Ù. Å×À̺íÀÇ ÆÄƼ¼Å´×¿¡ ÀÇÇÑ ÀåÁ¡Àº ¾îÇø®ÄÉÀ̼ǿ¡ ÀÇÁ¸ÇÏÁö¸¸, °æÇèÀûÀ¸·Î Å×À̺íÀÇ Å©±â°¡ µ¥ÀÌÅͺ£À̽º ¼­¹öÀÇ ¹°¸®Àû ¸Þ¸ð¸®¸¦ ÃʰúÇÏ´Â Áö°¡ Æ÷ÀÎÆ®°¡ µË´Ï´Ù.

ÇöÀç »óÅ·μ­´Â PostgreSQL´Â ÆÄƼ¼Å´×À» Å×À̺íÀÇ »ó¼Ó¿¡ ÀÇÇØ ¼­Æ÷Æ®Çϰí ÀÖ½À´Ï´Ù. °¢°¢ÀÇ ÆÄƼ¼ÇÀº 1°³ÀÇ ºÎ¸ð Å×À̺íÀÇ ÀÚ½Ä Å×À̺í·Î¼­ ÀÛ¼ºµÇÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. ºÎ¸ð Å×À̺í ÀÚ½ÅÀº º¸Åë, ºñ¾î ÀÖ´Â Å×À̺íÀÌ µÇ¸ç, ÀüüÀÇ µ¥ÀÌÅ͸¦ ´ëÇ¥Çϱâ À§Çؼ­ Á¸ÀçÇÕ´Ï´Ù. ÆÄƼ¼Å´×À» ¼³Á¤Çϱâ Àü¿¡, »ó¼Ó(Section 5.8¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä)¿¡ ´ëÇØ ÀÚ¼¼ÇÏ°Ô ¾Ë¾Æ µÑ Çʿ䰡 ÀÖ½À´Ï´Ù.

ÆÄƼ¼Å´×¿¡ ´ëÇØ ´ÙÀ½ÀÇ Á¾·ù°¡PostgreSQL¿¡ ½ÇÇàµÇ°í ÀÖ½À´Ï´Ù.

¹üÀ§ ºÐÇÒ

Å×À̺íÀº ۰¡ µÇ´Â ¿­ ȤÀº ¿­¼¼Æ®¿¡ ÀÇÇØ Á¤ÀǵǴ "¹üÀ§"¿¡ ÆÄƼ¼Å´× µË´Ï´Ù. ´Ù¸¥ ÆÄƼ¼Ç¿¡ ÁöÁ¤ÇÒ ¼ö ÀÖ¾ú´ø °ªÀÇ ¹üÀ§´Â °ãÄ¥ °ÍÀº ¾ø½À´Ï´Ù. ¿¹¸¦ µé¸é, ³¯Â¥ÀÇ ¹üÀ§¿¡ ÀÇÇØ ÆÄƼ¼Å´× µÇ°Å³ª ƯÁ¤ÇÑ ºñÁö´Ï½º ¿ÀºêÁ§Æ®ÀÇ ½Äº°ÀÚÀÇ ¹üÀ§¿¡ ÀÇÇØ ÆÄƼ¼Å´× µÇ°Å³ª ÇÕ´Ï´Ù.

¸®½ºÆ® ºÐÇÒ

Ű °ªÀÌ °¢ ÆÄƼ¼Ç¿¡ ³ªÅ¸³ª´Â ¸í½ÃÀûÀÎ ¸®½ºÆ®¿¡ ÀÇÇØ¼­, Å×À̺íÀÌ ÆÄƼ¼Å´× µË´Ï´Ù.

5.9.2. ÆÄƼ¼Å´×ÀÇ ½ÇÇà

Å×À̺íÀÇ ÆÄƼ¼Å´×À» ½ÇÇàÇÏ·Á¸é , ÀÌÇϸ¦ ½Ç½ÃÇØ Áֽʽÿä.

  1. ¸ðµç ÆÄƼ¼ÇÀÌ »ó¼ÓÇÏ°Ô µÇ´Â "¸¶½ºÅÍ"Å×À̺íÀ» ÀÛ¼ºÇØ Áֽʽÿä.

    ÀÌ Å×À̺íÀº µ¥ÀÌÅ͸¦ ÀúÀåÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ Å×À̺íÀº ¸ðµç ÆÄƼ¼Ç¿¡ ´ëÇØ Àû¿ëÇÒ »ý°¢ÀÌ ¾Æ´Ò °æ¿ì üũ Á¦ÇÑÀº Á¤ÀÇÇÏÁö ¸»¾Æ Áֽʽÿä. À妽º³ª À¯ÀÏÇÑ Á¦ÇÑÀ» Á¤ÀÇÇÏ´Â Àϵµ Àǹ̰¡ ¾ø½À´Ï´Ù.

  2. ¸¶½ºÅÍ Å×ÀÌºí¿¡¼­ »ó¼ÓµÈ, ¸î °³ÀÇ"ÀÚ½Ä"Å×À̺íÀ» ÀÛ¼ºÇÕ´Ï´Ù. º¸Åë, ÀÌ·¯ÇÑ ÀÚ½Ä Å×À̺íÀº ¸¶½ºÅͷκÎÅÍ »ó¼ÓµÈ ¿­ À̿ܿ¡´Â ¿­À» Ãß°¡ÇÏÁö ¾Ê°Ô ÇÕ´Ï´Ù.

    ÀÚ½Ä Å×À̺íÀº ¸ðµç Á¡¿¡¼­ PostgreSQLÀÇ º¸Åë Å×À̺íÀÌÁö¸¸, ÀÚ½Ä Å×À̺íÀº ÆÄƼ¼ÇÀ¸·Î¼­ ÂüÁ¶ÇÏ°Ô µË´Ï´Ù.

  3. °¢°¢ÀÇ ÆÄƼ¼Ç¿¡¼­ÀÇ Å° °ª¸¦ Á¤ÀÇÇϱâ À§Çؼ­, ÆÄƼ¼Å´×µÈ Å×ÀÌºí¿¡ Å×À̺í Á¦ÇÑÀ» Ãß°¡ÇØ Áֽʽÿä.

    ÀüÇüÀûÀÎ ¿¹´Â

    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ÀÌ ¾î´À ÂÊÀÇ ÆÄƼ¼Ç¿¡ ¼ÓÇÏ´ÂÁö ¸íÈ®ÇÏÁö ¾Ê±â ¶§¹®¿¡, À̰ÍÀº ½Ç¼ö°¡ µË´Ï´Ù.

    ¹üÀ§¿Í ¸®½ºÆ® ºÐÇÒ µ¿¾È¿¡ ±¸¹®ÀÇ Â÷À̰¡ ¾ø´Â °ÍÀ» ÁÖÀÇÇϽʽÿä. ÀÌ·¯ÇÑ Á¶°ÇÀº ±â¼ú»óÀÏ »ÓÀÔ´Ï´Ù.

  4. °¢°¢ÀÇ ÆÄƼ¼Ç¿¡ ´ëÇØ, ´Ù¸¥ À妽º¿Í °°ÀÌ Å°°¡ µÇ´Â ¿­(¿­ÀÇ ÁýÇÕ)¿¡ À妽º¸¦ ÀÛ¼ºÇØ Áֽʽÿä. (Ű À妽º´Â ¹Ýµå½Ã ÇÊ¿äÇÏÁø ¾ÊÁö¸¸, ´ëºÎºÐÀÇ °æ¿ì¿¡ µµ¿òÀÌ µË´Ï´Ù. ¸¸¾à Ű °ªÀÌ À¯ÀÏÇÏ°Ô ÇÏ·Á¸é Ç×»ó À¯ÀÏÇÑ È¤Àº ÁÖŰ Á¦ÇÑÀ» °¢°¢ÀÇ ÆÄƼ¼Ç¿¡ ÀÛ¼ºÇØ Áֽʽÿä. )

  5. ¼±ÅÃÀûÀ¸·Î, ÀûÀýÇÑ ÆÄƼ¼Ç¿¡ ¸¶½ºÅÍ Å×À̺íÀÇ º¯°æÀÇ ¹æÇâÀ» ´Ù½Ã ¼³Á¤Çϱâ À§ÇØ ·êÀ̳ª Æ®¸®°Å¸¦ Á¤ÀÇÇØ Áֽʽÿä.

  6. constraint_exclusion¼³Á¤ ÆÄ¶ó¹ÌÅͰ¡postgresql.conf³»¿¡¼­ À¯È¿ÇÑ Áö È®ÀÎÇØ Áֽʽÿä. ¿©±â¿¡ ¾ø´Ù°í Äõ¸®´Â ÃÖÀûÈ­µÇÁö ¾Ê½À´Ï´Ù.

¿¹¸¦ µé¾î, ´ë±Ô¸ð ¾ÆÀ̽ºÅ©¸² ȸ»çÀÇ µ¥ÀÌÅͺ£À̽º¸¦ ±¸ÃàÇÑ´Ù°í °¡Á¤ÇØ Áֽʽÿä. ȸ»ç´Â °¢ Áö¹æÀÇ ¾ÆÀ̽ºÅ©¸²ÀÇ ¸Å»ó°ú ¸¶Âù°¡Áö·Î ¸ÅÀÏ ÃÖ°í±â¿ÂÀ» ÃøÁ¤Çϰí ÀÖ½À´Ï´Ù. °³³äÀûÀ¸·Î, ´ÙÀ½°ú °°Àº Å×À̺íÀÌ ÇÊ¿äÇÏ°Ô µË´Ï´Ù.

CREATE TABLE measurement (
    city_id         int not null,
    logdate         date not null,
    peaktemp        int,
    unitsales       int
);

´ëºÎºÐÀÇ Äõ¸®°¡ Áö³­ ÁÖ, Áö³­´Þ ȤÀº ¹Ý³âÀüÀÇ µ¥ÀÌÅ͸¦ Äõ¸®ÇÏ´Â °ÍÀ» ¾Ë°í ÀÖ½À´Ï´Ù. ±× ÀÌÀ¯´Â ÀÌ Å×À̺íÀÌ °æ¿µ¿¡ ´ëÇØ¼­ ¿Â¶óÀÎÀÇ ¸®Æ÷Æ®¸¦ ÀÛ¼ºÇÏ´Â °ÍÀ¸·Î ÁÖ·Î »ç¿ëµÇ±â ¶§¹®ÀÔ´Ï´Ù. ÇÊ¿äÇÑ °ú°ÅÀÇ µ¥ÀÌÅ;çÀ» ÁÙÀ̱â À§Çؼ­, °ú°Å 3°³¿ùÀÇ µ¥ÀÌÅ͸¸À» º¸Á¸Çϱâ·Î ÇϰڽÀ´Ï´Ù. ¸Å´ÞÀÇ ½ÃÀÛÇÏ°í °ú°ÅÀÇ µ¥ÀÌÅ͸¦ »èÁ¦ÇÕ´Ï´Ù.

ÀÌ·¯ÇÑ °æ¿ì, measurements Å×ÀÌºí¿¡ ´ëÇÑ ´Ù¸¥ ¿ä±¸¸¦ ¸ðµÎ ä¿ìµµ·Ï ÆÄƼ¼Å´×À» ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. À§¿Í °°Àº ¹æ¹ýÀ¸·Î, ÆÄƼ¼Å´×À» ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÕ´Ï´Ù.

  1. ¸¶½ºÅÍ Å×À̺íÀº À§¿¡¼­ ¼±¾ðµÈmeasurementÅ×À̺íÀÔ´Ï´Ù.

  2. ´ÙÀ½¿¡ °¢°¢ÀÇ ´Þ¿¡ ´ëÇØ¼­ 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Çϰí, ½Å±Ô ´Þ¿¡ ´ëÇØ¼­´Â ÀÚ½Ä Å×À̺íÀ» ÀÛ¼ºÇÕ´Ï´Ù.

  3. °ãÄ¡Áö ¾Ê´Â °Í °°Àº Å×À̺í Á¦ÇÑÀ» Ãß°¡ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ÀÌÇÏ¿Í °°Àº Å×À̺í ÀÛ¼º ½ºÅ©¸³Æ®°¡ µÉ °ÍÀÔ´Ï´Ù.

    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);

  4. ۰¡ µÇ´Â ¿­¿¡ À妽º°¡ ÇÊ¿äÇÒ °ÍÀÔ´Ï´Ù.

    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);

    À̹ø¿¡´Â ´õ ÀÌ»óÀÇ À妽º¸¦ Ãß°¡ÇÏÁö ¾Êµµ·Ï ÇÕ´Ï´Ù.

  5. ¸¸¾à µ¥ÀÌÅͰ¡ ÃÖ±ÙÀÇ ÆÄƼ¼Ç¿¡¸¸ Ãß°¡ µÇ¾îÁø´Ù¸é, µ¥ÀÌÅ͸¦ »ðÀÔÇÏ´Â ¸Å¿ì °£´ÜÇÑ ·êÀ» ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¸Å´ÞÀ» ÀçÁ¤ÀÇÇØ¼­ À̰ÍÀÌ Ç×»ó ÃÖ±Ù ÆÄƼ¼ÇÀ» °¡¸®Å°µµ·Ï ÇØ¾ßÇÕ´Ï´Ù.

    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;

±×·¯³ª, ºäÀÇ ÀçÀÛ¼ºÀÌ ÇÊ¿äÇϹǷÎ, µ¥ÀÌÅÍ ÁýÇÕÀÇ °³°³ÀÇ ÆÄƼ¼ÇÀÇ Ãß°¡ ¹× »èÁ¦¿¡ ºÒÇÊ¿äÇÑ Ã³¸®°¡ ´õÇØÁý´Ï´Ù.

5.9.3. ÆÄƼ¼ÇÀÇ °ü¸®

º¸Åë, ÃʱâÀÇ Å×À̺í Á¤ÀÇ·Î Á¤Àû »óŸ¦ ÀǵµÇÏÁö ¾Ê´Â °æ¿ì¿¡, ÆÄƼ¼Ç ÁýÇÕÀº È®¸³µË´Ï´Ù. ³°Àº µ¥ÀÌÅÍ ÆÄƼ¼ÇÀÇ »èÁ¦³ª ½Å±Ô µ¥ÀÌÅÍÀü¿ëÀÇ Á¤±âÀûÀÎ ½Å±Ô ÆÄƼ¼ÇÀÇ Ãß°¡ ¿ä±¸´Â ÀÚÁÖ ÀÖ½À´Ï´Ù. ÆÄƼ¼Å´×ÀÇ °¡Àå Áß¿äÇÑ ÀÌÁ¡Àº Á¤È®¼ºÀÔ´Ï´Ù. ÀÌ ¶§¹®¿¡, ´Ù¸¥ ÇÑÆíÀ¸·Î °ÅÀÇ µ¿½Ã¿¡ À§ÇèÇÑ ÀÛ¾÷À» ½ÇÇàÀ», ´ë·®ÀÇ µ¥ÀÌÅ͸¦ À̵¿½ÃŰÁö ¾Ê°í , ÆÄƼ¼Ç ±¸Á¶ Á¶ÀÛÀ¸·Î °ÅÀÇ ¼ø°£ÀûÀ¸·Î ½Ç½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù.

³°Àº µ¥ÀÌÅ͸¦ »èÁ¦ÇÏ´Â °¡Àå °£´ÜÇÑ ¹æ¹ýÀº ´ÜÁö ºÒÇÊ¿äÇØÁø ÆÄƼ¼ÇÀ» »èÁ¦ÇÏ´Â °ÍÀÔ´Ï´Ù.

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;

5.9.4. ÆÄƼ¼Å´×°ú Á¦ÇÑ¿¡ ÀÇÇÑ Á¦¿Ü

Á¦ÇÑ¿¡ ÀÇÇÑ Á¦¿Ü´Â À§ÀÇ ¹æ¹ýÀ¸·Î Á¤ÀÇµÈ ÆÄƼ¼Å´×µÈ Å×ÀÌºí¿¡ ´ëÇÑ ÆÛÆ÷¸Õ½º¸¦ Çâ»ó½ÃŰ´Â Äõ¸®ÀÇ ÃÖÀûÈ­ ±â¼úÀÔ´Ï´Ù. ¿¹¸¦ µé¸é,

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Á¦ÇѸ¸À¸·Î µ¿ÀÛÇϰí, À妽ºÀÇ À¯¹«¿¡¼­´Â µ¿ÀÛÇÏÁö ¾Ê´Â °ÍÀ» ÁÖÀÇÇϽʽÿä. µû¶ó¼­ Ű¿­ÀÇ À妽º¸¦ Á¤ÀÇÇÏ´Â °ÍÀº ÇÊ¿äÇÏÁö ¾Ê½À´Ï´Ù. ¾î´À ÆÄƼ¼ÇÀ¸·Î À妽º°¡ ÇÊ¿äÇѰ¡´Â ÆÄƼ¼ÇÀ» ½ºÄµ ÇÏ´Â Äõ¸®°¡ ÆÄƼ¼ÇÀÇ ´ëºÎºÐÀ̳ª ÀÛÀº ºÎºÐÀ» ½ºÄµÇÏ´ÂÁö¿¡ µû¶ó °áÁ¤µË´Ï´Ù. ÀüÀÚ´Â ¾Æ´Ï°í ÈÄÀÚ¿¡ ÀÖ¾î, À妽º´Â µµ¿òÀÌ µË´Ï´Ù.

5.9.5. °æ°í

ÀÌÇÏÀÇ °æ°í°¡ ÆÄƼ¼ÇµÈ Å×ÀÌºí¿¡ ´ëÇØ¼­ Àû¿ëµË´Ï´Ù.

ÀÌÇÏÀÇ °æ°í°¡ Á¦ÇÑ¿¡ ÀÇÇÑ Á¦¿Ü¿¡ Àû¿ëµË´Ï´Ù.