es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obteniendo y guardando datos en el campo JSON de Postgres.

Tengo la siguiente tabla en la Base de Datos PostgresSQL:

CREATE TABLE unit(
   id SERIAL PRIMARY KEY,
   unit_capabilities JSON,
);

Tengo la siguiente consulta de inserción:

INSERT INTO unit (unit_capabilities)
VALUES ('[{"type": "din", "on": 1, "off": 2}, {"type": "dou", "on": 3, "off": 4}]');

Estoy usando NodeJS con el paquete “pg” para consultar esos datos, pero me devuelven en el siguiente formato:

[{"type":"din","on":1,"off":2},{"type":"dou","on":3,"off":4}]

No puedo analizar esto en un objeto JSON. Estoy obteniendo el siguiente error:

error: invalid input syntax for type json

¿Cómo haría esto funcionar? ¿Cuál es la mejor manera de usar mi configuración (NodeJS y paquete PG) para almacenar y recuperar datos del campo JSON de PostgreSQL?

Gracias por su amable ayuda.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para que esto funcione, debes escapar correctamente las comillas en tu consulta INSERT. Puedes hacer esto utilizando consultas parametrizadas con marcadores de posición y pasando el objeto JSON como parámetro. Aquí tienes un ejemplo:

    const unitCapabilities = [
      { type: 'din', on: 1, off: 2 },
      { type: 'dou', on: 3, off: 4 },
    ];
    const query = {
      text: 'INSERT INTO unit (unit_capabilities) VALUES ($1)',
      values: [unitCapabilities],
    };
    
    // Luego utiliza la consulta con el paquete pg
    

    El uso de consultas parametrizadas con marcadores de posición es una forma más segura de pasar datos a tus consultas SQL, ya que evita posibles ataques de inyección SQL.

    Para recuperar datos del campo JSON, puedes utilizar el tipo de datos ‘json’ en PostgreSQL, lo que te permite consultar y manipular valores JSON como objetos JSON. Aquí tienes un ejemplo:

    const query = {
      text: 'SELECT unit_capabilities FROM unit WHERE id = $1',
      values: [1],
    };
    
    // Luego utiliza la consulta con el paquete pg para obtener el resultado
    

    También puedes utilizar funciones y operadores JSON en tus consultas SQL para extraer o modificar valores JSON, como -> para acceder a una clave específica en un objeto JSON:

    SELECT unit_capabilities -> 1 ->> 'type' AS type FROM unit WHERE id = 1;
    -- Devuelve 'din'
    

    En general, el uso del paquete pg con campos JSON de PostgreSQL es una forma poderosa de almacenar y manipular estructuras de datos complejas en tus aplicaciones NodeJS.

Comments are closed.