Eu tenho uma tabela abc, na qual um nome de coluna onde alguns dados são codificados e alguns não são codificados. Quando executo a consulta de decodificação, a exceção é encontrada. Como lidar com isso. Há um grande número de linhas nesta tabela.
create table abc
(
id serial primary key,
name varchar(500)
)
select decode(name,'base64') from abc;
ocorre uma exceção: estado SQL: 22023
Agora, como posso converter todos os dados não codificados em codificados? Ou como posso lidar com essa exceção.
Posso estar errado porque a pergunta é extremamente vaga, mas você pode tentar algo assim:
O PostgreSQL usa expressões regulares POSIX . Se tivéssemos uma expressão regular, poderíamos ver se a entrada correspondia. Em caso afirmativo, alimente-o para decodificar, caso contrário, devolva-o como está. A resposta desta pergunta nos fornece um tal regex,
Tenha em mente que a decodificação retorna
bytea
. Nós convertemos explicitamentename
para bytea aqui porque se não for Base64, precisamos ter certeza de retornar o mesmo tipo. Isso ficaria assim,Isso vai retornar
name
decodificado como Base64, se a entrada parece ser Base64.name
como é.Tente..
Agora lembre-se, essa ainda é a representação binária do texto e a base64 decodificada. Você pode produzir isso como texto usando
convert_from