Цель состоит в том, чтобы адаптировать этот ответ для возврата массива вместо типа данных setof.
CREATE FUNCTION split_csvline(
line text, -- the input CSV string
delim_char char(1) = ',', -- can be also E'\t', ';', '|', etc.
quote_char char(1) = '"' -- field quotation
) RETURNS text[] AS $f$
import csv
row = csv.reader(
[line],
quotechar=quote_char,
delimiter=delim_char,
skipinitialspace=True,
escapechar='\\'
)
next(row)
$f$ IMMUTABLE language PLpythonU;
SELECT split_csvline('a,b'); -- empty!
РЕДАКТИРОВАТЬ
Заметки
Речь идет об «использовании Python с PostgreSQL».
Я использую PLpythonU, потому что сотрудники используют Python, а CSV сложен и требует надежного алгоритма (годы испытаний).
Не нужен обходной путь, потому что используется простой обходной путь:
CREATE FUNCTION split_csv_line(
text, char(1) DEFAULT ',', char(1) DEFAULT '"'
) RETURNS text[] AS $f$
SELECT x FROM split_csv($1,$2,$3) x LIMIT 1;
$f$ language SQL IMMUTABLE;
select regexp_split_to_array('a,b',',');
? - person Ben H   schedule 21.03.2017regexp_matches()
... - person Peter Krauss   schedule 21.03.2017'a,b'
- person Ben H   schedule 21.03.2017return
. ИМХО почти все процедурные языки требуют этого, если вы хотите что-то вернуть. - person pozs   schedule 21.03.2017