Wprowadzanie kończy się niepowodzeniem z powodu błędu składni w Konstruktor ARRAY zanim jeszcze dojdziesz do rozwiązania typu funkcji - gdzie otrzymasz więcej komunikatów o błędach z powodu innych niezgodności typów po usunięciu konstruktora ARRAY, który w ogóle nie powinien znajdować się w wywołaniu.
Twoim rozwiązaniem jest przekazanie oddzielnych parametrów pasującego typu , nie tablica. Reszta to tylko wyjaśnienie tego, co widzieliśmy.
Co naprawdę się wydarzyło
Tablica może zawierać tylko wartości tego samego typu, ale miksy wejściowe stałe numeryczne z nienumerycznym literałem ciągu , których nie można rozwiązać.
Jeśli chcesz, aby rozwiązał się na text[]
(tablica text
), musisz podać literały łańcuchowe, takie jak:
SELECT ARRAY['1004', '2', '1079412', 'WwLEA6XZ0'];
Lub bezpośrednio literał tablicowy, na przykład:
SELECT '{1004, 2, 1079412, WwLEA6XZ0}'::text[];
Ale po uruchomieniu konstruktora ARRAY ze stałymi liczbowymi dozwolone jest dodawanie tylko typów liczbowych. Lub przynajmniej literały ciągów z zawartością, którą można przekonwertować na ten sam typ. możesz :
SELECT ARRAY[1004, 2, 1079412, '1'];
... w wyniku int[]
. Lub:
SELECT ARRAY[1004, 2, 1079412, 1.0];
Lub nawet:
SELECT ARRAY[1004, 2, 1079412.0, '1.0'];
... obie dają wynik numeric[]
.
Ale jest nielegalne i słusznie.ARRAY[1004, 2, 1079412, 'WwLEA6XZ0V']
Dokładne zasady rozwiązywania typów dla konstruktorów tablic można znaleźć w tym rozdziale podręcznika:"Konwersja typów" — "UNION, CASE i pokrewne konstrukcje" . Twoja podróż kończy się o:
Ponieważ literał ciągu 'WwLEA6XZ0V' nie można przekonwertować na integer
.