Itgenrst013 melding op datum in PostgreSQL

Bij het uitvoeren van de volgende query:

create or replace table mc_fjournaalpost@sql
as
select *
from   fJournaalpost@mc

krijg ik de volgende foutmelding:

itgenrst013: Statement #2 ‘create or rep…ournaalpost@mc’ starting on line 6 caused an error.
The value ‘12-03-0021 00:00:00’ of the optional column ‘documentDatum’ in ‘MC_FJOURNAALPOST’ is before the start of the Gregorian calendar (01-01-1753).
Ensure that the value is correct in row #759.326. Probably the value should have been null. You may want to configure the connector attribute ‘invantive-sql-correct-invalid-date’ to automatically change the date to a valid value.

Niet alle databaseplatformen hebben dezelfde randvoorwaarden die ze aan de data stellen. De toegestane waardebereiken kunnen uit elkaar lopen zoals hier voor datums, maar andere scenario’s zijn bijvoorbeeld de semantiek van spaties achter een tekst of het verschil tussen '' en null.

Dit geldt niet alleen voor databaseplatformen. Zelfs cloudplatformen kunnen datakwaliteitissues hebben ondanks dat de API’s als een kwaliteitsschil er om heen zitten. Vooral meer commercieel-gerichte pakketten hebben vaak matige datakwaliteit en beperkte invoercontroles. Bijvoorbeeld custom fields op Teamleader geven vaak problemen door datums met letters of tienduizenden jaren in de toekomst. De financiële pakketten hebben hun zaakjes meestal redelijk op orde. Voorbeelden van problemen daar zijn bijvoorbeeld het aanleveren van een default in plaats van leeg, bijvoorbeeld 0 in plaats van null.

Voor Invantive SQL hebben wel als generieke eis geformuleerd dat een datum moet liggen na het begin van de Gregoriaanse kalender. Dat is die periode waarin de paus besloot een aantal dagen toe te voegen aan de datumregistratie om historische verschuivingen door incorrect jaarlengte te corrigeren (dat gaf een hoop gedoe, vandaar de tegenwoordige schrikkeljaren).

Als dat niet zo is, dan treedt een itgenrst011 of itgenrst013 op. De itgenrst011 treedt op indien het veld verplicht een waarde heeft en itgenrst013 bij een optioneel veld.

In dit specifieke geval adviseer ik de volgende stappen:

  • Record laten controleren op juistheid door de applicatiebeheerder van het pakket dat op PostgreSQL draait. En indien mogelijk en zinvol laten corrigeren.
  • Uitschakelen controle op datumbereik en vervangen door automatisch schonen.

De tweede stap is een echte noodgreep; het automatisch schonen kan perfect geldige data ook wegpoetsen.

Het wegpoetsen van ongeldige datums stel je in door de Invantive SQL eigenschap invantive-sql-correct-invalid-date op true te zetten (default: false):

set invantive-sql-correct-invalid-date@dataContainer true

met als uitleg:

Whether to correct dates considered invalid since they are before 01-01-1753. When nullable, they are removed. Otherwise they are replaced by 01-01-1753.