]> git.decadent.org.uk Git - dak.git/commitdiff
Go back to temporary tables.
authorAnsgar Burchardt <ansgar@43-1.org>
Fri, 11 May 2012 21:32:28 +0000 (23:32 +0200)
committerAnsgar Burchardt <ansgar@43-1.org>
Fri, 11 May 2012 21:35:52 +0000 (23:35 +0200)
Using with statements as done in c9f2c29661e8d95215966aa52228febe0fec50cf
requires more resources, so revert back to using temporary tables.

We keep the statements to create and fill the temporary table separate from the
SELECT query itself which should fix the original problem in a different way.

daklib/contents.py

index e808da6234b97194b6611a7e798dd185921e6425..81ce2226774c4766096d0e8ef1ff51f69816be30 100755 (executable)
@@ -65,15 +65,23 @@ class BinaryContentsWriter(object):
             'type':          self.overridetype.overridetype,
         }
 
-        sql = '''
-with
+        sql_create_temp = '''
+create temp table newest_binaries (
+    id integer primary key,
+    package text);
+
+create index newest_binaries_by_package on newest_binaries (package);
 
-newest_binaries as
-    (select distinct on (package) id, package from binaries
+insert into newest_binaries (id, package)
+    select distinct on (package) id, package from binaries
         where type = :type and
             (architecture = :arch_all or architecture = :arch) and
             id in (select bin from bin_associations where suite = :suite)
-        order by package, version desc),
+        order by package, version desc;'''
+        self.session.execute(sql_create_temp, params=params)
+
+        sql = '''
+with
 
 unique_override as
     (select o.package, s.section
@@ -165,16 +173,23 @@ class SourceContentsWriter(object):
             'component_id': self.component.component_id,
         }
 
-        sql = '''
-with
-  newest_sources as
-    (select distinct on (source) s.id, s.source from source s
+        sql_create_temp = '''
+create temp table newest_sources (
+    id integer primary key,
+    source text);
+
+create index sources_binaries_by_source on newest_sources (source);
+
+insert into newest_sources (id, source)
+    select distinct on (source) s.id, s.source from source s
         join files f on f.id = s.file
         join location l on l.id = f.location
         where s.id in (select source from src_associations where suite = :suite_id)
             and l.component = :component_id
-        order by source, version desc)
+        order by source, version desc;'''
+        self.session.execute(sql_create_temp, params=params)
 
+        sql = '''
 select sc.file, string_agg(s.source, ',' order by s.source) as pkglist
     from newest_sources s, src_contents sc
     where s.id = sc.source_id group by sc.file'''