diff --git a/src/api/tables.ts b/src/api/tables.ts index 668ea359..f2f9af51 100644 --- a/src/api/tables.ts +++ b/src/api/tables.ts @@ -122,12 +122,12 @@ router.delete('/:id', async (req, res) => { const getTablesSql = (sqlTemplates) => { const { columns, grants, policies, primary_keys, relationships, tables } = sqlTemplates return ` - WITH tables AS ( ${tables} ), - columns AS ( ${columns} ), - grants AS ( ${grants} ), - policies AS ( ${policies} ), - primary_keys AS ( ${primary_keys} ), - relationships AS ( ${relationships} ) + WITH tables AS MATERIALIZED ( ${tables} ), + columns AS MATERIALIZED ( ${columns} ), + grants AS MATERIALIZED ( ${grants} ), + policies AS MATERIALIZED ( ${policies} ), + primary_keys AS MATERIALIZED ( ${primary_keys} ), + relationships AS MATERIALIZED ( ${relationships} ) SELECT *, ${coalesceRowsToArray('columns', 'SELECT * FROM columns WHERE columns.table_id = tables.id')}, diff --git a/src/lib/helpers.ts b/src/lib/helpers.ts index e1bf75b7..69e7a96b 100644 --- a/src/lib/helpers.ts +++ b/src/lib/helpers.ts @@ -1,4 +1,5 @@ export const coalesceRowsToArray = (source: string, joinQuery: string) => { + // Note that array_to_json(array_agg(row_to_json())) seems to perform better than json_agg return ` COALESCE( (