Re: SELECT MAX(c) FROM (SELECT ... FOR UPDATE) AS foo

Поиск
Список
Период
Сортировка
От Jean-Luc Lachance
Тема Re: SELECT MAX(c) FROM (SELECT ... FOR UPDATE) AS foo
Дата
Msg-id 41222A26.1080204@sympatico.ca
обсуждение исходный текст
Ответ на Re: SELECT MAX(c) FROM (SELECT ... FOR UPDATE) AS foo  (Markus Bertheau <twanger@bluetwanger.de>)
Список pgsql-sql
If your intent is to insert a new record with position incremented by 1, 
you should use a trigger. Look at the autoincrement thread from few days 
ago.



Markus Bertheau wrote:

> В Втр, 17.08.2004, в 16:12, Bruno Wolff III пишет:
> 
>>>SELECT MAX(position) FROM (SELECT position FROM classes WHERE name =
>>>'foo' FOR UPDATE OF classes) AS foo
>>>
>>>It's clear which rows should be locked here, I think.
>>
>>Even if it was allowed, it probably wouldn't be good enough because it won't
>>protect against newly inserted records.
> 
> 
> Can you detail an example where this wouldn't be good enough?
> 
> In a PL/pgSQL function I'm doing
> 
> PERFORM position FROM class_fields WHERE class = arg_class_name;
> INSERT INTO class_fields (class, field, position) VALUES
> (arg_class_name, arg_field_name, (SELECT MAX(position) FROM class_fields
> WHERE class = arg_class_name));
> 
> Is this unsafe?
> 
> The question initially arose because I wanted to do something similar to
> 
> SELECT INTO var_new_position MAX(position) FROM class_fields WHERE class
> = arg_class_name FOR UPDATE OF class_fields;
> 
> which didn't work.
> 
> Thanks
> 



В списке pgsql-sql по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: multi column foreign key for implicitly unique columns
Следующее
От: Bruno Wolff III
Дата:
Сообщение: Re: SELECT MAX(c) FROM (SELECT ... FOR UPDATE) AS foo