Re: in Pl/PgSQL, do commit every 5000 records
| От | Emi Lu |
|---|---|
| Тема | Re: in Pl/PgSQL, do commit every 5000 records |
| Дата | |
| Msg-id | 4411BD90.3010800@encs.concordia.ca обсуждение исходный текст |
| Ответ на | Re: in Pl/PgSQL, do commit every 5000 records ("Florian G. Pflug" <fgp@phlo.org>) |
| Ответы |
Re: in Pl/PgSQL, do commit every 5000 records
|
| Список | pgsql-general |
Florian G. Pflug wrote:
> Emi Lu wrote:
>
>> The example I have is:
>>
>> CREATE OR REPLACE function test() returns boolean AS $$
>> DECLARE
>> ... ...
>> counter INTEGER := 0;
>> BEGIN
>> ... ...
>> query_value := ' .....' ;
>> OPEN curs1 FOR EXECUTE query_value;
>> LOOP
>> FETCH curs1 INTO studid;
>> EXIT WHEN NOT FOUND;
>>
>> query_value := ' INSERT INTO ... ...';
>> EXECUTE query_value ;
>>
>> counter := counter + 1 ;
>> IF counter%5000 = 0 THEN
>> counter := 0;
>> COMMIT;
>> END IF;
>>
>> END LOOP;
>>
>>
>> CLOSE curs1; ...
>> END;
>
> Are you aware of the "insert into <table> (<field1>, ..., <fieldn>)
> select <val1>, .., <valn> from ...."
> command? It'd be much faster to use that it it's possible...
>
> greetings, Florian Pflug
It did faster. Thank you Florian. Could you hint me why "insert into ..
select " is faster than a cursor transaction please?
How about update?
Way1:
update tableA
set col1= X.col1, col2=X.col2, ... coln = X.coln
from table (select ... from ... where ..) AS X
where A.pk = X.pk ;
should be faster than
Way2:
open cursor:
fetch (select ... from ... where ... ) into xCol1, xCol2, ... xColn
update tableA
set col1 = xCol1, col2 =xCol2..., coln =xColn
where tableA.pkCols = xPkCols
right?
В списке pgsql-general по дате отправления: