Re: Need help with db script, and daily routines

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

In response to

Browse pgsql-general by date

  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?