I want to UPDATE
several rows in the table myTable
(335379 rows).
CREATE OR REPLACE FUNCTION costs_f(
someFloat float) RETURNS void AS
$$
BEGIN
UPDATE ways
SET cost_time = CASE WHEN $1 = -1.0 THEN -1 ELSE anotherFloat * $1 END
FROM (SELECT w.gid AS id,
mc.name,
w.someCosts
FROM myTable mt
JOIN myClasses mc
ON mt.class_id = mc.class_id) AS tempTable
WHERE gid = id AND tempTable.name_name = $2;
END
$$
language 'plpgsql';
This function is then called in another function
CREATE OR REPLACE FUNCTION update_costs_f(
someFloat float) RETURNS void AS
$$
DECLARE
someArr varchar[] := ARRAY['a', 'b', 'c', 'd',
'e', 'f', 'g', 'h', 'i',
'j', 'k', 'l',
'm', 'n', 'o', 'p',
'q', 'r', 's', 't', 'ul', 'v'];
i text;
BEGIN
FOREACH i IN ARRAY someArr LOOP
PERFORM costs_f($1, i);
END LOOP;
END
$$
language 'plpgsql';
Then I do
SELECT update_costs_f(10.0);
However, that takes very very long! Is there a way to improve speed?
*Note: This code is abstracted. In the second function there are more ForEach
loop. I have several arrays.