=?ISO-8859-1?Q?Gunnlaugur_=DE=F3r_Briem?= <gunnlaugur@xxxxxxxxx> writes: > On Monday, September 19, 2011 3:59:30 AM UTC, Tom Lane wrote: >> Works for me in 8.4.8. Do you have constraint_exclusion set to ON? > I did try with constraint_exclusion set to on, though the docs suggest partition should be enough ("examine constraints only for ... UNION ALL subqueries") > Here's a minimal test case (which I should have supplied in the original post, sorry), tried just now in 8.4.8: > CREATE OR REPLACE VIEW v_heavy_view > AS SELECT (random()*1e5)::integer col > FROM generate_series(1, 1e6::integer); > CREATE OR REPLACE VIEW v_test_constraint_exclusion AS > SELECT col FROM v_heavy_view WHERE col < 3 > UNION ALL SELECT col FROM v_heavy_view WHERE col >= 3; > EXPLAIN SELECT * FROM v_test_constraint_exclusion WHERE col=2; Hmm. The reason this particular case doesn't work is that we don't apply relation_excluded_by_constraints() to functions-in-FROM. It's only used for plain-table RTEs, not subqueries, functions, etc. I suspect the complainant's real case involved an unflattenable subquery. Probably the rationale for that coding was that only plain tables could have CHECK constraints; but the portion of the logic that looks for mutually contradictory scan constraints could apply to non-table relations. Should we change the code to make such checks in these cases? The default behavior (with constraint_exclusion = partition) would still be to do nothing extra, but it would add planning expense when constraint_exclusion = on. regards, tom lane -- Sent via pgsql-performance mailing list (pgsql-performance@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-performance