De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


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.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


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