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
|