A barra invertida é tratada como meta-caractere pelo Django e é interpretada entre aspas duplas. Então, uma camada de
E'\\s+')
é removido antes que a string chegue ao servidor PostgreSQL, que verá E'\s+')
. A string de escape resultará em 's+'
que por sua vez fará regexp_split_to_table()
divida suas strings em qualquer número de s
em vez de espaço não imprimível, que a abreviação da classe de caracteres \s
significa em expressões regulares. Dobre as barras invertidas na string para obter o que você pretendia:
E'\\\\s+')
:"SELECT regexp_split_to_table(field_name, E'\\\\s+') FROM mytable LIMIT 20"
Como alternativa, para evitar problemas com o significado especial da barra invertida
\
, você pode usar [[:space:]]
para denotar a mesma classe de caracteres:"SELECT regexp_split_to_table(field_name, '[[:space:]]+') FROM mytable LIMIT 20"
Detalhes no capítulo " Correspondência de padrões" no manual .