Search code examples
postgresqlpostgrest

PostgREST custom function flat array instead of key:value


I have this custom function querying a group by from a datalist. As a result I receive my unique query result but as nested objects [{substance: 'value'}]. It would prefer my response to be [value, value, value].

SQL:

create or replace function api.substances(substance_group text) returns table(substance text) 
as 'select api.emissions.substance from api.emissions where api.emissions.substance_group = $1 group by api.emissions.substance;'
language sql;

Response:

[
  {
    "substance": "Arseen"
  },
  {
    "substance": "Benzo[b]fluorantheen"
  },
  ...
]

Response required:

[
  "Arseen",
  "Benzo fluorantheen",
  ...
]

Solution

  • You'll need to return an array of text(text[]) instead of table(text) and use the array_agg function on the query. Like:

    create or replace function api.substances(substance_group text) returns text[] as $$
      select array_agg(api.emissions.substance)
      from api.emissions
      where api.emissions.substance_group = $1
      group by api.emissions.substance;
    $$ language sql;