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?

Foi útil?

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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a dba.stackexchange
scroll top