2016-07-14 7 views
0

Ich versuche, einen RegexMuster zu verwenden, um mit PostgreSQL passend 9.4:PostgreSQL 9.4 UPDATE ... FROM Fehler mit REGEX Operatoren

vorherigen Antworten, aber nichts ausgesehen hat durch ich Matches dieses spezielle Problem

finden select 'apple' ~ '^.*pp.*$' liefert 't' wie erwartet

update <table> set column = 'value' where name ~* '^.*pp.*$' funktioniert auch.

Aber:

update <table> set column = 'value' from <other_table> where name ~* '^.*pp.*$' erzeugt einen Fehler:

Das spezifische Beispiel:

update 
    members set 
    pattern = a.pattern 
    from 
    services a 
    where 
    organisation ~* '^.*' || replace(a.pattern, ' ', '.*') || '.*$'; 

ERROR: Argument von WHERE Typ boolean sein muss, nicht Text LINE Typ 1: .. .attern = a.pattern von services a wo organisation ...

Es scheint s Die Where-Klausel nach der FROM-Tabelle im Update erkennt oder verarbeitet den Regex-Operator nicht korrekt. Oder ebenso wahrscheinlich, bin ich Missverständnis der UPDATE ... FROM Syntax

Vielen Dank, wenn Sie

Antwort

1

können Sie helfen, Klammern um String-Ausdrücke fehlen. Diese Operatoren (~ und ||) haben dieselbe Priorität und werden dann von links ausgewertet.

 
postgres=# update foo set b = a where a ~ 'ab'; 
UPDATE 1 
postgres=# update foo set b = a where a ~ 'ab' || 'xxxx'; 
ERROR: argument of WHERE must be type boolean, not type text 
LINE 1: update foo set b = a where a ~ 'ab' || 'xxxx'; 
           ^
postgres=# update foo set b = a where a ~ ('ab' || 'xxxx'); 
UPDATE 0 
+0

Ausgezeichnet. Danke vielmals. Ich hatte vorher schon Klammern versucht, aber um die ganze Where-Klausel dh wo (Organisation ...) –

Verwandte Themen