Re: pgplsql SELECT INTO ... FOR UPDATE

From: "Berend Tober" <btober(at)computer(dot)org>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: pgplsql SELECT INTO ... FOR UPDATE
Date: 2004-12-15 13:14:56
Message-ID: 63223.216.238.112.88.1103116496.squirrel@216.238.112.88
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

> I'm trying to write a stored procedure in plpgsql that selects a row
> and possibly increments one of its fields. I thought I would do SELECT
> INTO my_record * FROM my_table FOR UPDATE WHERE ..., but apparently
> plpgsql doesn't like the FOR UPDATE in a stored procedure. Does plpgsql
> automatically lock any rows I read until the stored procedure exits?
> I'm just not sure how to get the functionality I'm looking for and not
> have to concern myself with concurrency.
>
> Example:
> create table t_test (x int, y int);
> create or replace function f_test(int) returns void as '
> declare r record;
> begin
> select into r *, oid from t_test -- FOR UPDATE
> where x = $1;
> if found then
> update t_test set y=y+1 where oid = r.oid;
> end if;
> return;
> end' language plpgsql;
> insert into t_test values (1,1);
> select f_test(1);
>

Would it be better to just write

update t_test set y=y+1 where x = $1;

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Bruno Wolff III 2004-12-15 14:44:25 Re: Performance suggestions?
Previous Message Ragnar Hafstað 2004-12-15 12:34:53 Re: pgplsql SELECT INTO ... FOR UPDATE