2016-12-14 3 views
0

Ich führe eine SQL-Abfrage unter Verwendung des Ausführungsformats aus, das erfordert, dass mehrere Variablen als Parameter übergeben werden. Hier meine Anfrage braucht viele Symbole wie: '%' and ','Postgresql: Mehr als 100 Parameter für die Abfrage des Formats

Daher meine Abfrage war so groß, dass es das Limit von 100 Parametern überschreitet. Also gibt es eine Möglichkeit, '%' and ',' in die Abfrage selbst aufzunehmen, anstatt sie als Parameter zu übergeben.

Abfrage:

execute format('CREATE MATERIALIZED VIEW %I AS 
     SELECT id, 
       (select count(*) from friends bob where (i.name ilike any (string_to_array(replace(concat(%L,bob.keywords,%L),%L,%L),%L)) or 
i.description ilike any (string_to_array(replace(concat(%L,bob.keywords,%L),%L,%L),%L)) or 
i.additional_info ilike any (string_to_array(replace(concat(%L,bob.keywords,%L),%L,%L),%L)) or 
i.eventful_category ilike any (string_to_array(replace(concat(%L,bob.keywords,%L),%L,%L),%L)) or 
i.other_category ilike any (string_to_array(replace(concat(%L,bob.keywords,%L),%L,%L),%L)))) as friend_bob 
from events i ','FrienView','%','%',',','%,%',',','%','%',',','%,%',',','%','%',',','%,%',',','%','%',',','%,%',',','%','%',',','%,%',',') 
+1

Wie und wo du bist Erstellen Sie Ihre Abfragezeichenfolgen? –

+0

@TimBiegeleisen Habe meine Frage mit der Abfrage aktualisiert. Dies ist nur der Teil der Abfrage, weiter wird es ähnliche Art von Abfrage enthalten, um mehr Spalten nach Bedarf zu erzeugen –

+0

Abfrage in MOUNT DOOM erstellt. –

Antwort

1

Per docs

The concat , concat_ws and format functions are variadic, so it is possible to pass the values to be concatenated or formatted as an array marked with the VARIADIC keyword

Sie können ARRAY verwenden, um die Einschränkung zu überwinden, zB: vorbereiten:

with n as (select generate_series(1,101,1) g) 
    select $$SELECT format('$$||string_agg('%s',',')||$$',$$||string_agg(g::text,',')||')' 
    from n;  

Lauf:

SELECT format('%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s',1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101); 

ERROR: cannot pass more than 100 arguments to a function

als Array:

SELECT format('%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s' 
,VARIADIC ARRAY[1, 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]); 

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101 (1 row)

Aber ich würde hier stoppen und denken - glauben Sie wirklich 100 Argumente übergeben wollen ..

Verwandte Themen