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 № 1Esto 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;