L'input non riesce con un errore di sintassi in Costruttore ARRAY prima ancora di arrivare a risoluzione del tipo di funzione - dove riceverai più messaggi di errore a causa di altre mancate corrispondenze di tipo una volta rimosso il costruttore ARRAY che non dovrebbe essere affatto nella chiamata.
La tua soluzione è passare parametri separati di tipo corrispondente , non un array. Il resto è solo una spiegazione di ciò che abbiamo visto.
Cosa è successo davvero
Un array può includere solo valori dello stesso tipo, ma il tuo input mescola costanti numeriche con un stringa letterale , che non può essere risolto.
Se vuoi che si risolva in text[]
(matrice di text
), devi fornire stringhe letterali in questo modo:
SELECT ARRAY['1004', '2', '1079412', 'WwLEA6XZ0'];
O un array letterale direttamente, in questo modo:
SELECT '{1004, 2, 1079412, WwLEA6XZ0}'::text[];
Ma una volta avviato un costruttore ARRAY con costanti numeriche, solo i tipi numerici possono essere aggiunti. O almeno letterali stringa con contenuto che può essere forzato allo stesso tipo. Potresti :
SELECT ARRAY[1004, 2, 1079412, '1'];
... risultando in int[]
. Oppure:
SELECT ARRAY[1004, 2, 1079412, 1.0];
O anche:
SELECT ARRAY[1004, 2, 1079412.0, '1.0'];
... entrambi risultanti in numeric[]
.
Ma è illegale e giustamente.ARRAY[1004, 2, 1079412, 'WwLEA6XZ0V']
Le regole esatte della risoluzione dei tipi per i costruttori di array possono essere trovate in questo capitolo del manuale:"Conversione del tipo" - "UNION, CASE e costrutti correlati" . Il tuo viaggio termina alle:
Poiché la stringa letterale 'WwLEA6XZ0V' non può essere convertito in integer
.