"синтаксическая ошибка в \" SET \ "или рядом с ней при создании пользователя с помощью узла с Postgresql - PullRequest
1 голос
/ 10 марта 2020

Я пытаюсь перевести мое старое приложение mysql на Postgresql, было очень трудно подключиться к серверу, но когда я думаю, что это сработало, это сообщение появляется при бессоннице. Сообщение Я пытался использовать разные методы, которые я нашел в Google, но они не работали для меня. Я думаю, что проблема в том, как я подключаюсь к серверу. Я новичок, используя postgresql.

const { Pool, Client } = require("pg")

const config = require("../config")

const connection = new Pool({
  host: config.postgresql.host,
  user: config.postgresql.user,
  password: config.postgresql.password,
  database: config.postgresql.database,
  port: "5432",
  ssl: true
})

function list(table) {
  return new Promise((resolve, reject) => {
    connection.query(`SELECT * FROM ${table}`, (err, data) => {
      if (err) return reject(err)
      resolve(data)
    })
  })
}

function get(table, id) {
  return new Promise((resolve, reject) => {
    connection.query(`SELECT * FROM ${table} WHERE id=${id}`, (err, data) => {
      if (err) return reject(err)
      resolve(data)
    })
  })
}

function insert(table, data) {
  return new Promise((resolve, reject) => {
    connection.query(`INSERT INTO ${table} SET ${data}`, (err, result) => {
      if (err) return reject(err)
      resolve(result)
    })
  })
}

function update(table, data) {
  return new Promise((resolve, reject) => {
    connection.query(
      `UPDATE ${table} SET ${data} WHERE id=${data.id}`,
      (err, result) => {
        if (err) return reject(err)
        resolve(result)
      }
    )
  })
}

const upsert = async (table, payload) =>
  new Promise((resolve, reject) => {
    connection.query(
      `INSERT INTO ${table} SET ${payload} ON DUPLICATE KEY UPDATE ${payload}`,
      (error, data) => {
        console.log("UPDATE DATA: ", data)
        if (error) {
          return reject(error)
        }
        resolve(data)
      }
    )
  })

function query(table, query, join) {
  let joinQuery = ""
  if (join) {
    const key = Object.keys(join)[0]
    const val = join[key]
    joinQuery = `JOIN ${key} ON ${table}.${val} = ${key}.id`
  }

  return new Promise((resolve, reject) => {
    connection.query(
      `SELECT * FROM ${table} ${joinQuery} WHERE ${table}.${query}`,
      (err, res) => {
        if (err) return reject(err)
        resolve(res[0] || null)
      }
    )
  })
}

module.exports = {
  list,
  get,
  upsert,
  query
}

1 Ответ

1 голос
/ 10 марта 2020

Неправильный запрос вставки. Пожалуйста, измените его на следующий синтаксис. Вы не можете использовать SET во вставке. SET следует использовать в update.

Неправильно:

connection.query(`INSERT INTO ${table} SET ${data}`, (err, result) 

Вставить синтаксис запроса:

INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)
VALUES (value1, value2, value3,...valueN);
...