Re: Use of 'now' constant datatype in view to take advantage of partitioned table

From: Patrick Dung <patrick_dkt(at)yahoo(dot)com(dot)hk>
To: Patrick Dung <patrick_dkt(at)yahoo(dot)com(dot)hk>, Pgsql-general General <pgsql-general(at)postgresql(dot)org>
Subject: Re: Use of 'now' constant datatype in view to take advantage of partitioned table
Date: 2014-08-21 09:29:55
Message-ID: 1408613395.32629.YahooMailNeo@web193504.mail.sg3.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi all,

I got a typo in last mail, below is the updated one, with changes in bold fonts.

The method is inspired by Date LastDay - PostgreSQL wiki

 
         
Date LastDay - PostgreSQL wiki
Snippets Date LastDay() Works with PostgreSQL Any version Written in SQL Depends on Nothing by Scott Bailey 'Artacus'
View on wiki.postgresql.org Preview by Yahoo
 

1. Create a function like:

CREATE OR REPLACE FUNCTION now_function_ts_notz()
  RETURNS timestamp without time zone AS
$BODY$
  SELECT (NOW())::timestamp without time zone;
$BODY$
  LANGUAGE sql IMMUTABLE STRICT
  COST 100;

2.

CREATE VIEW v_recent_food AS
 SELECT *
   FROM food
  WHERE food.post_timestamp >= (now_function_ts_notz() - '1 mon'::interval)::date
  AND food.post_timestamp <= now_function_ts_notz()::timestamp without time zone
  ORDER BY food.post_timestamp DESC
 LIMIT 30;

While running 'EXPLAIN ANALYZE select * from v_recent_items'
I found that it skipped the partition table food_2013p.
Is it a valid work around? Or there is other better or elegant way?

Thanks and regards,Patrick

On Thursday, August 21, 2014 4:01 PM, Patrick Dung <patrick_dkt(at)yahoo(dot)com(dot)hk> wrote:

An update, inspired by Date LastDay - PostgreSQL wiki

 
         
Date LastDay - PostgreSQL wiki
Snippets Date LastDay() Works with PostgreSQL Any version Written in SQL Depends on Nothing by Scott Bailey 'Artacus'
View on wiki.postgresql.org Preview by Yahoo
 

1. Create a function like:

CREATE OR REPLACE FUNCTION now_function_ts_notz()
  RETURNS timestamp without time zone AS
$BODY$
  SELECT (NOW())::timestamp without time zone;
$BODY$
  LANGUAGE sql IMMUTABLE STRICT
  COST 100;

2. Create my View like this:
CREATE OR REPLACE VIEW v_recent_items AS
 SELECT *
   FROM food
  WHERE food.post_timestamp >= (now_function_ts_notz() - '1 mon'::interval)::timestamp without time zone AND food.post_timestamp <= now()::timestamp without time zone
  ORDER BY food.post_timestamp DESC
 LIMIT 30;

While running 'EXPLAIN ANALYZE select * from v_recent_items'
I found that it skipped the partition table food_2013p.
Is it a valid work around? Or there is other better or elegant way?

Thanks and regards,
Patrick

On Thursday, August 21, 2014 3:21 PM, Patrick Dung <patrick_dkt(at)yahoo(dot)com(dot)hk> wrote:

Resent. As I could not see my mail in the mailing list after about two hours.

On Thursday, August 21, 2014 1:43 PM, Patrick Dung <patrick_dkt(at)yahoo(dot)com(dot)hk> wrote:

Hi Postgresql users,

I have a master table with two partition table (food_2013p, food_2014p).

I found that when I use SELECT + 'now' constant, constraint exclusion works, (it skipped the 2013 partition).

EXPLAIN ANALYZE
 SELECT *
   FROM food
 WHERE food.post_timestamp >= ('now'::date - interval '1 month')::date AND food.post_timestamp <= 'now'
  ORDER BY food.post_timestamp  DESC
 LIMIT 30;

But when I put the query inside view, 'now' is converted to the timestamp when I run the create view.
So the view becomes:
  WHERE food.post_timestamp >= ('2014-08-21'::date - '1 mon'::interval)::date AND food.post_timestamp <= '2014-08-21 13:38:29.642347'::timestamp without time zone

This is not dynamic.
When I use now(), the query will scan other partition tables. I know this is a restriction of partition on non-immutable function.

Would it be possible or a feature request to take advantage of the partition table with query like this?

Thanks and regards,
Patrick

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Patrick Dung 2014-08-21 09:36:24 Re: Use of 'now' constant datatype in view to take advantage of partitioned table
Previous Message Ken Tanzer 2014-08-21 08:26:46 Re: Use of 'now' constant datatype in view to take advantage of partitioned table