If the spectra are represented as tables/recordets, like in my last posts on the topic, the question arises how to use a table as an argument to a function in PostgreSQL without creating a custom datatype or using temporary tables.
1. As one dimensional array of m/z values followed by the corresponding peak values. The array can then be cut in half and unnested inside the function into a set of records:
select unnest(sdarr[1:1]) as "m/z", unnest(sdarr[2:2]) as peak from ...;
2. As two dimensional array of m/z values and their corresponding peak values. The partial arrays can then be unnested inside the function into a set of records:
select unnest(tdarray[1:3]) as "m/z", unnest(tdarray[4:6]) as peak from ...;
3. As JSON of m/z values and their corresponfing peak values. The JSON can then be converted inside the function into a set of records:
select * from json_to_recordset( '[{"m/z":1.0,"peak":2.2},{"m/z":3.3,"peak":4.8}]') as x("m/z" double precision, peak double precision);
All statements above generate a recordset like:
m/z peak
1.0 2.2
3.3 4.8
... ...
In an application, I'd go with JSON, since it has the most understandable structure for a developer against this API and it does not require fiddling around with array support functions of the driver, e.g. like createArrayOf() in JDBC.
1. As one dimensional array of m/z values followed by the corresponding peak values. The array can then be cut in half and unnested inside the function into a set of records:
select unnest(sdarr[1:1]) as "m/z", unnest(sdarr[2:2]) as peak from ...;
2. As two dimensional array of m/z values and their corresponding peak values. The partial arrays can then be unnested inside the function into a set of records:
select unnest(tdarray[1:3]) as "m/z", unnest(tdarray[4:6]) as peak from ...;
3. As JSON of m/z values and their corresponfing peak values. The JSON can then be converted inside the function into a set of records:
select * from json_to_recordset( '[{"m/z":1.0,"peak":2.2},{"m/z":3.3,"peak":4.8}]') as x("m/z" double precision, peak double precision);
All statements above generate a recordset like:
m/z peak
1.0 2.2
3.3 4.8
... ...
In an application, I'd go with JSON, since it has the most understandable structure for a developer against this API and it does not require fiddling around with array support functions of the driver, e.g. like createArrayOf() in JDBC.