| | 1 | = Автоматско поставување на датум на трансакција |
| | 2 | |
| | 3 | ==== Опис |
| | 4 | Овој тригер автоматски го поставува датумот на трансакцијата (`date`) доколку при внесување на трансакција истиот не е зададен, базата на податоци ќе го користи тековниот системски датум и време |
| | 5 | |
| | 6 | Со ова се обезбедува дека секоја трансакција има валиден временски запис |
| | 7 | |
| | 8 | ==== Табели опфатени со тригерот |
| | 9 | - `transaction` |
| | 10 | |
| | 11 | ==== Тип на тригер |
| | 12 | - **BEFORE INSERT |
| | 13 | Активиран над табелата `transaction` |
| | 14 | |
| | 15 | ==== SQL код |
| | 16 | {{{#!sql |
| | 17 | CREATE OR REPLACE FUNCTION set_transaction_date() |
| | 18 | RETURNS TRIGGER |
| | 19 | LANGUAGE plpgsql |
| | 20 | AS $$ |
| | 21 | BEGIN |
| | 22 | IF NEW.date IS NULL THEN |
| | 23 | NEW.date := NOW(); |
| | 24 | END IF; |
| | 25 | |
| | 26 | RETURN NEW; |
| | 27 | END; |
| | 28 | $$; |
| | 29 | |
| | 30 | |
| | 31 | CREATE TRIGGER trg_set_transaction_date |
| | 32 | BEFORE INSERT |
| | 33 | ON transaction |
| | 34 | FOR EACH ROW |
| | 35 | EXECUTE FUNCTION set_transaction_date(); |
| | 36 | }}} |
| | 37 | |
| | 38 | ==== Објаснување на логиката |
| | 39 | Пред внесување на нова трансакција: |
| | 40 | - се проверува дали колоната `date` е празна |
| | 41 | - доколку е `NULL`, се поставува тековниот датум и време |
| | 42 | |
| | 43 | ==== Причина за користење |
| | 44 | Овој тригер е важен затоа што: |
| | 45 | - овозможува стандардизирано однесување при внесување податоци |
| | 46 | - времето е клучен атрибут за финансиски податоци |
| | 47 | - апликацијата не секогаш е сигурен извор |
| | 48 | - се елиминираат празни или невалидни датуми |
| | 49 | Исто така: |
| | 50 | - го поедноставува API-то |
| | 51 | - ја намалува комплексноста на frontend-логиката |