From b8d50204dd77075bc2f5afcc07a021a8a67a6a93 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Wed, 27 Jan 2016 15:24:04 +0100 Subject: [PATCH] Avoid aggregation which causes out-of-memory crashes in PostgreSQL The use of multiple string_agg functions, even if applied to groups of one single record causes out of memory crashes in PG 9.3.4 for some (large) tables. --- scripts-available/CDB_Overviews.sql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 6a17574..ab2e924 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -463,7 +463,9 @@ BEGIN -- 'A', 'B', 'A', 'C', 'D' => 'A/B/C/...' -- Other ideas: if value is unique then use it, otherwise use something -- like '*' or '(varies)' or '(multiple values)', or NULL - RETURN 'CASE count(*) WHEN 1 THEN string_agg(' || qualified_column || ',''/'') ELSE ''*''' || ' END::' || column_type; + -- Using 'string_agg(' || qualified_column || ',''/'')' + -- here causes + RETURN 'CASE count(*) WHEN 1 THEN MIN(' || qualified_column || ') ELSE NULL END::' || column_type; ELSE RETURN 'CASE count(*) WHEN 1 THEN MIN(' || qualified_column || ') ELSE NULL END::' || column_type; END CASE;