¿Debo utilizar Plpgsql para iterar a través de una tabla en lugar de usar SQL?
Tengo un trabajo que se ejecuta todas las noches para cargar cambios en una tabla temporal y aplicar esos cambios a la tabla principal.
CREATE TEMP TABLE IF NOT EXIST tmp AS SELECT * FROM mytable LIMIT 0;
<p>COPY tmp FROM PROGRAM '';</p>
<p>11 consultas SQL para actualizar 'mytable' basadas en datos de 'tmp'
```</p>
Tengo una gran cantidad de consultas para eliminar duplicados de tmp, actualizar valores en tmp, actualizar valores en la tabla principal e insertar nuevas filas en la tabla principal. ¿Es posible hacer un bucle sobre ambas tablas utilizando plpgsql en su lugar?
```sql
UPDATE mytable m
SET "Field" = t."Field" + 1
FROM tmp t
WHERE (t."ID" = m."ID");
En este ejemplo, es un simple cambio de valor de columna. En cambio, quiero realizar operaciones más complejas tanto en la tabla principal como en la tabla temporal.
EDICIÓN: aquí hay un pseudocódigo de lo que imagino.
LOOP tmp t, mytable m
BEGIN
-- operaciones en plpgsql incluyendo UPDATE, INSERT, DELETE
END
WHERE t.ID = m.ID;
davy.ai
Sí, es posible recorrer ambos tablas utilizando plpgsql. Puede usar un cursor para obtener los datos de la tabla temporal y luego realizar las operaciones requeridas en ambas tablas dentro de un bloque LOOP. Aquí tienes un ejemplo de cómo hacerlo:
Dentro del bloque LOOP, puedes acceder a los datos de la tabla temporal utilizando la variable
tmp_record
y a los datos de la tabla principal utilizando la sintaxis SQL estándar. Puedes realizar cualquier operación compleja en ambas tablas dentro de este bloque.