PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Django. PostgreSQL. regexp_split_to_table non funziona

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 .