Re: Select for update

Поиск
Список
Период
Сортировка
От Havasvölgyi Ottó
Тема Re: Select for update
Дата
Msg-id 003b01c593c0$81b2a6a0$b800a8c0@OTTO
обсуждение исходный текст
Ответ на Rules vs Triggers  (Randall Perry <rgp@systame.com>)
Ответы Re: Select for update  (Michael Fuhr <mike@fuhr.org>)
Re: Select for update  (Bruno Wolff III <bruno@wolff.to>)
Список pgsql-general
Hi,

Oh, sorry.

CREATE TABLE pidtest (pid integer, szoveg text) WITHOUT OIDS;

INSERT INTO pidtest (pid, szoveg) VALUES (3, 'three');
INSERT INTO pidtest (pid, szoveg) VALUES (4, 'four');
INSERT INTO pidtest (pid, szoveg) VALUES (5, 'five');
INSERT INTO pidtest (pid, szoveg) VALUES (6, 'six');
INSERT INTO pidtest (pid, szoveg) VALUES (7, 'seven');

create function pidtest_del(_pid integer) returns void as $$
declare
 row pidtest;
begin
 perform pid from pidtest where pid>=_pid for update;
 delete from pidtest where pid=_pid;
 for row in select * from pidtest where pid>_pid order by pid loop
  update pidtest set pid=pid-1 where pid=row.pid;
 end loop;
 return;
end;
$$ language plpgslq;


This function deletes a row, and updates the pid field where pid is geater
than the deleted pid value, so that the gap caused by the deletion is not
present any more.
Sorry, now I cannot reproduce it, but yesterday I was suprised that the
szoveg field's contents in the locked records went away.

Best Regards,
Otto




----- Original Message -----
From: "Michael Fuhr" <mike@fuhr.org>
To: "Havasvölgyi Ottó" <h.otto@freemail.hu>
Cc: <pgsql-general@postgresql.org>
Sent: Thursday, July 28, 2005 2:02 PM
Subject: Re: [GENERAL] Select for update


> On Thu, Jul 28, 2005 at 01:22:31PM +0200, Havasvölgyi Ottó wrote:
>> Is it normal that when I select for update a record, but I don't select
>> all
>> the fields, that the contents of fields not selected will be deleted:
>>
>> create table pidtest(pid integer, szoveg text) without oids;
>>
>> select pid from pistest where pid>5 for update;
>>
>> After committing (autocommit), the contents of the szoveg field for the
>> locked rows will be erased.
>
> Could you provide a complete test case?  Works fine here:
>
> CREATE TABLE pidtest (pid integer, szoveg text) WITHOUT OIDS;
>
> INSERT INTO pidtest (pid, szoveg) VALUES (3, 'three');
> INSERT INTO pidtest (pid, szoveg) VALUES (4, 'four');
> INSERT INTO pidtest (pid, szoveg) VALUES (5, 'five');
> INSERT INTO pidtest (pid, szoveg) VALUES (6, 'six');
> INSERT INTO pidtest (pid, szoveg) VALUES (7, 'seven');
>
> SELECT pid FROM pidtest WHERE pid > 5 FOR UPDATE;
> pid
> -----
>   6
>   7
> (2 rows)
>
> SELECT * FROM pidtest;
> pid | szoveg
> -----+--------
>   3 | three
>   4 | four
>   5 | five
>   6 | six
>   7 | seven
> (5 rows)
>
> --
> Michael Fuhr
> http://www.fuhr.org/~mfuhr/
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: if posting/reading through Usenet, please send an appropriate
>       subscribe-nomail command to majordomo@postgresql.org so that your
>       message can get through to the mailing list cleanly
>
>



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

Предыдущее
От: "Joshua D. Drake"
Дата:
Сообщение: Re: [pgsql-advocacy] MySQL to PostgreSQL, was ENUM type
Следующее
От: Alvaro Herrera
Дата:
Сообщение: Re: Megabytes of stats saved after every connection