0 Pregunta: ¿Cómo seleccionar un jsonb con una clave de texto concatenado?

pregunta creada en Wed, Apr 10, 2019 12:00 AM

Tengo un jsonb llamado attr con una clave en el formato this.is.a.x

  • Donde x puede haber muchas otras cadenas.

¿Por qué obtengo una devolución NULL para la siguiente consulta:

SELECT attr->>'this.is.a.'||x FROM test;

Pero si declaro una variable k como k := 'this.is.a.'||x, puedo obtener un resultado para la siguiente consulta:

SELECT attr->>k FROM test;

Tengo un DBFiddle que muestra esto pero daré un ejemplo aquí.

Configuración:

CREATE TABLE test
( id serial
, attr jsonb
);

CREATE FUNCTION key_test(x text)
RETURNS SETOF text
AS $$
DECLARE
    k text DEFAULT '1.'||x;
BEGIN
    RETURN QUERY
    SELECT attr->>k FROM test;
END;
$$  LANGUAGE plpgsql;

INSERT INTO test (attr)
VALUES (jsonb_build_object('1', 'one', '1.2', 'one.two'))
;

Prueba:

SELECT attr->>'1'       AS col1
     , attr->>'1.'||'2' AS col2
FROM test;

| col1     | col2     |
| -------- | -------- |
| one      |          |

SELECT *
FROM key_test('2');

| key_test |
| -------- |
| one.two  |

Actualización: Descubrí que puedo hacer esto con attr->>('1.'||'2') pero todavía me gustaría saber por qué. Supongo que es solo un mal análisis y lo que Postgres está haciendo en realidad es (attr->>'1.')||'2'

    
0
0 Respuestas                              0                         
fuente colocada aquí