Galera, fiz um backup de um banco de um servidor antigo que uns programadores bestões fizeram, na intenção de levantar um outro servidor (mais robusto e de sistema mais atualizado). Após instalar tudo o que era necessário, restaurei o backup para esse novo banco, mas durante a restauração dá erros e a aplicação apresenta falhas ao buscar dados no banco. Olhei o log do Postgresql e apresenta as seguintes informações:
---------------------------------
2012-03-26 14:27:20 BRT CONSULTA: select case when sigla is null then nome else sigla end from unidade_penal where u_penal_id = value
2012-03-26 14:27:20 BRT CONTEXTO: PL/pgSQL function "get_label_campo" line 11 at comando SQL
2012-03-26 14:27:20 BRT COMANDO: select a.campo_tipo_ocorrencia_id as id, a.nome, a.tipo_campo, b.valor, get_label_campo(b.campo_ocorrencia_id) as label from campos_tipo_ocorrencia a join campo_ocorrencias b on(b.ref_campo=a.campo_tipo_ocorrencia_id) where b.ref_ocorrencia ='266559' order by campo_ocorrencia_id;
2012-03-26 14:27:20 BRT ERRO: operador não existe: integer = character varying no caracter 106
2012-03-26 14:27:20 BRT DICA: Nenhum operador corresponde com o nome e o(s) tipo(s) de argumento(s) informados. Você precisa adicionar conversões de tipo explícitas.
2012-03-26 14:27:20 BRT CONSULTA: select case when sigla is null then nome else sigla end from unidade_penal where u_penal_id = value
2012-03-26 14:27:20 BRT CONTEXTO: PL/pgSQL function "get_label_campo" line 11 at comando SQL
2012-03-26 14:27:20 BRT COMANDO: select a.campo_tipo_ocorrencia_id as id, a.nome, a.tipo_campo, b.valor, get_label_campo(b.campo_ocorrencia_id) as label from campos_tipo_ocorrencia a join campo_ocorrencias b on(b.ref_campo=a.campo_tipo_ocorrencia_id) where b.ref_ocorrencia ='289597' order by campo_ocorrencia_id;
2012-03-26 14:27:39 BRT LOG: não pôde receber dados do cliente: Conexão fechada pela outra ponta
2012-03-26 14:27:39 BRT LOG: EOF inesperado durante conexão do cliente
--------------------------------
A função referida no log "get_label_campo" está no novo banco desta forma:
------------------------------
-- Function: get_label_campo(integer)
-- DROP FUNCTION get_label_campo(integer);
CREATE OR REPLACE FUNCTION get_label_campo(integer)
RETURNS character varying AS
$BODY$
DECLARE
campo int;
value varchar;
tipocampo varchar;
foreign varchar;
BEGIN
select into campo, value ref_campo, valor from campo_ocorrencias where campo_ocorrencia_id = $1;
select into tipocampo tipo_campo from campos_tipo_ocorrencia where campo_tipo_ocorrencia_id = campo;
IF (tipocampo = 'upenal') THEN
BEGIN
select into foreign case when sigla is null then nome else sigla end from unidade_penal where u_penal_id = value;
return foreign;
END;
ELSE
return value;
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION get_label_campo(integer)
OWNER TO postgres;
---------------------------------
Se alguém tiver alguma idéia do que pode estar ocorrendo, por favor, me ajude.
Pergunta
Isomartecnologo
Galera, fiz um backup de um banco de um servidor antigo que uns programadores bestões fizeram, na intenção de levantar um outro servidor (mais robusto e de sistema mais atualizado). Após instalar tudo o que era necessário, restaurei o backup para esse novo banco, mas durante a restauração dá erros e a aplicação apresenta falhas ao buscar dados no banco. Olhei o log do Postgresql e apresenta as seguintes informações:
---------------------------------
2012-03-26 14:27:20 BRT CONSULTA: select case when sigla is null then nome else sigla end from unidade_penal where u_penal_id = value
2012-03-26 14:27:20 BRT CONTEXTO: PL/pgSQL function "get_label_campo" line 11 at comando SQL
2012-03-26 14:27:20 BRT COMANDO: select a.campo_tipo_ocorrencia_id as id, a.nome, a.tipo_campo, b.valor, get_label_campo(b.campo_ocorrencia_id) as label from campos_tipo_ocorrencia a join campo_ocorrencias b on(b.ref_campo=a.campo_tipo_ocorrencia_id) where b.ref_ocorrencia ='266559' order by campo_ocorrencia_id;
2012-03-26 14:27:20 BRT ERRO: operador não existe: integer = character varying no caracter 106
2012-03-26 14:27:20 BRT DICA: Nenhum operador corresponde com o nome e o(s) tipo(s) de argumento(s) informados. Você precisa adicionar conversões de tipo explícitas.
2012-03-26 14:27:20 BRT CONSULTA: select case when sigla is null then nome else sigla end from unidade_penal where u_penal_id = value
2012-03-26 14:27:20 BRT CONTEXTO: PL/pgSQL function "get_label_campo" line 11 at comando SQL
2012-03-26 14:27:20 BRT COMANDO: select a.campo_tipo_ocorrencia_id as id, a.nome, a.tipo_campo, b.valor, get_label_campo(b.campo_ocorrencia_id) as label from campos_tipo_ocorrencia a join campo_ocorrencias b on(b.ref_campo=a.campo_tipo_ocorrencia_id) where b.ref_ocorrencia ='289597' order by campo_ocorrencia_id;
2012-03-26 14:27:39 BRT LOG: não pôde receber dados do cliente: Conexão fechada pela outra ponta
2012-03-26 14:27:39 BRT LOG: EOF inesperado durante conexão do cliente
--------------------------------
A função referida no log "get_label_campo" está no novo banco desta forma:
------------------------------
-- Function: get_label_campo(integer)
-- DROP FUNCTION get_label_campo(integer);
CREATE OR REPLACE FUNCTION get_label_campo(integer)
RETURNS character varying AS
$BODY$
DECLARE
campo int;
value varchar;
tipocampo varchar;
foreign varchar;
BEGIN
select into campo, value ref_campo, valor from campo_ocorrencias where campo_ocorrencia_id = $1;
select into tipocampo tipo_campo from campos_tipo_ocorrencia where campo_tipo_ocorrencia_id = campo;
IF (tipocampo = 'upenal') THEN
BEGIN
select into foreign case when sigla is null then nome else sigla end from unidade_penal where u_penal_id = value;
return foreign;
END;
ELSE
return value;
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION get_label_campo(integer)
OWNER TO postgres;
---------------------------------
Se alguém tiver alguma idéia do que pode estar ocorrendo, por favor, me ajude.
Desde já agradeço.
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.