Die Json-Lösung ist sehr elegant. Just for fun, ist dies eine Lösung mit regexp (viel hässlichen):
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
Wenn eine Zeile Umwandlung in Text, PostgreSQL verwendet zitierte CSV Formatierung. Ich konnte keine Werkzeuge finden, um CSV-Dateien in ein Array zu importieren, daher handelt es sich bei den oben genannten Methoden um grobe Textmanipulationen über meist reguläre Ausdrücke. Vielleicht findet jemand das nützlich!
Der 'row' Konstruktor erzeugt ein * anonymen Datensatz *. Sie können (ab) 'row_to_json' zu diesem Zweck verwenden. Sie können sie nicht mit Array-Operatoren indizieren, da sie keine Arrays sind. Die Felder können sich in ihrem Typ unterscheiden. Tatsächlich ist PostgreSQLs Unterstützung für anonyme Datensätze begrenzt, und es ist im Allgemeinen keine gute Idee, sich auf sie zu verlassen. –