Problemas ao tentar converter um tipo de dados de coluna em pgAdmin de varchar para inteiro (estado SQL: 22P02)
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
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.