Вставьте jsonb в Postgres с узлом Postgres - ошибка синтаксиса - PullRequest
0 голосов
/ 23 февраля 2020

У меня возникают проблемы при сохранении jsonb при запросах на вставку, где Postgres иногда выдает синтаксические ошибки:

Например, при использовании JSON.stringify(data) такие данные не будут работать:

{
  "id": 1234,
  "name": "This isn\'t going to insert"
}

И это вставит без проблем:

{
  "id": 1234,
  "name": "This will insert"
}

Я хотя бы сузил, что ему не нравится какой-то синтаксис в строках (ie: \'). Есть ли известное дезинфицирующее средство для подготовки JSON таким образом перед сохранением вместо простого использования JSON.stringify(data)? Я немного новичок в Postgres + Node.js.

Для контекста запрос вставки SQL отформатирован так:

const _getActivityInsertQuery = data => {
  const chunks = [];
  data.forEach(it => {
    chunks.push(`('${it.id}'::bigint, '${JSON.stringify(it)}'::jsonb)`);
  });

  return (
    `INSERT INTO mytable (id, data)\n VALUES ${chunks.join(',\n')}\n` +
    `ON CONFLICT (id) DO UPDATE \n` +
    `SET data = EXCLUDED.data`
  );
};

const response = await pool.query(_getActivityInsertQuery(data));
...