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

678
Vistas
PG::UndefinedFunction: ERROR: la función array_append(anyarray, anyelement) no existe

En mi aplicación, tenemos algunos casos de prueba que están configurados con el flujo de trabajo de GitHub, aunque solo tengo cambios relacionados con el espacio en el archivo, pero sigo obteniendo el siguiente error. No estoy seguro de por qué mis especificaciones siguen fallando, antes funcionaba bien.

 An error occurred in a `before(:suite)` hook. Failure/Error: ActiveMedian.create_function ActiveRecord::StatementInvalid: PG::UndefinedFunction: ERROR: function array_append(anyarray, anyelement) does not exist : CREATE OR REPLACE FUNCTION median(anyarray) RETURNS float8 AS $$ WITH q AS ( SELECT val FROM unnest($***) val WHERE VAL IS NOT NULL ORDER BY *** ), cnt AS ( SELECT COUNT(*) AS c FROM q ) SELECT AVG(val)::float8 FROM ( SELECT val FROM q LIMIT 2 - MOD((SELECT c FROM cnt), 2) OFFSET GREATEST(CEIL((SELECT c FROM cnt) / 2.0) - ***,0) ) q2; $$ LANGUAGE sql IMMUTABLE; DROP AGGREGATE IF EXISTS median(numeric); DROP AGGREGATE IF EXISTS median(double precision); DROP AGGREGATE IF EXISTS median(anyelement); CREATE AGGREGATE median(anyelement) ( SFUNC=array_append, STYPE=anyarray, FINALFUNC=median, INITCOND='{}' ); # ./spec/rails_helper.rb:***54:in `seed' # ./spec/rails_helper.rb:***:in `block (2 levels) in <top (required)>' # ------------------ # --- Caused by: --- # PG::UndefinedFunction: # ERROR: function array_append(anyarray, anyelement) does not exist # ./spec/rails_helper.rb:***54:in `seed'

Hay ActiveMedian.create_function en spec/rails_helper.rb que podría causar el problema.

Cualquier pista o sugerencia sería apreciada

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

0

Está utilizando PostGreSQL 14, ¿no es así?

Porque con postgres 13 y anteriores, esto debería funcionar, vea el resultado de la prueba en dbfiddle .

Y confirmo que esto no funciona con postgres 14, vea el resultado de la prueba en dbfiddle .

El motivo se explica en el manual de PostGres 14 :

Los objetos definidos por el usuario que hacen referencia a determinadas funciones de matriz integradas junto con sus tipos de argumento deben volver a crearse (Tom Lane)

Específicamente, array_append() , array_prepend(), array_cat(), array_position(), array_positions(), array_remove(), array_replace() y width_bucket() solían tomar cualquier argumento de matriz pero ahora toman cualquier matriz compatible . Por lo tanto, los objetos definidos por el usuario, como los agregados y los operadores que hacen referencia a esas firmas de funciones de matriz, deben eliminarse antes de la actualización y volver a crearse una vez que se complete la actualización.

Para que funcione, puedes hacer en su lugar:

 CREATE OR REPLACE FUNCTION median(anycompatiblearray) RETURNS float8 AS $$ ... $$ LANGUAGE sql IMMUTABLE ; ... CREATE AGGREGATE median(anycompatible) ( SFUNC=array_append, STYPE=anycompatiblearray, FINALFUNC=median, INITCOND='{}' );
over 4 years ago · Santiago Trujillo Denunciar

0

Después de investigar un poco, resolví este problema cambiando la versión de la imagen de Postgres en GitHub de la siguiente manera.

archivo .github/workflows/build.yml

 services: postgres: image: postgres:13 ports: - 5432:5432
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