This is a more complicated example with nested composite types.
# connect conn = pq_connect (setdbopts ("dbname", "test")); # create a first composite type, consisting of a boolean and an array of # booleans pq_exec_params (conn, "create type complex_bool_array_type as (b bool, ba bool[]);") # create a second composite type, consisting of a boolean and the first # composite type pq_exec_params (conn, "create type complex_complex_bool_array_type as (b bool, c complex_bool_array_type);") # create a table with one column, holding the second defined composite # type pq_exec_params (conn, "create table complex_complex_bool_array (a complex_complex_bool_array_type);") # to enable data exchange using the new types, update type infomation pq_update_types (conn); # construct a data element for an SQL array of booleans in Octave d_arr = cell2struct ({2; {true, false; true, true}}, {"ndims", "data"}) # construct a data element for the first defined composite type in # Octave d_c1 = {true; d_arr}; # construct a data element for the second defined composite type in # Octave d_c2 = {false; d_c1}; # insert the data element of the second composite type into the table; # note that in this case specification of the parameter type in # `param_types' is necessary pq_exec_params (conn, "insert into complex_complex_bool_array values ($1);", {d_c2}, setdbopts ("param_types", {"complex_complex_bool_array_type"})) # read contents of the table result = pq_exec_params (conn, "select * from complex_complex_bool_array"); # only for demonstration purpouses, verify that the read data matches # the element constructed in Octave; # for this, the field `lbounds' is deleted from the returned data # # note that the verification would not work if we had constructed the # data element with rows of cell-arrays instead of columns, which would # also have been possible rdata = result.data{1}; rdata{2}{2} = rmfield (rdata{2}{2}, "lbounds"); isequal (d_c2, rdata) # view returned column names result.columns # view returned type information result.types # cleanup pq_exec_params (conn, "drop table complex_complex_bool_array;") pq_exec_params (conn, "drop type complex_complex_bool_array_type;") pq_exec_params (conn, "drop type complex_bool_array_type;") pq_close (conn);