@@ -541,19 +541,43 @@ EXPLAIN (COSTS OFF)
541
541
-- XXX: Do we stuck into an unstable behavior of an error value?
542
542
-- Live with this variant of the test for some time.
543
543
SELECT
544
- num,
545
- to_char(error, '9.99EEEE')::text AS error
546
- FROM public.show_cardinality_errors()
547
- WHERE error > 0.;
548
- num | error
549
- -----+-----------
550
- 1 | 9.69e+02
551
- 2 | 1.15e+02
552
- 3 | 3.00e+01
553
- 4 | 3.00e+01
554
- 5 | 3.00e+01
555
- 6 | 1.33e+00
556
- (6 rows)
544
+ num, to_char(error, '9.99EEEE')::text AS error, query_text
545
+ FROM public.show_cardinality_errors(true) cef, aqo_query_texts aqt
546
+ WHERE aqt.query_hash = cef.id
547
+ ORDER BY (error, md5(query_text)) DESC;
548
+ num | error | query_text
549
+ -----+-----------+------------------------------------------------------------------------------------------------
550
+ 1 | 1.15e+02 | SELECT count(*) FROM t WHERE x < 3 AND mod(x,3) = 1;
551
+ 3 | 3.00e+01 | SELECT count(*) FROM (SELECT count(*) FROM t1 GROUP BY (x,y)) AS q1;
552
+ 4 | 3.00e+01 | SELECT count(*) FROM (SELECT x, y FROM t1 GROUP BY GROUPING SETS ((x,y), (x), (y), ())) AS q1;
553
+ 2 | 3.00e+01 | SELECT count(*) FROM (SELECT count(*) FROM t1 GROUP BY (x,x*y)) AS q1;
554
+ 5 | 1.33e+00 | SELECT count(*) FROM (SELECT * FROM t GROUP BY (x) HAVING x > 3) AS q1;
555
+ 11 | 0.00e+00 | SELECT * FROM +
556
+ | | (SELECT * FROM t WHERE x < 0) AS t0 +
557
+ | | JOIN +
558
+ | | (SELECT * FROM t WHERE x > 20) AS t1 +
559
+ | | USING(x);
560
+ 10 | 0.00e+00 | SELECT count(*) FROM t WHERE x = (SELECT avg(x) FROM t t0 WHERE t0.x = t.x);
561
+ 12 | 0.00e+00 | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) +
562
+ | | SELECT count(*) FROM t WHERE +
563
+ | | x = (SELECT avg(x) FROM t t0 WHERE t0.x = t.x + 21) OR +
564
+ | | x IN (SELECT avg(x) FROM t t0 WHERE t0.x = t.x + 21);
565
+ 8 | 0.00e+00 | SELECT count(*) FROM ( +
566
+ | | SELECT count(*) AS x FROM ( +
567
+ | | SELECT count(*) FROM t1 GROUP BY (x,y) +
568
+ | | ) AS q1 +
569
+ | | ) AS q2 +
570
+ | | WHERE q2.x > 1;
571
+ 9 | 0.00e+00 | SELECT count(*) FROM t WHERE x = (SELECT avg(x) FROM t WHERE x = 1);
572
+ 6 | 0.00e+00 | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) +
573
+ | | SELECT count(*) FROM t WHERE (SELECT avg(x) FROM t t0 WHERE t0.x = t.x) = +
574
+ | | (SELECT avg(x) FROM t t0 WHERE t0.x = t.x);
575
+ 7 | 0.00e+00 | SELECT count(*) FROM +
576
+ | | (SELECT * FROM t WHERE x % 3 < (SELECT avg(x) FROM t t0 WHERE t0.x = t.x)) AS q1 +
577
+ | | JOIN +
578
+ | | (SELECT * FROM t WHERE x % 3 < (SELECT avg(x) FROM t t0 WHERE t0.x <> t.x)) AS q2 +
579
+ | | ON q1.x = q2.x+1;
580
+ (12 rows)
557
581
558
582
DROP TABLE t,t1 CASCADE;
559
583
SELECT public.clean_aqo_data();
@@ -563,30 +587,13 @@ NOTICE: Cleaning aqo_data records
563
587
564
588
(1 row)
565
589
566
- -- TODO: figure out with remaining queries in the ML storage.
590
+ -- Look for any remaining queries in the ML storage.
567
591
SELECT num, to_char(error, '9.99EEEE')::text AS error, query_text
568
- FROM public.show_cardinality_errors() cef, aqo_query_texts aqt
592
+ FROM public.show_cardinality_errors(true ) cef, aqo_query_texts aqt
569
593
WHERE aqt.query_hash = cef.id
570
594
ORDER BY (error, md5(query_text)) DESC;
571
- num | error | query_text
572
- -----+-----------+-------------------------------------------------------------------------------------------
573
- 1 | 9.69e+02 | SELECT str FROM expln(' +
574
- | | EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) +
575
- | | SELECT count(*) FROM +
576
- | | (SELECT * FROM t WHERE x % 3 < (SELECT avg(x) FROM t t0 WHERE t0.x = t.x)) AS q1 +
577
- | | JOIN +
578
- | | (SELECT * FROM t WHERE x % 3 < (SELECT avg(x) FROM t t0 WHERE t0.x <> t.x)) AS q2+
579
- | | ON q1.x = q2.x+1; +
580
- | | ') AS str WHERE str NOT LIKE '%Memory Usage%';
581
- 2 | 3.27e+02 | SELECT +
582
- | | num, +
583
- | | to_char(error, '9.99EEEE')::text AS error +
584
- | | FROM public.show_cardinality_errors() +
585
- | | WHERE error > 0.;
586
- 5 | 0.00e+00 | CREATE TABLE t AS SELECT (gs.* / 50) AS x FROM generate_series(1,1000) AS gs;
587
- 4 | 0.00e+00 | SELECT public.clean_aqo_data();
588
- 3 | 0.00e+00 | CREATE TABLE t1 AS SELECT mod(gs,10) AS x, mod(gs+1,10) AS y +
589
- | | FROM generate_series(1,1000) AS gs;
590
- (5 rows)
595
+ num | error | query_text
596
+ -----+-------+------------
597
+ (0 rows)
591
598
592
599
DROP EXTENSION aqo;
0 commit comments