¿Greenplum admite SQL dinámico?
-
29-09-2020 - |
Pregunta
PostgreSQL implementa el execute ... using
opción para pasar parámetros a SQL dinámico y, hasta donde puedo decir, esta característica se introdujo en la versión 8.4.Estamos usando Greenplum, que es una bifurcación de PostgreSQL en la versión 8.2, por lo que no tiene esta característica.
¿Existe alguna otra forma de hacer lo mismo en Greenplum o PostgreSQL 8.2?
Solución
No puedo asegurarlo, pero hay una pista en el CREATE FUNCTION
documentación:
langname Nombre del idioma en el que se implementa la función.Puede ser SQL, C, interno o el nombre de un lenguaje de procedimiento definido por el usuario.Consulte CREAR IDIOMA para conocer los lenguajes de procedimiento admitidos en la base de datos Greenplum.
A su vez, el lugar referenciado dice
El lenguaje PL/pgSQL está instalado de forma predeterminada en la base de datos Greenplum.
Ahora el EXECUTE ... USING
es una característica de PL/pgSQL, por lo que la única pregunta es de qué versión de PostgreSQL proviene.La documentación apunta a 8.2, y de esta manera parece que no tienes suerte.
Me comuniqué con el soporte de Greenplum para obtener una respuesta definitiva, pero nunca obtuve una respuesta.
En cuanto a solucionar la falta de esa construcción, obviamente puede concatenar cualquier cadena SQL que desee y ejecutarla.Tenga cuidado de citar correctamente los valores pasados y evite la inyección SQL.
Otros consejos
Puede utilizar una solución alternativa utilizando una función almacenada mencionada por dezso:
CREATE OR REPLACE FUNCTION dynamic_query (table_name TEXT) RETURNS VOID AS $$
BEGIN
EXECUTE 'SELECT * FROM ' || table_name || ' WHERE column1 LIKE ''a_value''';
END;
$$ language plpgsql;