| | 108 | Табелата **Payment** претставува централна финансиска табела во системот, бидејќи ги содржи сите информации за извршените плаќања, како што се износот на трансакцијата, датумот и времето на плаќањето, како и поврзаната резервација. |
| | 109 | |
| | 110 | === Причини за партиционирање |
| | 111 | - **Константен и брз раст на податоци** |
| | 112 | Секојдневно се генерираат голем број нови трансакции. Со тек на време, оваа табела станува една од најголемите во системот, што може значително да ги намали перформансите при пребарување и обработка на финансиски податоци. |
| | 113 | - **Природна временска структура** |
| | 114 | Секое плаќање има точно дефиниран атрибут transaction_date. Овој атрибут е природно погоден за RANGE партиционирање, бидејќи финансиските записи логички се групираат по временски интервали, а исто така одговара на потребите за финансиско известување и ревизија. |
| | 115 | |
| | 116 | Овие операции бараат временско филтрирање, кое со партиционирање се извршува значително побрзо, бидејќи системот пристапува само до релевантната партиција. |
| | 117 | |
| | 118 | - **Како помага партиционирањето** |
| | 119 | Со примена на годишни партиции, PostgreSQL ги изолира податоците по години. Кога сметководството бара извештај за 2026 година, базата целосно ги игнорира (не ги ни чита на хард дискот) податоците за другите години. Ова обезбедува инстантни резултати на SELECT аналитичките операции и овозможува побрзо архивирање на старите податоци. |
| | 120 | |
| | 121 | - **Default партиција** |
| | 122 | Се користи и DEFAULT партиција која служи како сигурносен механизам за стабилноста на апликацијата. Таа ги прифаќа сите плаќања чии датуми поради системска грешка или неусогласено време паѓаат надвор од предвидениот опсег, со што се спречува паѓање на трансакцијата при купување билет. |
| | 123 | |
| | 124 | === Kод со објаснување |
| | 125 | |
| | 126 | - **STEP 1: Преименување на старата табела** |
| | 127 | |
| | 128 | [[Image("Screenshot 2026-05-21 185825.png", 800px)]] |
| | 129 | |
| | 130 | -Пред да се направи каква било промена, старата табела се преименува во payment_original. На овој начин сите постоечки финансиски записи остануваат недопрени и може да се користат при миграцијата. |
| | 131 | |
| | 132 | - **STEP 2: Креирање на нова партиционирана табела** |
| | 133 | |
| | 134 | [[Image("Screenshot 2026-05-21 190107.png", 500px)]] |
| | 135 | |
| | 136 | -Се креира новата главна табела Payment со PARTITION BY RANGE (transaction_date). Важно е transaction_date да биде вклучен во PRIMARY KEY – тоа е барање на PostgreSQL кога табелата е партиционирана. Оваа табела сама по себе не чува податоци, туку служи само како логичка обвивка над партициите. |
| | 137 | |
| | 138 | - **STEP 3: Партиција по години** |
| | 139 | |
| | 140 | [[Image("Screenshot 2026-05-21 190326.png", 500px)]] |
| | 141 | |
| | 142 | -Ги прима сите редови што не спаѓаат во дефинираните интервали |
| | 143 | |
| | 144 | -Спречува грешки при INSERT |
| | 145 | |
| | 146 | -Многу важно за стабилен систем |
| | 147 | |
| | 148 | - **STEP 4: Креирање DEFAULT партиција** |
| | 149 | |
| | 150 | [[Image("Screenshot 2026-05-21 190326.png", 500px)]] |
| | 151 | |
| | 152 | -Секој запис чиј transaction_date не спаѓа во опсегот, автоматски завршува во оваа партиција. Ова е важен механизам – без него, INSERT со датум надвор од опсегот би предизвикал грешка и би го нарушил работењето на системот |
| | 153 | |
| | 154 | |
| | 155 | - **STEP 5: Миграција на постоечките податоци ** |
| | 156 | |
| | 157 | [[Image("Screenshot 2026-05-21 190958.png", 500px)]] |
| | 158 | |
| | 159 | -Сите записи од payment_original се пренесуваат во новата партиционирана табела. PostgreSQL автоматски одлучува во која партиција оди секој запис врз основа на неговиот transaction_date. |
| | 160 | |
| | 161 | === Заклучок |
| | 162 | |
| | 163 | Со партиционирањето на табелата Payment добиваме поделба на финансиските трансакции во годишни табели (партиции) според transaction_date. На тој начин пребарувањата се многу побрзи, бидејќи системот чита само податоци од конкретната година, наместо целата табела. Ова резултира со подобри перформанси, полесно одржување и поефикасна работа со големи количини на трансакциски податоци. |