Re: [pgbr-geral] Operador varchar = int8 no postgreSQL 9
Em 28-02-2011 19:37, Marcal Hokama escreveu: Date: Mon, 28 Feb 2011 14:02:05 -0400 From: ma...@tj.rr.gov.br To: pgbr-geral@listas.postgresql.org.br Subject: Re: [pgbr-geral] Operador varchar = int8 no postgreSQL 9 Em 28-02-2011 13:09, Flavio Henrique Araque Gurgel escreveu: Olá a todos. Ha alguns anos, migrei um sistema legado do MS SQLServer para PostgreSQL. Esse sistema faz consultas do tipo: SELECT * FROM organizacional.funcionario WHERE matricula = 989676; onde matricula é um varchar. Até a versão 8.1 (que utilizávamos aqui até o mês passado) o SGBD aceitava comparações varchar = int, bem como int = varchar. Depois de atualizarmos para versão 9.0.2 esta consulta passou a dar erro: Error: ERRO: operador não existe: character varying = integer SQLState: 42883 Tentei contornar o problema criando os operadores: CREATE OPERATOR = (PROCEDURE = fn_int8eqvarchar, LEFTARG = int8 , RIGHTARG = varchar) CREATE OPERATOR = (PROCEDURE = fn_varchareqint8, LEFTARG = varchar , RIGHTARG = int8) Mas tive um efeito colateral inadmissível. Comparações varchar = varchar passaram a dar erro: Error: ERRO: sintaxe de entrada é inválida para integer: P SQLState: 22P02 Alguma sugestão? Conserte sua aplicação. Ela é que está errada, não o banco de dados. Isso já foi discutido aqui e nos fóruns internacionais. Os desenvolvedores avisaram sobre isso nos release notes. A conversão automática de tipos foi removida a partir do PostgreSQL 8.3, ou seja, já faz tempinho. []s Flavio Gurgel ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Não tenho essa opção, e se for a única, vou ter que apelar para um downgrade. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Não é possível a conversão da coluna organizacional.funcionario.matricula de varchar para integer? Pelo que pude perceber da sua consulta só tem valores numéricos neste campo. Um abraço, Marçal de Lima hokama--mhok...@hotmail.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Não, o mesmo maldito sistema faz consultas nesse campo com like. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Operador varchar = int8 no postgreSQL 9
Se for no Windows, abra o executável no Ultra-Edit (ou outro editor hexa de sua preferência) e veja se dá pra consertar o SQL. Dependendo da forma como eles são montados, pode ser possível. A coisa mais simples seria trocar os LIKE por = onde for necessário, removendo os % também. Em 1 de março de 2011 09:20, Marco Aurélio Carvalho Feitosa ma...@tj.rr.gov.br escreveu: Em 28-02-2011 19:37, Marcal Hokama escreveu: Date: Mon, 28 Feb 2011 14:02:05 -0400 From: ma...@tj.rr.gov.br To: pgbr-geral@listas.postgresql.org.br Subject: Re: [pgbr-geral] Operador varchar = int8 no postgreSQL 9 Em 28-02-2011 13:09, Flavio Henrique Araque Gurgel escreveu: Olá a todos. Ha alguns anos, migrei um sistema legado do MS SQLServer para PostgreSQL. Esse sistema faz consultas do tipo: SELECT * FROM organizacional.funcionario WHERE matricula = 989676; onde matricula é um varchar. Até a versão 8.1 (que utilizávamos aqui até o mês passado) o SGBD aceitava comparações varchar = int, bem como int = varchar. Depois de atualizarmos para versão 9.0.2 esta consulta passou a dar erro: Error: ERRO: operador não existe: character varying = integer SQLState: 42883 Tentei contornar o problema criando os operadores: CREATE OPERATOR = (PROCEDURE = fn_int8eqvarchar, LEFTARG = int8 , RIGHTARG = varchar) CREATE OPERATOR = (PROCEDURE = fn_varchareqint8, LEFTARG = varchar , RIGHTARG = int8) Mas tive um efeito colateral inadmissível. Comparações varchar = varchar passaram a dar erro: Error: ERRO: sintaxe de entrada é inválida para integer: P SQLState: 22P02 Alguma sugestão? Conserte sua aplicação. Ela é que está errada, não o banco de dados. Isso já foi discutido aqui e nos fóruns internacionais. Os desenvolvedores avisaram sobre isso nos release notes. A conversão automática de tipos foi removida a partir do PostgreSQL 8.3, ou seja, já faz tempinho. []s Flavio Gurgel ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Não tenho essa opção, e se for a única, vou ter que apelar para um downgrade. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Não é possível a conversão da coluna organizacional.funcionario.matricula de varchar para integer? Pelo que pude perceber da sua consulta só tem valores numéricos neste campo. Um abraço, Marçal de Lima hokama--mhok...@hotmail.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Não, o mesmo maldito sistema faz consultas nesse campo com like. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Atenciosamente, Alexsander da Rosa http://rednaxel.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Operador varchar = int8 no postgreSQL 9
2011/2/28 Tiago Adami adam...@gmail.com: Para quem trabalha estritamente no mundo opensource e/ou para órgãos governamentais, é fácil - ou menos doloroso - corrigir a aplicação. No Nãã ... não se iluda com isto! Eu trabalho estritamente no universo CA/SL e no 1o. setor (governo) e as coisas não são tão simples assim, nem sequer menos dolorosas, pelo contrário. Apenas pra meu comentário acima não ficar no ar, quando foi discutido sobre retirar algumas conversões automáticas (cast implítico) do postgres, alguns desenvolvedores defendiam q era melhor não fazer e outros defendiam que era o mais correto por conta do otimizador e outras coisas, e no final ganhou o mais correto. Trazendo a questão pra nossa realidade, no governo tudo o q analisamos pra colocar no portal do software público[1] demanda decisões que favorecem alguns e incomodam outros, mas não dá pra atender todo mundo, então o foco *sempre* é na evolução do projeto. seu caso, como existe dependência da funcionalidade de autocasting, certamente a última versão que poderá utilizar é a 8.2. Eu administro Não é verdade, como já disse o Euler. É possível vc restaurar as conversões (casts), funções e operadores necessários para o funcionamento da conversão automática, basta executar este script[2], porém entenda que a assinatura de algumas funções serão afetadas, será necessário criar outro operador de concatenação, entre outros detalhes q cabem a vc, analista, descobrir. Além do mais, a performance da 8.2 é sofrível em muitas operações. 1) http://www.softwarepublico.gov.br 2) http://wiki.postgresql.org/images/d/d1/Pg83-implicit-casts.sql Abraço! -Leo -- Leonardo Cezar http://postgreslogia.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Operador varchar = int8 no postgreSQL 9
Em 01-03-2011 08:51, Leonardo Cezar escreveu: 2011/2/28 Tiago Adamiadam...@gmail.com: Para quem trabalha estritamente no mundo opensource e/ou para órgãos governamentais, é fácil - ou menos doloroso - corrigir a aplicação. No Nãã ... não se iluda com isto! Eu trabalho estritamente no universo CA/SL e no 1o. setor (governo) e as coisas não são tão simples assim, nem sequer menos dolorosas, pelo contrário. Apenas pra meu comentário acima não ficar no ar, quando foi discutido sobre retirar algumas conversões automáticas (cast implítico) do postgres, alguns desenvolvedores defendiam q era melhor não fazer e outros defendiam que era o mais correto por conta do otimizador e outras coisas, e no final ganhou o mais correto. Trazendo a questão pra nossa realidade, no governo tudo o q analisamos pra colocar no portal do software público[1] demanda decisões que favorecem alguns e incomodam outros, mas não dá pra atender todo mundo, então o foco *sempre* é na evolução do projeto. seu caso, como existe dependência da funcionalidade de autocasting, certamente a última versão que poderá utilizar é a 8.2. Eu administro Não é verdade, como já disse o Euler. É possível vc restaurar as conversões (casts), funções e operadores necessários para o funcionamento da conversão automática, basta executar este script[2], porém entenda que a assinatura de algumas funções serão afetadas, será necessário criar outro operador de concatenação, entre outros detalhes q cabem a vc, analista, descobrir. Além do mais, a performance da 8.2 é sofrível em muitas operações. 1) http://www.softwarepublico.gov.br 2) http://wiki.postgresql.org/images/d/d1/Pg83-implicit-casts.sql Abraço! -Leo Valeu Leo. Como não estamos com problemas com outros tipos, apliquei o script apenas para os casts de int* para text). Até então não verifiquei nenhuma anormalidade. Obrigado. Marco Aurélio ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Operador varchar = int8 no postgreSQL 9
Olá a todos. Ha alguns anos, migrei um sistema legado do MS SQLServer para PostgreSQL. Esse sistema faz consultas do tipo: SELECT * FROM organizacional.funcionario WHERE matricula = 989676; onde matricula é um varchar. Até a versão 8.1 (que utilizávamos aqui até o mês passado) o SGBD aceitava comparações varchar = int, bem como int = varchar. Depois de atualizarmos para versão 9.0.2 esta consulta passou a dar erro: Error: ERRO: operador não existe: character varying = integer SQLState: 42883 Tentei contornar o problema criando os operadores: CREATE OPERATOR = (PROCEDURE = fn_int8eqvarchar, LEFTARG = int8 , RIGHTARG = varchar) CREATE OPERATOR = (PROCEDURE = fn_varchareqint8, LEFTARG = varchar , RIGHTARG = int8) Mas tive um efeito colateral inadmissível. Comparações varchar = varchar passaram a dar erro: Error: ERRO: sintaxe de entrada é inválida para integer: P SQLState: 22P02 Alguma sugestão? Marco Aurélio C Feitosa ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Operador varchar = int8 no postgreSQL 9
Olá a todos. Ha alguns anos, migrei um sistema legado do MS SQLServer para PostgreSQL. Esse sistema faz consultas do tipo: SELECT * FROM organizacional.funcionario WHERE matricula = 989676; onde matricula é um varchar. Até a versão 8.1 (que utilizávamos aqui até o mês passado) o SGBD aceitava comparações varchar = int, bem como int = varchar. Depois de atualizarmos para versão 9.0.2 esta consulta passou a dar erro: Error: ERRO: operador não existe: character varying = integer SQLState: 42883 Tentei contornar o problema criando os operadores: CREATE OPERATOR = (PROCEDURE = fn_int8eqvarchar, LEFTARG = int8 , RIGHTARG = varchar) CREATE OPERATOR = (PROCEDURE = fn_varchareqint8, LEFTARG = varchar , RIGHTARG = int8) Mas tive um efeito colateral inadmissível. Comparações varchar = varchar passaram a dar erro: Error: ERRO: sintaxe de entrada é inválida para integer: P SQLState: 22P02 Alguma sugestão? Conserte sua aplicação. Ela é que está errada, não o banco de dados. Isso já foi discutido aqui e nos fóruns internacionais. Os desenvolvedores avisaram sobre isso nos release notes. A conversão automática de tipos foi removida a partir do PostgreSQL 8.3, ou seja, já faz tempinho. []s Flavio Gurgel ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Operador varchar = int8 no postgreSQL 9
Em 28-02-2011 13:58, Marco Aurélio Carvalho Feitosa escreveu: Tentei contornar o problema criando os operadores: AFAICS, você precisa criar CASTs. Vide [1] para uma possível solução. Alguma sugestão? Corrigir a aplicação? [1] http://petereisentraut.blogspot.com/2008/03/readding-implicit-casts-in-postgresql.html -- Euler Taveira de Oliveira http://www.timbira.com/ ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Operador varchar = int8 no postgreSQL 9
Em 28-02-2011 13:09, Flavio Henrique Araque Gurgel escreveu: Olá a todos. Ha alguns anos, migrei um sistema legado do MS SQLServer para PostgreSQL. Esse sistema faz consultas do tipo: SELECT * FROM organizacional.funcionario WHERE matricula = 989676; onde matricula é um varchar. Até a versão 8.1 (que utilizávamos aqui até o mês passado) o SGBD aceitava comparações varchar = int, bem como int = varchar. Depois de atualizarmos para versão 9.0.2 esta consulta passou a dar erro: Error: ERRO: operador não existe: character varying = integer SQLState: 42883 Tentei contornar o problema criando os operadores: CREATE OPERATOR = (PROCEDURE = fn_int8eqvarchar, LEFTARG = int8 , RIGHTARG = varchar) CREATE OPERATOR = (PROCEDURE = fn_varchareqint8, LEFTARG = varchar , RIGHTARG = int8) Mas tive um efeito colateral inadmissível. Comparações varchar = varchar passaram a dar erro: Error: ERRO: sintaxe de entrada é inválida para integer: P SQLState: 22P02 Alguma sugestão? Conserte sua aplicação. Ela é que está errada, não o banco de dados. Isso já foi discutido aqui e nos fóruns internacionais. Os desenvolvedores avisaram sobre isso nos release notes. A conversão automática de tipos foi removida a partir do PostgreSQL 8.3, ou seja, já faz tempinho. []s Flavio Gurgel ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Não tenho essa opção, e se for a única, vou ter que apelar para um downgrade. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Operador varchar = int8 no postgreSQL 9
Date: Mon, 28 Feb 2011 14:02:05 -0400 From: ma...@tj.rr.gov.br To: pgbr-geral@listas.postgresql.org.br Subject: Re: [pgbr-geral] Operador varchar = int8 no postgreSQL 9 Em 28-02-2011 13:09, Flavio Henrique Araque Gurgel escreveu: Olá a todos. Ha alguns anos, migrei um sistema legado do MS SQLServer para PostgreSQL. Esse sistema faz consultas do tipo: SELECT * FROM organizacional.funcionario WHERE matricula = 989676; onde matricula é um varchar. Até a versão 8.1 (que utilizávamos aqui até o mês passado) o SGBD aceitava comparações varchar = int, bem como int = varchar. Depois de atualizarmos para versão 9.0.2 esta consulta passou a dar erro: Error: ERRO: operador não existe: character varying = integer SQLState: 42883 Tentei contornar o problema criando os operadores: CREATE OPERATOR = (PROCEDURE = fn_int8eqvarchar, LEFTARG = int8 , RIGHTARG = varchar) CREATE OPERATOR = (PROCEDURE = fn_varchareqint8, LEFTARG = varchar , RIGHTARG = int8) Mas tive um efeito colateral inadmissível. Comparações varchar = varchar passaram a dar erro: Error: ERRO: sintaxe de entrada é inválida para integer: P SQLState: 22P02 Alguma sugestão? Conserte sua aplicação. Ela é que está errada, não o banco de dados. Isso já foi discutido aqui e nos fóruns internacionais. Os desenvolvedores avisaram sobre isso nos release notes. A conversão automática de tipos foi removida a partir do PostgreSQL 8.3, ou seja, já faz tempinho. []s Flavio Gurgel ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Não tenho essa opção, e se for a única, vou ter que apelar para um downgrade. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Não é possível a conversão da coluna organizacional.funcionario.matricula de varchar para integer? Pelo que pude perceber da sua consulta só tem valores numéricos neste campo. Um abraço, Marçal de Lima hokama--mhok...@hotmail.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Operador varchar = int8 no postgreSQL 9
Não tenho essa opção, e se for a única, vou ter que apelar para um downgrade. O mundo não é perfeito, e se fosse não teria graça. Como desenvolvedor já me deparei com situações onde o software utilizado é antigo e sem manutenção, e os gerentes de projeto/TI da empresa não faziam questão de encontrar outra solução por um único motivo: custo. Para quem trabalha estritamente no mundo opensource e/ou para órgãos governamentais, é fácil - ou menos doloroso - corrigir a aplicação. No seu caso, como existe dependência da funcionalidade de autocasting, certamente a última versão que poderá utilizar é a 8.2. Eu administro uma base de dados nesta versão até hoje sem problemas, rodando um software de fórum chamado *jforum* que também tem esta particularidade. -- TIAGO J. ADAMI http://www.adamiworks.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Operador : ?
Pessoal, apenas por curiosidade, teria como utilizar o operador ? : em Pl/pgSQL ? Igual na linguagem C... Até onde eu sei, não é possível criar operador ternário com o CREATE OPERATOR Claro que isso é apenas facilidade, não uma necessidade. Caro Vinicius, Já passei pelo mesmo problema e resolvi criando uma função bem simples: create or replace function fc_iif(boolean, anyelement, anyelement) returns anyelement as $$ select case when $1 is true then $2 else $3 end; $$ language 'sql'; Dai basta vc usar: 1) Num Select select fc_iif( (tipopessoa='F'), 'FISICA', 'JURIDICA' ), codigo, nome from pessoa; 2) Numa PLpgsql: sTipoPessoa := fc_iif( (tipopessoa='F'), 'FISICA', 'JURIDICA' ); Uma funcao simples que emula um operador ternário... Espero ter ajudado. Cordialmente, -- Fabrízio de Royes Mello Blog sobre PostgreSQL: http://fabriziomello.blogspot.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Operador : ?
Fabrízio de Royes Mello escreveu: Uma funcao simples que emula um operador ternário... Legal cara, eu desconhecia o anyelement...bacana mesmo !! Obrigado. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] operador armazenado na variaval
Heloisa Fernanda escreveu: Estou precisando resolver a seguinte questão: CREATE OR REPLACE FUNCTION teste_regra() RETURNS void AS $BODY$ DECLARE valor1 integer=2; valor2 integer=3; testevarchar='='; -- como usar o operador armazenado na variavel BEGIN IF valor1 teste valor2 THEN RAISE NOTICE 'verdadeiro'; ELSE RAISE NOTICE 'falso'; END IF; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; Veja se atende: CREATE OR REPLACE FUNCTION teste_regra() RETURNS void AS $BODY$ DECLARE valor1 integer=2; valor2 integer=3; testevarchar='='; result boolean; BEGIN EXECUTE 'SELECT ' || valor1 || ' ' || teste || ' ' || valor2 || ';' INTO result; IF result THEN RAISE NOTICE 'verdadeiro'; ELSE RAISE NOTICE 'falso'; END IF; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; Osvaldo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] operador armazenado na variaval
Olá! Estou precisando resolver a seguinte questão: CREATE OR REPLACE FUNCTION teste_regra() RETURNS void AS $BODY$ DECLARE valor1 integer=2; valor2 integer=3; testevarchar='='; -- como usar o operador armazenado na variavel BEGIN IF valor1 teste valor2 THEN RAISE NOTICE 'verdadeiro'; ELSE RAISE NOTICE 'falso'; END IF; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; Agradeço, Heloisa Fernanda - Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento! ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral