hello all,
 
I noticed that the optimizer expects one row when there is a condition on the field for which optimizer does not know the value based on statistics, e.g.
 
postgres=# create table t1 (a int, b int);
CREATE TABLE
postgres=# insert into t1 values (generate_series(1,1000),1);
INSERT 0 1000
and so on...
postgres=# insert into t1 values (generate_series(4001,5000),5);
INSERT 0 1000
postgres=# analyze t1;
ANALYZE
postgres=# explain select * from t1 where b=5;
                      QUERY PLAN
------------------------------------------------------
 Seq Scan on t1  (cost=0.00..85.50 rows=1000 width=8)
   Filter: (b = 5)
(2 rows)
 
postgres=# explain select * from t1 where b=6;
                    QUERY PLAN
---------------------------------------------------
 Seq Scan on t1  (cost=0.00..85.50 rows=1 width=8)
   Filter: (b = 6)
(2 rows)
 
do you know if there is a formula for such a cardinality based on the size of the table or is it always one row?
can you point to the source code location?
 
Thanks,
Igor