PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Django. PostgreSQL. regexp_split_to_table não está funcionando


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 .