aboutsummaryrefslogtreecommitdiffstats
path: root/meta-openstack/recipes-devtools/python/python-ceilometer/0001-sqlalchemy-fix-grouping-for-postgresql-databases.patch
blob: 4472ad0ce4aa5a353f4ed779c539b5f0f784db6a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
From d64999f1eba3db1444f36214bf4be7b8eaffdcb1 Mon Sep 17 00:00:00 2001
From: Bruce Ashfield <bruce.ashfield@windriver.com>
Date: Mon, 7 Apr 2014 16:24:18 -0400
Subject: [PATCH] sqlalchemy: fix grouping for postgresql databases

To avoid horizon errors, and avoid the following query issue:

   ProgrammingError: (ProgrammingError) column "meter.unit" must appear in the GROUP BY clause or be used in an aggregate function

We need to add meter.unit as an explicit group_by attribute

Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
---
 ceilometer/storage/impl_sqlalchemy.py |   10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/ceilometer/storage/impl_sqlalchemy.py b/ceilometer/storage/impl_sqlalchemy.py
index 0e5df7008c5e..697f51136c37 100644
--- a/ceilometer/storage/impl_sqlalchemy.py
+++ b/ceilometer/storage/impl_sqlalchemy.py
@@ -674,8 +674,15 @@ class Connection(base.Connection):
             group_attributes = [getattr(models.Sample, g) for g in groupby]
             select.extend(group_attributes)
 
-        query = session.query(*select).filter(
-            models.Meter.id == models.Sample.meter_id)
+        # Group by Meter.unit for postgresql queries
+        # In mysql this doesn't change anything because one meter has one unit
+
+        # mysql:
+        # query = session.query(*select).filter(
+        #    models.Meter.id == models.Sample.meter_id)
+        # postgres:
+        query = session.query(*select).filter(
+            models.Meter.id == models.Sample.meter_id).group_by(models.Meter.unit)
 
         if groupby:
             query = query.group_by(*group_attributes)
-- 
1.7.10.4