O Greenplum oferece suporte a SQL dinâmico?
-
29-09-2020 - |
Pergunta
PostgreSQL implementa o execute ... using
opção para passar parâmetros para SQL dinâmico e, pelo que sei, esse recurso foi introduzido na versão 8.4.Estamos usando o Greenplum, que é um fork do PostgreSQL na versão 8.2, portanto não possui esse recurso.
Existe alguma outra maneira de fazer a mesma coisa no Greenplum ou no PostgreSQL 8.2?
Solução
Não posso dizer com certeza, mas há uma sugestão no CREATE FUNCTION
documentação:
langname O nome do idioma no qual a função é implementada.Pode ser SQL, C, interno ou o nome de uma linguagem processual definida pelo usuário.Consulte CREATE LANGUAGE para as linguagens procedurais suportadas no banco de dados Greenplum.
Por sua vez, o local referenciado diz
A linguagem PL/pgSQL é instalada por padrão no Greenplum Database.
Agora o EXECUTE ... USING
é um recurso PL/pgSQL, então a única questão é de qual versão do PostgreSQL ele vem.A documentação aponta para 8.2 - e assim parece que você está sem sorte.
Entrei em contato com o suporte do Greenplum para obter uma resposta definitiva, mas nunca obtive resposta.
Quanto a contornar a falta dessa construção, obviamente você pode concatenar qualquer string SQL desejada e executá-la.Tenha cuidado para citar corretamente os valores passados e evite injeção de SQL.
Outras dicas
Você pode usar uma solução alternativa usando uma função armazenada 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;