From: | Richard Huxton <dev(at)archonet(dot)com> |
---|---|
To: | Peter Neu <peter(dot)neu(at)gmx(dot)net> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Need help with db script, and daily routines |
Date: | 2007-04-19 14:43:01 |
Message-ID: | 46277FF5.2000906@archonet.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Peter Neu wrote:
> Hello,
>
> I have 2 tables:
>
> In one I log the user name of a web site user like this:
>
> Name Access time
> "makost0001" " 2007-04-19 15:09:19"
> "makost0001" " 2007-04-19 15:09:19"
>
> In the other I have the user name his group and the expiry date of his
> account.
>
> Name Group Expiry date
> "makost0001" "book" "2013-04-05 09:41:25.357677"
>
> When the user accesses the web site for the first time I need to change the
> expiry date
> to < today > + 3 years.
>
> Problem is I need to do this on a regular basis once a day to avoid table
> locks. And also how do I tell the program to find the earliest access time
> of a user? Like shown above there a multiple
> entries for the same time & user because of the multiple requests. :o(
>
> Should I have a field in the first table like <ignore this entry forever>
> when an expiry date is already set?
>
> I'm pretty new to db programming and especially to PostgreSQL. Can somebody
> please help?
Once a day, just do something like this:
UPDATE user_expiry_dates
SET expiry_date = CURRENT_DATE + '3 years'::interval
WHERE user_name IN (
SELECT user_name
FROM access_logs
GROUP BY user_name
HAVING min(access_time) BETWEEN (CURRENT_DATE - '1 day'::interval)
AND CURRENT_DATE)
);
However, if your expiry date was null before the user has visited the
site you might find it more efficient to do:
UPDATE user_expiry_dates
SET expiry_date = CURRENT_DATE + '3 years'::interval
WHERE
expiry_date IS NULL
AND user_name IN (
SELECT user_name
FROM access_logs
HAVING access_time BETWEEN (CURRENT_DATE - '1 day'::interval) AND
CURRENT_DATE)
);
Here we don't care if this user has logged in 100 times before today, we
only update the expiry_date if it's NULL.
HTH
--
Richard Huxton
Archonet Ltd
From | Date | Subject | |
---|---|---|---|
Next Message | Tony Caduto | 2007-04-19 15:05:41 | Re: Postgres data/form entry tool |
Previous Message | Martin Gainty | 2007-04-19 14:17:44 | Re: How often do I need to reindex tables? |