Cast produit Renvoyé le type character varying ne correspond pas attendu de type character varying(8)'

Hier, nous avons eu une base de données PostgreSQL mis à niveau vers la version 9.1.3. Nous pensions avoir tout testé et prêt, mais il y a une fonction que nous avons manqué. Elle retourne un tableau de type comme ceci:

CREATE OR REPLACE FUNCTION myfunc( patient_number varchar
    , tumor_number_param varchar, facility_number varchar)
  RETURNS SETOF patient_for_registrar
  LANGUAGE plpgsql
AS
$body$
BEGIN
    RETURN QUERY            

    SELECT cast(nfa.patient_id_number as varchar),
    ...

Je ne ne donne que la première colonne de la sélection parce que c'est là l'erreur se produit. Avant aujourd'hui, cette fonction marchait bien, mais maintenant il donne cette erreur:

ERREUR: structure de la requête ne correspond pas à la fonction de type de résultat
Détail: Retour de type character varying ne correspondent pas du type attendu
character varying(8) dans la colonne 1. Où: fonctions PL/pgSQL
"getwebregistrarpatient_withdeletes" de la ligne 3 à la REQUÊTE de RETOUR [SQL
Etat=42804]

La colonne nfa.patient_id_number est du texte et de l'est de voter pour la colonne patient_id_number dans patient_for_registrar qui est varchar(8). Après avoir lu cela, je pense que le problème est dû à la longueur de la colonne n'est pas spécifié lors de la conversion de texte. Mais le problème c'est que j'ai essayé différentes combinaisons de sous-chaînes pour résoudre ce problème et aucun n'est de résoudre le problème:

substring(cast(nfa.patient_id_number as varchar) from 1 for 8),

cast(substring(nfa.patient_id_number from 1 for 8) as varchar),

cast(substring(nfa.patient_id_number from 1 for 8) as varchar(8)),

Quelqu'un aurait-il les pointeurs?

OriginalL'auteur hermes the goat | 2012-05-25