Vastus (03.11.2023 15:42): CREATE TABLE Ajatempel(tempel1 TIMESTAMP(0) NOT NULL DEFAULT LOCALTIMESTAMP,
tempel2 TIMESTAMP NOT NULL DEFAULT LOCALTIMESTAMP(0));
INSERT INTO Ajatempel(tempel1, tempel2)
VALUES (DEFAULT, DEFAULT);
SELECT *
FROM Ajatempel;
Mõlemas väljas on ühesugune väärtus - rea lisamise kuupäev ja kellaaeg ilma sekundi murdosadeta. Veeru tempel1 korral on see saavutatud veeru tasemel deklareeritud kitsendusega, mis ütleb, et veerus sekundi murdosa ei registreerita. Veeru tempel2 korral on see saavutatud vaikimisi väärtuse leidmise kaudu. Vaikimisi väärtusena registreeritud väärtuse saab teatavasti üle kirjutada.
UPDATE Ajatempel SET tempel2=LOCALTIMESTAMP;
Nüüd on veerus tempel2 ka sekundi murdosad. Selles mõttes on veeru tempel1 korral kasutatud lahendus parem.
Ajatempli tüüpi veeru täpsuse muutmiseks on lause:
ALTER TABLE Ajatempel ALTER COLUMN tempel2 SET DATA TYPE timestamp(0);
Kui sekundi murdosasid pole vaja registreerida, siis ongi parim lahendus selline, kus sekundi murdosade arvu piiratakse nii veeru tüübi kui ka vaikimisi väärtuse deklareerimisel.
Kui kasutan modelleerimiseks ja SQL koodi genereerimiseks Enterprise Architect 12 või 16 modelleerimisvahendeid, siis saan seal PostgreSQL andmebaasi disaini mudelis määrata TIMESTAMP tüüpi veeru korral pikkuse (length) 0, kuid vaikimisi kasutatavate koodi genereerimise mallide korral sellega koodi genereerimisel ei arvestata. |