PostgreSQL "синтаксическая ошибка в конце ввода" после INSERT INTO с GraphQL и NodeJS - PullRequest
0 голосов
/ 01 марта 2019

Используя pg-promise для вставки пользователя в базу данных, вот так:

const { db } = require('../../utils/pgAdaptor');
const query = 'INSERT INTO "Users" (email, password, "createdAt", "updatedAt") VALUES';
    const values = [email, password, new Date(), new Date()];
    console.log(values) // [ 'test', 'test', '2019-03-01T05:08:34.523Z', '2019-03-01T05:08:34.523Z' ]
    return db
      .none(query, values)
      .then(res => res)
      .catch(err => err);

Я могу вставить строку самостоятельно, используя pgAdmin

INSERT INTO "Users" (email, password, "createdAt", "updatedAt") VALUES ('test', 'test', '2019-03-01T05:08:34.523Z', '2019-03-01T05:08:34.523Z');

Я пытался использовать db.one и я попробовал пару примеров из PostgreSQL Docs , но я получаю ошибку "message": "syntax error at end of input" из интерфейса GraphiQL в любом случае.Что мне здесь не хватает?Что не так с вводом точно?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

MySQL делает заявления, используя?В качестве параметра И PostgreSQL использует $ 1, $ 2 и т. д.

Теперь ваш текущий запрос

const query = `INSERT INTO "Users" 
              (email, password, "createdAt", "updatedAt") 
              VALUES`;

Вам необходимо преобразовать запрос в этот формат

const query = `INSERT INTO "Users" 
               (email, password, "createdAt", "updatedAt")
               VALUES 
               ($1, $2, $3, $4)`;

Теперь в вашем запросе становятся

db.Query(`INSERT INTO "Users" 
          (email, password, "createdAt", "updatedAt")
          VALUES 
          ($1, $2, $3, $4)`, 
          ['test', 'test', '2019-03-01T05:08:34.523Z','2019-03-01T05:08:34.523Z'])

Вы можете использовать строку вместо строки шаблона.Просто для уточнения синтаксиса.

0 голосов
/ 01 марта 2019

Вам нужно добавить заполнители, такие как $1, $2,… в ваш запрос, чтобы драйвер PostgreSQL теперь мог найти, куда и как вставить предоставленные вами значения.См. документацию pg модуля для получения более подробной информации.

Тогда это может выглядеть так:

INSERT INTO "Users" (email, password, "createdAt", "updatedAt") VALUES ($1, $2, $3, $4)

То, как вы его написали, вы на самом деле пытаетесьзапустите

INSERT INTO "Users" (email, password, "createdAt", "updatedAt") VALUES

, что, как говорится в сообщении об ошибке, является синтаксической ошибкой.

Кроме того: Что это за метод .none()?Я никогда не видел это, и документация для модуля pg также не упоминает об этом.С моей точки зрения это должно быть .query().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...