📜  postgres json - Javascript (1)

📅  最后修改于: 2023-12-03 15:33:44.255000             🧑  作者: Mango

Postgres JSON - Javascript

Postgres is a powerful relational database management system that supports the storage and querying of structured data. However, in recent years, more and more applications and systems require the ability to store and query unstructured data such as JSON. Luckily, Postgres has support for JSON data, and in this article, we will explore how to work with JSON data in Postgres using Javascript.

Prerequisites

Before we begin, it is assumed that you have the following:

  • A basic understanding of SQL and relational databases
  • A working installation of Postgres
  • A basic understanding of Javascript
  • A package manager like npm or yarn
Installing the Required Dependencies

To work with JSON data in Postgres using Javascript, we need to install the following dependencies:

  • pg - A PostgreSQL client for Node.js
  • sequelize - A promise-based ORM for Node.js that supports Postgres

To install these dependencies, open your terminal and run the following command:

npm install pg sequelize
Connecting to Postgres

We need to connect to the Postgres database using the pg module. The following code snippet shows how to make a connection to the database:

const { Client } = require('pg');

const client = new Client({
  host: 'localhost',
  port: 5432,
  database: 'mydatabase',
  user: 'myusername',
  password: 'mypassword',
});

client.connect();
Creating a Table with JSON Data

Now that we are connected to the database, let's create a table that can store JSON data. Before we create the table, we need to enable the pgcrypto extension, which provides functions for working with UUIDs (Universally Unique Identifiers). To enable the extension, run the following SQL command:

CREATE EXTENSION IF NOT EXISTS "pgcrypto";

The following code snippet shows how to create a table with a JSON column:

const { DataTypes } = require('sequelize');
const sequelize = new Sequelize({
  host: 'localhost',
  port: 5432,
  database: 'mydatabase',
  username: 'myusername',
  password: 'mypassword',
  dialect: 'postgres',
});

const MyModel = sequelize.define('MyModel', {
  id: {
    type: DataTypes.UUID,
    defaultValue: Sequelize.literal('gen_random_uuid()'),
    allowNull: false,
    primaryKey: true,
  },
  data: {
    type: DataTypes.JSON,
    allowNull: false,
  },
});

await MyModel.sync({ force: true });

In this example, we defined a model called MyModel with an id column of type UUID and a data column of type JSON.

Inserting JSON Data

Now that we have our table set up, let's insert some data. The following code snippet shows how to insert JSON data into the MyModel table:

const data = { name: 'John Doe', age: 30 };
const insertedRow = await MyModel.create({ data });
console.log(insertedRow.toJSON());

This code will insert a new row into the MyModel table with the data column set to the JSON data { name: 'John Doe', age: 30 }. The create() method returns the inserted row, which we then log to the console.

Updating JSON Data

If we want to update the JSON data in a row, we can simply update the data column using the update() method of the model. The following code snippet shows how to update the JSON data in a row:

const rowToUpdate = await MyModel.findOne({ where: { id: rowId } });
const updatedData = { name: 'Jane Doe', age: 35 };
const updatedRow = await rowToUpdate.update({ data: updatedData });
console.log(updatedRow.toJSON());

This code first finds the row we want to update using the findOne() method of the model. We then define the new JSON data we want to update with and call the update() method, passing in the new data. The update() method returns the updated row, which we then log to the console.

Querying JSON Data

To retrieve the JSON data from a single row, we can use the findOne() method of the model. The following code snippet shows how to retrieve JSON data from a single row:

const row = await MyModel.findOne({ where: { id: rowId } });
console.log(row.data);

This code will retrieve the data column from the row with the id rowId and log it to the console.

To query JSON data from multiple rows, we can use the findAll() method of the model. The following code snippet shows how to retrieve JSON data from multiple rows:

const rows = await MyModel.findAll({ where: { "data.age": { [Op.gt]: 30 } } });
console.log(rows.map(row => row.data));

This code will retrieve all the rows where the age property in the data column is greater than 30 and log them to the console.

Conclusion

In this article, we explored how to work with JSON data in Postgres using Javascript. We learned how to create a table with a JSON column, insert and update JSON data, and query JSON data from the database. With the help of the pg and sequelize modules, working with JSON data in Postgres is easy and can be seamlessly integrated into any Javascript application.