Re: SQL "pseudo-variables" for a view

From: "Sean Davis" <sdavis2(at)mail(dot)nih(dot)gov>
To: "Brian Hurt" <bhurt(at)janestcapital(dot)com>
Cc: pgsql-novice(at)postgresql(dot)org
Subject: Re: SQL "pseudo-variables" for a view
Date: 2008-07-10 15:32:07
Message-ID: 264855a00807100832y6bc92523u7ad5a10212609295@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-novice

On Thu, Jul 10, 2008 at 11:12 AM, Brian Hurt <bhurt(at)janestcapital(dot)com> wrote:
>
> A more generic-SQL question if I could.
>
> Say I have a table foo with a column insert_date of type DATE. What I'd
> like to do is define a view that works like this:
>
> CREATE OR REPLACE VIEW vw_foo AS
> SELECT
> my_date DATE,
> foo.*
> FROM
> foo
> WHERE
> foo.insert_date >= (my_date - '7 days'::interval)
> ;
>
> The idea here is that you'd select from the view with a query like:
> SELECT * FROM vw_foo WHERE my_date = some_date;
>
> my_date acts as a "pseudo-variable", where the query supplies the date.
>
> Now, I know the above doesn't work- and unfortunately, a stored procedure
> won't work either (which would have been my second choice)- the application
> demands a view.
> So the question is what's the best way to do this? One possibility I
> thought of is to have a second table, call it my_dates, which I populate
> with all "possible" dates, which I can link in. This table would be small
> (100 years on either side of today means only ~73,000 rows). The problem is
> that if I solve this for dates, I'll get told "you did it for dates- why
> can't you do it for integers or floats?"
> So is there a better way to do this?

I don't think that postgresql has parameterized views (correct me if I
am wrong). However, you could write something like:

CREATE VIEW myview AS ( SELECT f1, f2, f3 FROM mytable );
CREATE FUNCTION myfilter(text, text) RETURNS boolean AS ' select $1 =
$2' LANGUAGE SQL;

To use it, you would write:

SELECT * FROM myview WHERE myfilter(f3, 'paramvalue');

Of course, your myfilter function could be as complicated as you like.
The point is that you can still pass in a parameter and get back a
view of the corresponding data; you just can't pass the parameter
directly to the view as you propose.

Sean

In response to

Browse pgsql-novice by date

  From Date Subject
Next Message Wright, George 2008-07-10 15:47:01 function source
Previous Message Brian Hurt 2008-07-10 15:12:21 SQL "pseudo-variables" for a view