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

226
Vistas
Actualice cada valor en una matriz en postgres json

En mi base de datos de postgres tengo json que se parece a esto:

 { "myArray": [ { "myValue": 1 }, { "myValue": 2 }, { "myValue": 3 } ] }

Ahora quiero cambiar el nombre de myValue a otherValue . ¡No puedo estar seguro de la longitud de la matriz! Preferiblemente, me gustaría usar algo como set_jsonb con un comodín como índice de matriz, pero eso no parece ser compatible. Entonces, ¿cuál es la mejor solución?

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

0

Tienes que descomponer un objeto jsonb completo, modificar elementos individuales y reconstruir el objeto.

La función personalizada será útil:

 create or replace function jsonb_change_keys_in_array(arr jsonb, old_key text, new_key text) returns jsonb language sql as $$ select jsonb_agg(case when value->old_key is null then value else value- old_key || jsonb_build_object(new_key, value->old_key) end) from jsonb_array_elements(arr) $$;

Usar:

 with my_table (id, data) as ( values(1, '{ "myArray": [ { "myValue": 1 }, { "myValue": 2 }, { "myValue": 3 } ] }'::jsonb) ) select id, jsonb_build_object( 'myArray', jsonb_change_keys_in_array(data->'myArray', 'myValue', 'otherValue') ) from my_table; id | jsonb_build_object ----+------------------------------------------------------------------------ 1 | {"myArray": [{"otherValue": 1}, {"otherValue": 2}, {"otherValue": 3}]} (1 row)
over 4 years ago · Santiago Trujillo Denunciar

0

El uso de funciones json es definitivamente el más elegante, pero puede arreglárselas usando el reemplazo de caracteres. Transmita el json (b) como texto, realice el reemplazo y luego vuelva a cambiarlo a json (b). En este ejemplo, incluí las comillas y los dos puntos para ayudar a que el texto reemplace el destino de las claves json sin conflicto con los valores.

 CREATE TABLE mytable ( id INT, data JSONB ); INSERT INTO mytable VALUES (1, '{"myArray": [{"myValue": 1},{"myValue": 2},{"myValue": 3}]}'); INSERT INTO mytable VALUES (2, '{"myArray": [{"myValue": 4},{"myValue": 5},{"myValue": 6}]}'); SELECT * FROM mytable; UPDATE mytable SET data = REPLACE(data :: TEXT, '"myValue":', '"otherValue":') :: JSONB; SELECT * FROM mytable;

http://sqlfiddle.com/#!17/1c28a/9/4

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