você está aqui: Home  → Arquivo de Mensagens

Como converter a coluna de uma tabela por outro tipo no PostgreSQL 8.3 ?

Colaboração: Rodrigo Rosa Fragoso

Data de Publicação: 23 de novembro de 2010

Pegunta simples certo? Bem, mas se os tipos de dados forem diferentes e a coluna estiver com os dados. Por exemplo, a tabela fx_Salario tem uma coluna denominada fx_codigoSalario do tipo varchar(10) e gostaria de modificar para inteiro?.

Esta pergunta poderia ser respondida da seguinte forma "Simples, abre o PgAdmin, vai em propriedades da tabela e faz a modificação...pronto !!! ou se preferir digite a seguinte instrução".

  ALTER TABLE fx_Salario ALTER COLUMN fx_codigoSalario TYPE integer.

Perfeito !!! Não !?!

O seguinte erro é gerado :

  column "fx_codigoSalario" cannot be cast to type "pg_catalog.int4"

A instrução não funcionou, pois a informações que não foram possíveis de conversão, neste caso, os caracteres (letras).

Para resolver isso e manter a integridade dos dados pode-se criar uma função que receba o dado que esta sendo convertido. Este dado será convertido em número se existir ou retorne NULL caso não seja possível à conversão.

Desta forma:

  CREATE OR REPLACE FUNCTION fx_ChartoInt(columnConvert character varying)
  RETURNS integer AS
  $BODY$
  SELECT CASE WHEN trim($1) SIMILAR TO '[0-9]+'
        THEN CAST(trim($1) AS integer)
    ELSE NULL END;
  $BODY$
  LANGUAGE 'sql' IMMUTABLE STRICT;

Feito a função, só é preciso fazer uma instrução SQL, que realize uma conversão de tipos de dados utilizando para isso a função criada. Neste caso o nome dela é fx_ChartoInt(columnConvert character varying) .

Instrução SQL

  ALTER TABLE fx_Salario ALTER COLUMN codigoSalario TYPE integer USING fx_ChartoInt(codigoSalario);

Pronto.. agora sim, é possível fazer a conversão de uma coluna do tipo CHAR(10) para Integer e o principal, garantindo a integridade dos dados.



Veja a relação completa dos artigos de Rodrigo Rosa Fragoso

 

 

Opinião dos Leitores

leandro
23 Nov 2010, 11:20
Tai mais uma dica super interessante, e muito util por sinal..
Alexandre Heitor Schmidt
23 Nov 2010, 08:24
Não esqueça de dar DROP do CAST depois de utiliza-lo. Assim você evita dores de cabeça no futuro e mantém a base de dados sem lixo.
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script