Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

428
Vistas
PostgreSQL: ¿cómo crear un rango numérico en mi propia función C?

Estoy escribiendo la función ac para hacer un tipo de rango en un rango flotante. Encuentro que PostgreSQL permite usar numrange(low, high) para crear un nunrange, pero no puedo encontrar la parte correspondiente en el código C. El único método que encuentro (espero que funcione) es

 TypeCacheEntry *cache=lookup_type_cache(3907,TYPECACHE_RANGE_INFO); RangeBound lower; lower.val = Float8GetDatum(b.zmin); lower.infinite = false; lower.inclusive = false; lower.lower = true; RangeBound upper; upper.val = Float8GetDatum(b.zmax); upper.infinite = false; upper.inclusive = false; upper.lower = true; return PointerGetDatum(range_serialize(cache, &lower,&upper,false));

Sin embargo, la solución parece fea ... ¿Alguien podría darme alguna instrucción sobre cómo devolver un rango numérico de una manera más hermosa?

Uso DirectFunctionCall así siguiendo las instrucciones de @Laurenz Albe

 Datum s1= DirectFunctionCall1(float8_numeric,Float8GetDatum(b.zmin)); Datum s2= DirectFunctionCall1(float8_numeric,Float8GetDatum(b.zmax)); return DirectFunctionCall2(range_constructor2,s1,s2);

Y lamentablemente obtuve un SIGSIEV en range_get_typcache

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Primero, encuentre el nombre de la función C para la versión de dos argumentos de numrange :

 SELECT prosrc FROM pg_proc WHERE proname = 'numrange' AND pronargs = 2; prosrc -------------------- range_constructor2 (1 row)

Ahora encuentra esa función en la fuente:

 > git grep range_constructor2 src/backend/commands/typecmds.c: static const char *const prosrc[2] = {"range_constructor2", src/backend/utils/adt/rangetypes.c:range_constructor2(PG_FUNCTION_ARGS) src/include/catalog/pg_proc.dat: proargtypes => 'int4 int4', prosrc => 'range_constructor2' }, src/include/catalog/pg_proc.dat: proargtypes => 'numeric numeric', prosrc => 'range_constructor2' }, src/include/catalog/pg_proc.dat: proargtypes => 'timestamp timestamp', prosrc => 'range_constructor2' }, src/include/catalog/pg_proc.dat: proargtypes => 'timestamptz timestamptz', prosrc => 'range_constructor2' }, src/include/catalog/pg_proc.dat: proargtypes => 'date date', prosrc => 'range_constructor2' }, src/include/catalog/pg_proc.dat: proargtypes => 'int8 int8', prosrc => 'range_constructor2' },

Entonces su función está en src/backend/utils/adt/rangetypes.c .

Debería poder llamarlo con DirectFunctionCall2 .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda