explain (analyze on, buffers on, verbose on, format :format)
select b from tt1 group by b;
set work_mem = '1MB';
-\echo ###### SetOp intersect, SbuqueryScan
+\echo ###### SetOp intersect, SubqueryScan
explain (analyze on, buffers on, verbose on, format :format)
select a from tt1 intersect select b from tt2 order by a;
\echo ###### Sorted SetOp, Sort on Disk
PASSING BY REF '<towns><town><name>Toronto</name></town><town><name>Ottawa</name></town></towns>'
COLUMNS name text);
+\echo ###### Incremental Sort
+explain (analyze on, buffers on, verbose on, format :format)
+ WITH x AS (SELECT i/100 + 1 AS a, i + 1 AS b FROM generate_series(0, 999) i)
+ SELECT * FROM (SELECT * FROM x ORDER BY a) s ORDER BY a, b LIMIT 31;
+
-- Named Tuplestore Scan -- requires auto_explain
DROP TABLE IF EXISTS e1 CASCADE;
CREATE TABLE e1 (a int, b int);
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-CREATE TRIGGER e1_t1 AFTER INSERT OR UPDATE ON e1
- REFERENCING NEW TABLE AS post OLD TABLE AS pre
+CREATE TRIGGER e1_t1 AFTER INSERT ON e1
+ REFERENCING NEW TABLE AS post
FOR EACH ROW EXECUTE PROCEDURE e1_t1();
+
INSERT INTO e1 VALUES (1, 1);
load 'auto_explain';
set client_min_messages to LOG;
set log_min_messages to FATAL; -- Inhibit LOG by auto_explain
\echo ###### Named Tuplestore Scan
+CREATE TRIGGER e1_t2 AFTER UPDATE ON e1
+ REFERENCING NEW TABLE AS post OLD TABLE AS pre
+ FOR EACH ROW EXECUTE PROCEDURE e1_t1();
UPDATE e1 SET a = a + 1;
set client_min_messages to DEFAULT;
set log_min_messages to DEFAULT;