Re: Correct/optimal DML query for application session management ?

From: Andy Colson <andy(at)squeakycode(dot)net>
To: Tim Smith <randomdev4+postgres(at)gmail(dot)com>
Cc: pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: Correct/optimal DML query for application session management ?
Date: 2015-01-06 20:10:31
Message-ID: 54AC4137.9050102@squeakycode.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 1/6/2015 1:56 PM, Tim Smith wrote:
> Hi Andy,
>
> Yeah, the table scan was what worried me.
>
> As for no indexes ? I just didn't put the "create index" statements
> in my post ... ;-)
>
> Tim
>
> On 6 January 2015 at 18:35, Andy Colson <andy(at)squeakycode(dot)net> wrote:
>> On 1/6/2015 12:02 PM, Tim Smith wrote:
>>>
>>> Hi,
>>>
>>> I'm probably being incredibly stupid and missing something incredibly
>>> simple but I've got a bit of query-writers block here !
>>>
>>> create table app_sessions(
>>> session_id char(64) unique not null,
>>> user_id char(32) unique not null,
>>> session_start bigint not null,
>>> session_lastactive bigint not null
>>> );
>>>
>>>
>>> The rules are :
>>> Enforced session timeout after 86400 seconds (1 day)
>>> Last active less than 1 hour ago.
>>>
>>> My idea to clean out stale sessions :
>>> delete from app_sessions where extract (epoch from
>>> now())-session_start>86400 or session_lastactive<=extract (epoch from
>>> now())-3600;
>>>
>>> But of course that's going to be a nasty query, so that's why I think
>>> I'm missing something and need a fresh pair of eyes (or a whole
>>> mailing list's worth of eyes !!).
>>>
>>> Thanks guys !
>>>
>>>
>>
>> I don't see any other way. Why do you think it'll be so nasty? Cuz it'll
>> table scan? You have no indexes so it doesn't matter what you write, it'll
>> have to scan all rows. How many rows do you expect to have? 500? 1000?
>> Table scan will be fine.
>>
>> If you wanted to make it more readable .. but work the same, you could use
>> timestamptz instead of bigint, and then write:
>>
>> where current_timestamp - '1 day'::interval < session_start
>>
>> -Andy
>>
>
>

Oh, more important, if its only gonna be 1000 rows or less, then I'd say
drop the indexes and let it table scan. I bet it'll be faster.

-Andy

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Alban Hertroys 2015-01-06 20:15:25 Re: Correct/optimal DML query for application session management ?
Previous Message Andy Colson 2015-01-06 20:08:33 Re: Correct/optimal DML query for application session management ?