[Dovecot] quota dict play nice with existing tables

Timo Sirainen tss at iki.fi
Tue Sep 14 20:24:14 EEST 2010


On Tue, 2010-09-14 at 19:08 +0200, Miha Vrhovnik wrote:
> When removing/receiving new message and same in case of doveadm recalc. 
> SELECT with key..
>   if not found
>     INSERT
>   else
>     UPDATE

I don't think this kind of code exists anywhere? It's possible that
doveadm does a SELECT, but it's not to find out if the row exists or
not, it just wants to know what the current quota value is (although for
quota recalc that's probably pointless and could be optimized away).

The actual row updating code works with INSERT INTO .. ON DUPLICATE KEY
UPDATE .. with MySQL, and with INSERT+trigger with PostgreSQL.

> unless I'm missing something upper one could be optimized to
> UPDATE
>   if changed rows < 1 then
>    INSERT
> 
> which wouldn't require the SELECT and would also spare the trigger when using postresql.

The trigger is there to avoid race conditions:

1) two processes try to add the row at the same time
2) one process tries to update the row when another had just deleted it



More information about the dovecot mailing list