Váš vstup selže s chybou syntaxe v Konstruktor ARRAY než se vůbec dostanete k rozlišení typu funkce - kde po odstranění konstruktoru ARRAY, který by ve volání vůbec neměl být, budete dostávat další chybové zprávy kvůli jiným neshodám typů.
Řešením je předat samostatné parametry typu shody , ne pole. Zbytek je jen vysvětlení toho, co jsme viděli.
Co se skutečně stalo
Pole může obsahovat pouze hodnoty stejného typu, ale váš vstup míchá numerické konstanty s nenumerickým řetězcovým literálem , kterou nelze vyřešit.
Pokud chcete, aby byl přeložen na text[]
(pole text
), musíte zadat řetězcové literály takto:
SELECT ARRAY['1004', '2', '1079412', 'WwLEA6XZ0'];
Nebo přímo literál pole, například takto:
SELECT '{1004, 2, 1079412, WwLEA6XZ0}'::text[];
Jakmile však spustíte konstruktor ARRAY s číselnými konstantami, je legální přidat pouze číselné typy. Nebo alespoň řetězcové literály s obsahem, který lze přinutit ke stejnému typu. Mohli byste :
SELECT ARRAY[1004, 2, 1079412, '1'];
... výsledkem je int[]
. Nebo:
SELECT ARRAY[1004, 2, 1079412, 1.0];
Nebo dokonce:
SELECT ARRAY[1004, 2, 1079412.0, '1.0'];
... výsledkem obou je numeric[]
.
Ale je nezákonné a oprávněně.ARRAY[1004, 2, 1079412, 'WwLEA6XZ0V']
Přesná pravidla rozlišení typů pro konstruktory polí naleznete v této kapitole manuálu:"Konverze typu" - "UNION, CASE a související konstrukce" . Vaše cesta končí v:
Od řetězcového literálu 'WwLEA6XZ0V' nelze převést na integer
.