La barra rovesciata è trattata come meta-carattere da Django e viene interpretata tra virgolette doppie. Quindi uno strato di E'\\s+')
viene rimosso prima che la stringa arrivi al server PostgreSQL, che vedrà E'\s+')
. La stringa di escape risulterà in 's+'
che a sua volta creerà regexp_split_to_table()
dividi le tue stringhe a qualsiasi numero di s
invece dello spazio non stampabile, che la classe di caratteri abbrevia \s
sta per nelle espressioni regolari.
Raddoppia le barre inverse nella stringa per ottenere ciò che volevi:E'\\\\s+')
:
"SELECT regexp_split_to_table(field_name, E'\\\\s+') FROM mytable LIMIT 20"
In alternativa, per evitare problemi con il significato speciale della barra rovesciata \
, puoi usare [[:space:]]
per denotare la stessa classe di caratteri:
"SELECT regexp_split_to_table(field_name, '[[:space:]]+') FROM mytable LIMIT 20"
Dettagli nel capitolo " Pattern Matching" nel manuale .