Problemas ao tentar converter um tipo de dados de coluna em pgAdmin de varchar para inteiro (estado SQL: 22P02)

Aug 16 2020

Estou simplesmente tentando converter uma coluna com character varyingtipo de dados integerexecutando este script Postgres:

ALTER TABLE tbl.test ALTER COLUMN "XX" TYPE integer USING ("XX"::integer);

e recebo este erro:

ERRO: sintaxe de entrada inválida para número inteiro: "XX" estado SQL: 22P02

Alguém pode me ajudar a resolver esse problema, por favor?

Respostas

3 MikeOrganek Aug 16 2020 at 12:21

Com base no erro que você obteve, parece que você possui alguns valores XXque não podem ser convertidos em integer. Você precisará corrigir esses valores antes de emitir o alter table.

Encontre seus valores incorretos com esta consulta:

select "XX" from tbl.test where "XX" !~ '^-{0,1}\d+$';

O !~é o NOTjogo regex. A regex ancora no início do valor com ^, representa um sinal de menos opcional com -{0,1}, que corresponde a zero ou um caractere de hífen e, a seguir, garante que os caracteres restantes até o final do valor sejam todos dígitos com \d+$.

Quaisquer valores XXque não correspondam a este padrão serão recuperados e você pode descobrir como lidar com eles atualizando a tabela ou modificando a usingparte de seu alter table.