Re: Plsql Function with error: No space left on device.

Поиск
Список
Период
Сортировка
От Richard Huxton
Тема Re: Plsql Function with error: No space left on device.
Дата
Msg-id 005601c0fd60$db576740$1001a8c0@archonet.com
обсуждение исходный текст
Ответ на Plsql Function with error: No space left on device.  ("David M. Richter" <D.Richter@DKFZ-heidelberg.de>)
Список pgsql-sql
From: "David M. Richter" <D.Richter@DKFZ-heidelberg.de>

> I have wrote a function. If I call this function the following output
> appears:
>
> psql:restructure.sql:139: ERROR:  cannot extend image: No space left on
> device.
>         Check free disk space.
[snip]
> BEGIN
>         FOR psr_rec IN SELECT * FROM relseries_image000 LOOP
>                 UPDATE image
>                         SET seriesoid  = psr_rec.parentoid
>                         WHERE chilioid = psr_rec.childoid;
>                 i := i + 1;
>         END LOOP;
>         IF NOT FOUND THEN RETURN -1;
>                 ELSE RETURN i;
>         END IF;
> END;
>
> ' LANGUAGE 'plpgsql';
>
>
>
> I saw during the execute of the function that the Ram was fully used and
> also the swap space was also fully used.

> the table relseries_image000 has ca. 3 Millions of rows. Every row has 3
> columns.

You're probably taking up all the space because PG is trying to keep track
of 3 million separate operations inside the transaction. You can replace the
function with a single query using something like:

UPDATE image SET seriesoid = r.parentoid
FROM image i JOIN relseries r ON i.childoid=r.childoid;

This isn't standard SQL mind you.

- Richard Huxton



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

Предыдущее
От: DI Hasenöhrl
Дата:
Сообщение: Re: Difference between insert a tuple in a table by function and by datasheet
Следующее
От: Jan Wieck
Дата:
Сообщение: Re: What is a "tuple"