> // check if entry already exists
> SELECT COUNT(*) FROM tablename WHERE [cond]
> ..
> if($count >0)
>   UPDATE
> else
>   INSERT
> 
> but this will double the hit to the database server, because 
> for every 
> operation I need to do SELECT COUNT(*) first. The data itself 
> is not a lot, 
> and the condition is not complex, but the hitting frequency is a lot.

Why not use plpgsql?

CREATE FUNCTION a_test(int4) RETURNS int AS '
DECLARE
        totest  int;
BEGIN
        SELECT INTO totest <ID> FROM <table> WHERE <ID> = $1;

        IF totest IS null THEN
                -- do insert.
                return 1;
        ELSE
                -- do update.
                return 0;
        END IF;
END;
' language 'plpgsql';

For efficiency make sure ID is a index... 



---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

               http://www.postgresql.org/docs/faqs/FAQ.html

Reply via email to