Re: Lock table in non-volatile functions - Mailing list pgsql-hackers

From Gaetano Mendola
Subject Re: Lock table in non-volatile functions
Date
Msg-id 45FB4196.9090709@bigfoot.com
Whole thread Raw
In response to Re: Lock table in non-volatile functions  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Lock table in non-volatile functions  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
Tom Lane wrote:
> Gaetano Mendola <mendola@bigfoot.com> writes:
>> I'm observing that is not allowed to LOCK a table in a
>> STABLE/IMMUTABLE function but at same time is allowed
>> a SELECT FOR UPDATE.
> 
> Really?  AFAICS, CommandIsReadOnly() will reject SELECT FOR UPDATE too.

kalman=# select version();                                                version
-------------------------------------------------------------------------------------------------------- PostgreSQL
8.2.3on i686-redhat-linux-gnu, compiled by GCC gcc (GCC) 
 
4.1.1 20070105 (Red Hat 4.1.1-51)
(1 row)

kalman=# CREATE TABLE test( a integer );
CREATE TABLE
kalman=# INSERT INTO test VALUES ( 1 );
INSERT 0 1
kalman=# CREATE OR REPLACE FUNCTION sp_test()
kalman-# RETURNS INTEGER AS $body$
kalman$# DECLARE
kalman$#  my_integer integer;
kalman$#  my_port_set RECORD;
kalman$# BEGIN
kalman$#  FOR my_port_set IN
kalman$#      SELECT a
kalman$#      FROM test
kalman$#      FOR UPDATE
kalman$#  LOOP
kalman$#      my_integer = 0;
kalman$#  END LOOP;
kalman$# RETURN 0;
kalman$# END;
kalman$# $body$ language 'plpgsql'
kalman-# STABLE;
CREATE FUNCTION
kalman=# select sp_test(); sp_test
---------       0
(1 row)

BTW why forbid the lock in a non volatile function or (if you fix this) 
the SELECT FOR UPDATE ?

Regards
Gaetano Mendola


pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Adding a typmod field to Const et al
Next
From: Tom Lane
Date:
Subject: Re: Lock table in non-volatile functions