La soluzione JSON è molto elegante. Solo per divertimento, questa è una soluzione che utilizza regexp (molto più brutto):
WITH r AS (SELECT row('quotes, "commas",
and a line break".',null,null,'"fourth,field"')::text AS r)
--WITH r AS (SELECT row('',null,null,'')::text AS r)
--WITH r AS (SELECT row(0,1)::text AS r)
SELECT CASE WHEN r.r ~ '^\("",' THEN ''
WHEN r.r ~ '^\("' THEN regexp_replace(regexp_replace(regexp_replace(right(r.r, -2), '""', '\"', 'g'), '([^\\])",.*', '\1'), '\\"', '"', 'g')
ELSE (regexp_matches(right(r.r, -1), '^[^,]*'))[1] END
FROM r
Durante la conversione di una riga di testo, PostgreSQL usa la formattazione CSV citato. Non sono riuscito a trovare alcuno strumento per importare CSV tra virgolette in un array, quindi quanto sopra è una manipolazione di testo grezza tramite espressioni prevalentemente regolari. Forse qualcuno lo troverà utile!
fonte
2016-03-31 08:47:59
Il costruttore 'row' produce un record * * anonima. Puoi (ab) usare 'row_to_json' per lo scopo. Non è possibile indicizzarli con operatori di array perché non sono matrici. I campi possono essere diversi per tipo. In realtà, il supporto di PostgreSQL per i record anonimi è limitato e non è generalmente una buona idea affidarsi a loro. –