SequelizeDatabaseError: столбец \ "functionCode \" не существует, когда он существует - PullRequest
0 голосов
/ 22 июня 2019

Я пишу простой код NodeJS для чтения / записи из / в postgres, используя sequelize. Мой код работает для одной таблицы, но похожий код ломается при проверке другой несвязанной таблицы. Я также нахожу сбивающую с толку ошибку, как видно из трассировки стека ошибок.

Я отключил столбцы меток времени и выполнил SQL на CLI, с которым возникла проблема с секвелированием.

Во-первых, это модель в /tfnMetadata.js

'use strict';

/**
 * Model definition: See http://docs.sequelizejs.com/manual/models-definition.html
 *  See DataTypes: http://docs.sequelizejs.com/manual/data-types.html
 * @param
 * @returns {*} records.
 */
module.exports = (sequelize, DataTypes) => {
  const tfnMetadata = sequelize.define('tfn_metadata', {
    did: {
      type: DataTypes.STRING, primaryKey: true, allowNull: false,
    },
    dnis: {
      type: DataTypes.STRING,
    },
    functionCode: {
      type: DataTypes.STRING,
    },
    country: {
      type: DataTypes.STRING,
    },
    language: {
      type: DataTypes.STRING,
    },
    coBrand: {
      type: DataTypes.BOOLEAN,
    },
    collections: {
      type: DataTypes.BOOLEAN,
    },
    smallBusiness: {
      type: DataTypes.BOOLEAN,
    },
    welcomeMessageCode: {
      type: DataTypes.STRING,
    },
    welcomeMessage: {
      type: DataTypes.TEXT,
    },
    referenceKey: {
      type: DataTypes.STRING,
    },
    partner: {
      type: DataTypes.STRING,
    },
  }, { timestamps: false, tableName: 'tfn_metadata' });
  tfnMetadata.sync({ alter: true });
  return tfnMetadata;
};

Соответствующая схема таблицы в psql:

       Column       |          Type          | Nullable | 
--------------------+------------------------+----------+
 did                | character varying(15)  | not null |
 dnis               | character varying(15)  |          |
 functioncode       | character varying(20)  |          |
 country            | character varying(25)  |          |
 language           | character varying(20)  |          |
 cobrand            | boolean                |          |
 collections        | boolean                |          |
 smallbusiness      | boolean                |          |
 welcomemessagecode | text                   |          |
 welcomemessage     | character varying(200) |          |
 referencekey       | character varying(50)  |          |
 partner            | character varying(50)

Затем имеется стандартный код NodeJS (./models/index), который считывает файлы определения модели для импорта моделей. Редактировать - это единственный код, который я не предоставил, но он почти такой же, как здесь: https://sequelize.readthedocs.io/en/1.7.0/articles/express/

Запрос выполняется в файле query.js с использованием следующей функции:

const models = require('./models/index');

const getByPk = async (didNumber) => {
  try {
    const record = await models.tfnMetadata.findByPk(didNumber.toString());
    logger.info('Query.getByPk() Returned the record from db.', record);
    return record.dataValues;
  } catch (err) {
    logger.error('Query.getByPk() failed:', err);
    throw err;
  }
};

Приведенный выше код вызывается в client.js as-


const query = require('../../src/clients/pg/query');
const tfnData = await query.getByPk(did);


Но с ошибкой -

Query.getByPk() Request to get record for did=111 undefined
Query.getByPk() failed: {
  "name": "SequelizeDatabaseError",
  "parent": {
    "name": "error",
    "length": 184,
    "severity": "ERROR",
    "code": "42703",
    "hint": "Perhaps you meant to reference the column \"tfn_metadata.functioncode\".",
    "position": "23",
    "file": "parse_relation.c",
    "line": "3294",
    "routine": "errorMissingColumn",
    "sql": "SELECT \"did\", \"dnis\", \"functionCode\", \"country\", \"language\", \"coBrand\", \"collections\", \"smallBusiness\", \"welcomeMessageCode\", \"welcomeMessage\", \"referenceKey\", \"partner\" FROM \"tfn_metadata\" AS \"tfn_metadata\" WHERE \"tfn_metadata\".\"did\" = '111';"
  }
error: End - Error:
error: {
    "errorMessage": "column \"functionCode\" does not exist",
    "errorType": "SequelizeDatabaseError",
    "stackTrace": [
        "Query.formatError (/Users/.../node_modules/sequelize/lib/dialects/postgres/query.js:354:16)",
        "query.catch.err (/Users/.../node_modules/sequelize/lib/dialects/postgres/query.js:71:18)",
        "tryCatcher (/Users/.../node_modules/bluebird/js/release/util.js:16:23)",
        "Promise._settlePromiseFromHandler (/Users/.../node_modules/bluebird/js/release/promise.js:512:31)",

Код ошибки указывает на неопределенный столбец или пропущенный столбец functionCode, и подсказка спрашивает, должен ли я ссылаться на functionCode.

1 Ответ

1 голос
/ 22 июня 2019

Используйте нижние или нижние подчеркивания для имен полей таблицы, а не camelCase

...