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
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 |