planner issue with constraint exclusion

Поиск
Список
Период
Сортировка
От Joshua D. Drake
Тема planner issue with constraint exclusion
Дата
Msg-id 1229369039.6678.192.camel@jd-laptop.pragmaticzealot.org
обсуждение исходный текст
Ответы Re: planner issue with constraint exclusion  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Hello,

I ran into this problem recently:

https://projects.commandprompt.com/public/replicator/pastebin?show=f1288d4d8%0D

Of the functions the only one that will use constraint_exclusion is the
one that explicitly passes the date value. I kind of get why except for
the one that uses EXECUTE. As EXECUTE has to replan the query, shouldn't
it be able to use constraint_exclusion?

(text also below for those that don't want to fire up a browser)

CREATE OR REPLACE FUNCTION test_search1() RETURNS integer AS $$ DECLARE   temp date;   tmp integer; BEGIN   SELECT
date(timehit)INTO temp FROM foo51 WHERE unit_id = 1 LIMIT 1;   SELECT l.unit_id FROM INTO tmp foo_stats_day lsd, foo51
lWHERE lsd.a_serv_id = l.unit_id AND lsd.a_serv_id = 1 AND day = date(timehit);   RETURN tmp; END
 
$$ LANGUAGE plpgsql STABLE;

CREATE OR REPLACE FUNCTION test_search2() RETURNS integer AS $$ DECLARE   temp date;   tmp integer; BEGIN   SELECT
date(timehit)INTO temp FROM foo51 WHERE unit_id = 1 LIMIT 1;   SELECT l.unit_id FROM INTO tmp foo_stats_day lsd, foo51
lWHERE lsd.a_serv_id = l.unit_id AND lsd.a_serv_id = 1 AND day = '2006-07-17';   RETURN tmp; END
 
$$ LANGUAGE plpgsql STABLE;

CREATE OR REPLACE FUNCTION test_search3() RETURNS integer AS $$ DECLARE   temp date;   tmp integer; BEGIN   SELECT
date(timehit)INTO temp FROM foo51 WHERE unit_id = 1 LIMIT 1;   SELECT l.unit_id FROM INTO tmp foo_stats_day lsd, foo51
lWHERE lsd.a_serv_id = l.unit_id AND lsd.a_serv_id = 1 AND day = temp;   RETURN tmp; END
 
$$ LANGUAGE plpgsql STABLE;

CREATE OR REPLACE FUNCTION test_search4() RETURNS integer AS $$
use strict;
use warnings;
my $sql = "SELECT date(timehit) AS timehit FROM foo51 WHERE unit_id = 1 LIMIT 1";
my $rv = spi_exec_query($sql);
return undef if( ! defined $rv->{rows}[0]->{'timehit'} );
my $date = $rv->{rows}[0]->{'timehit'};

$sql = "SELECT l.unit_id FROM foo_stats_day lsd, foo51 l WHERE lsd.a_serv_id = l.unit_id AND lsd.a_serv_id = 1 AND day
='$date'";
 
$rv = spi_exec_query($sql);

return undef if( ! defined $rv->{rows}[0]->{'unit_id'} );
my $unit_id = $rv->{rows}[0]->{'unit_id'};

return $unit_id;
$$ LANGUAGE 'plperlu' STABLE;

CREATE OR REPLACE FUNCTION test_search5() RETURNS integer AS $$ DECLARE   temp date;   tmp integer; BEGIN   SELECT
timehitINTO temp FROM foo51 WHERE unit_id = 1 LIMIT 1;   EXECUTE 'SELECT l.unit_id FROM foo_stats_day lsd, foo51 l
WHERElsd.a_serv_id = l.unit_id AND lsd.a_serv_id = 1 AND day = ''' || temp || '''';   RETURN 1; END
 
$$ LANGUAGE plpgsql STABLE;


-- 
PostgreSQL  Consulting, Development, Support, Training  503-667-4564 - http://www.commandprompt.com/  The PostgreSQL
Company,serving since 1997
 



В списке pgsql-hackers по дате отправления:

Предыдущее
От: "Kevin Grittner"
Дата:
Сообщение: Re: Mostly Harmless: Welcoming our C++ friends
Следующее
От: Tom Lane
Дата:
Сообщение: Re: planner issue with constraint exclusion