Re: PL/PGSQL + inserts+updates+limit - Postgres 9.3

Поиск
Список
Период
Сортировка
От Patrick Baker
Тема Re: PL/PGSQL + inserts+updates+limit - Postgres 9.3
Дата
Msg-id CAJNY3it5P5tXPtUu0DfTa2CCmVw_-7qL3d53ScbcPc66fmFFAQ@mail.gmail.com
обсуждение исходный текст
Ответ на Re: PL/PGSQL + inserts+updates+limit - Postgres 9.3  (Patrick Baker <patrickbakerbr@gmail.com>)
Ответы Re: PL/PGSQL + inserts+updates+limit - Postgres 9.3  ("David G. Johnston" <david.g.johnston@gmail.com>)
Re: PL/PGSQL + inserts+updates+limit - Postgres 9.3  (Adrian Klaver <adrian.klaver@aklaver.com>)
Список pgsql-general
Hi guys,

  • The function works... All the data is updated as expected. However, when I call the function for the second time, it touches the rows that had already been touched by the previous call....

  • It triplicate ( LIMIT 3 ) the records.

Question:

How can I make the function to gets the next 3 rows and not use the same rows that have been used before?

Function updated:

CREATE or REPLACE FUNCTION function_data_1()
RETURNS SETOF bigint AS $$

declare       row record;

BEGIN

-- copying the data to the backup table (not the blobs)
-- Limiting in 5000 rows each call
FOR row IN EXECUTE '           SELECT                   t1.file_id           FROM                   table1 t1           JOIN                   table3 t3 ON t3.file_id = t1.file_id           ORDER BY 1 LIMIT 3 ' 
LOOP

-- Creating the backup table with the essential data
INSERT INTO table2 (note_id, size, file_id, full_path)   (           SELECT                   t1.note_id,                   t1.size,                   t1.file_id,                   t1.full_path           FROM                   table1 t1           JOIN                   table3 t3 ON t3.file_id = t1.file_id           WHERE                   t1.file_id = row.file_id   );

-- copying the blobs to the table above table2       UPDATE junk.table2 t2 SET data =       (           SELECT                   o1.data           FROM                   original_table1_b o1           JOIN                   table3 t3 ON t3.file_id = o1.file_id           WHERE                   t3.migrated = 0           AND                   t2.file_id = o1.file_id           AND                   o1.file_id = row.file_id       )       WHERE t2.file_id = row.file_id;

-- updating the migrated column from 0 to 1       UPDATE               table3 t2       SET               migrated = 1       WHERE               t2.file_id = row.file_id       AND               migrated = 0;

-- set the blobs as null       UPDATE               original_table1_b o1       SET               data = NULL       WHERE               o1.file_id = row.file_id;
END LOOP;

END

$$ language 'plpgsql';

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

Предыдущее
От: Michael Paquier
Дата:
Сообщение: Re: WAL's listing in pg_xlog by some sql query
Следующее
От: "David G. Johnston"
Дата:
Сообщение: Re: PL/PGSQL + inserts+updates+limit - Postgres 9.3