Fonction TO_DATE entre PostgreSQL 8.2 et 8.3
Comme nous le savons tous, PostgreSQL 8.3 effectue une vérification très forte du type de données, cela fait que beaucoup d'applications rencontrent de nombreuses erreurs de type de données après la migration de PostgreSQL8.x vers PostgreSQL8.3. Cela est principalement dû à la vérification du type de données.
L'une des erreurs courantes est la fonction to_date (). Il accepte deux textes comme paramètres.
to_date(text,text)
Ok maintenant je crée un tableau comme suit. Un simple appel de table n_url_test contient une date de création comme type de données horodatage.
CREATE TABLE n_url_test ( urltestid bigserial NOT NULL, createddate timestamp without time zone DEFAULT now(), CONSTRAINT n_url_to_test_pkey PRIMARY KEY (urltestid) )
Je lance sql suivant dans PostgreSQL8.2, il renvoie mon résultat attendu au format «AAAA-MM-JJ».
--PostgreSQL 8.2 --------------- select to_date(createddate,'YYYY-MM-DD') from n_url_test;
Cependant, après avoir migré vers PostgreSQL8.3, j'ai rencontré l'erreur suivante
--PostgreSQL 8.3 --------------- select to_date(createddate,'YYYY-MM-DD') from n_url_test; -------------------------------------------------------------------------------- ERROR: function to_date(timestamp without time zone, unknown) does not exist LINE 1: select to_date(createddate,'YYYY-MM-DD') from n_url_test ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. ********** Error **********
PostgreSQL 8.3 ne convertira pas automatiquement l'horodatage en texte pour nous comme ce qu'il faisait dans la version précédente. Nous avons besoin d'expliciter les casts de type créésdate comme suit
--PostgreSQL 8.3 --------------- select to_date(createddate::text,'YYYY-MM-DD') from n_url_test;
Ajouter::text à la date de création convertira explicitement le type de données en texte, ça marche. PostgreSQL8.3 strictly checking on data type is good function , but please do not forget there still have a lot people using previous version. Cela pose beaucoup de problèmes si l'application est basée sur la conception ignorant la vérification du type de données comme ce que je mentionne ci-dessus.