/ / Problema de Greenplum: la función no se puede ejecutar en el segmento porque accede a la relación - postgresql, greenplum

Problema Greenplum: la función no se puede ejecutar en el segmento porque accede a la relación - postgresql, greenplum

Estoy usando una base de datos greenplum A continuación se muestra la definición de la función que solía ejecutar.

FUNCIÓN DE CREACIÓN O REEMPLAZO testfunc (IN id int, OUT tasa de doble precisión)

DEVOLUCIONES doble precisión AS

$ CUERPO $

empezar

seleccione cuenta (*) en tasa de ref_test_V

regreso;

fin;

$ CUERPO $

LENGUAJE plpgsql VOLÁTIL;

Y cuando llamo a esta función en la lista de selección, me lanza por debajo del error

Consulta: seleccione 1, testfunc (id) de ref_test

ERROR: XX000: la función no se puede ejecutar en el segmento porque tiene acceso a la relación "public.ref_test_v" (functions.c: 155) (seg25 slice1 *****. Com 1026 pid = 193132) (cdbdisp.c: 1326)

TIA

Respuestas

0 para la respuesta № 1

Esto no es compatible con Greenplum. Piense en lo que estaría haciendo también si fuera apoyado. Obtendría una fila de un segmento y luego haría un conteo (*) de sí mismo. La siguiente fila se recuperaría y nuevamente haría un conteo (*).

Una forma de SQL pura para hacer esto es:

with x as (select count(*) as total_count from ref_test_V)
select 1, x.total_count from ref_test, x;

Si no le gusta usar una expresión de tabla común, puede hacerlo con una subconsulta.

select 1, x.total_count
from   ref_test,
(select count(*) as total_count
from ref_test_V) as x;

0 para la respuesta № 2

Llame a la función de la tabla como a continuación.

select 1, (select testfunc(5)) from ref_test;