Я использую Postgres 9.2 для генерации некоторых данных JSON. Для каждой вложенной таблицы я выполняю этот вложенный набор функций:
SELECT array_to_json(
coalesce(
array_agg(
row_to_json(foo)),
ARRAY[]::json[])
)
FROM foo
Эффект заключается в создании массива json, каждая строка которого является коллекцией json для строки. Объединение гарантирует, что я получу пустой массив, а не ноль, если таблица пуста. В большинстве случаев foo на самом деле является подзапросом, но я не думаю, что это имеет отношение к вопросу.
Я хочу создать функцию table_to_json_array(expression), чтобы она имела тот же эффект, что и выше:
SELECT table_to_json_array(foo) FROM foo
Мне нужно использовать эти партии, поэтому я планировал создать функцию Postgres, чтобы получить эффект от комбинации этих вызовов для очистки моих запросов. Глядя на документацию, кажется, что мне нужно создать агрегат, а не функцию для приема аргумента таблицы, но похоже, что мне нужно будет заново реализовать array_agg самостоятельно.
Я что-то пропустил (возможно, просто тип, который должна принимать функция)? Какие-либо предложения?