PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Erro de sintaxe de entrada inválida para inteiro para um não inteiro?


Sua entrada falha com um erro de sintaxe no Construtor ARRAY antes mesmo de chegar à resolução de tipo de função - onde você receberá mais mensagens de erro devido a outras incompatibilidades de tipo depois de remover o construtor ARRAY que não deveria estar na chamada.

Sua solução é passar parâmetros separados de tipo correspondente , não uma matriz. O resto é apenas explicação do que vimos.

O que realmente aconteceu


Uma matriz só pode incluir valores do mesmo tipo, mas sua entrada mistura constantes numéricas com um literal de string não numérico , que não pode ser resolvido.

Se você quiser resolver para text[] (matriz de text ), você deve fornecer literais de string assim:
SELECT ARRAY['1004', '2', '1079412', 'WwLEA6XZ0'];

Ou um literal de matriz diretamente, assim:
SELECT '{1004, 2, 1079412, WwLEA6XZ0}'::text[];

Mas uma vez que você inicia um construtor ARRAY com constantes numéricas, somente tipos numéricos são permitidos para adicionar. Ou pelo menos literais de string com conteúdo que pode ser coagido para o mesmo tipo. Você poderia :
SELECT ARRAY[1004, 2, 1079412, '1'];

... resultando em int[] . Ou:
SELECT ARRAY[1004, 2, 1079412, 1.0];

Ou ainda:
SELECT ARRAY[1004, 2, 1079412.0, '1.0'];

... ambos resultando em numeric[] .

Mas ARRAY[1004, 2, 1079412, 'WwLEA6XZ0V'] é ilegal e com razão.

As regras exatas de resolução de tipo para construtores de array podem ser encontradas neste capítulo do manual:"Conversão de tipo" - "UNION, CASE e construções relacionadas" . Sua jornada termina em:

Como a string literal 'WwLEA6XZ0V' não pode ser convertido para integer .