Я создаю веб-сервис, используя express.js и Sequelize с БД Postgres.

База данных содержит таблицу "страна" в схеме "схема1". В таблице «страна» есть поля «имя», «isoCode».

Создан исходный файл для вставки списка стран в таблицу «страна».

Исходный файл выглядит так:

'use strict';

module.exports = {
  up: function (queryInterface, Sequelize) {
    return queryInterface.bulkInsert(
        'country', 
        [
          {
            "name":"Afghanistan",
            "isoCode":"AF"
          },
          {
            "name":"Åland Islands",
            "isoCode":"AX"
          },
          {
            "name":"Albania",
            "isoCode":"AL"
          },
          {
            "name":"Algeria",
            "isoCode":"DZ"
          },
          {
            "name":"American Samoa",
            "isoCode":"AS"
          },
          {
            "name":"Andorra",
            "isoCode":"AD"
          }
        ], 
        {
            schema : 'schema1'
        }
    );
  },

  down: function (queryInterface, Sequelize) {

  }
};

При запуске seed я получаю эту ошибку:

    node_modules/sequelize-cli/bin/sequelize --url postgres://user:password@localhost:5432/database db:seed

    Sequelize [Node: 0.12.6, CLI: 2.0.0, ORM: 3.11.0, pg: ^4.4.2]

    Parsed url postgres://user:*****@localhost:5432/database        
    Starting 'db:seed'...
    Finished 'db:seed' after 165 ms
    == 20151029161319-Countries: migrating =======
    Unhandled rejection SequelizeDatabaseError: relation "country" does not exist
        at Query.formatError (node_modules/sequelize/lib/dialects/postgres/query.js:437:14)
        at null.<anonymous> (node_modules/sequelize/lib/dialects/postgres/query.js:112:19)
        at emit (events.js:107:17)
        at Query.handleError (node_modules/pg/lib/query.js:108:8)
        at null.<anonymous> (node_modules/pg/lib/client.js:171:26)
        at emit (events.js:107:17)
        at Socket.<anonymous> (node_modules/pg/lib/connection.js:109:12)
        at Socket.emit (events.js:107:17)
        at readableAddChunk (_stream_readable.js:163:16)
        at Socket.Readable.push (_stream_readable.js:126:10)
        at TCP.onread (net.js:538:20)

Я думаю, что застрял на этом. Буду признателен за любую предоставленную помощь / руководство и т. Д.

Спасибо за ваше время.

3
Alexandros Monastiriotis 29 Окт 2015 в 18:32

2 ответа

Лучший ответ

Я выполнил SQL-запрос на Postgres:

     ALTER ROLE <username> SET search_path TO schema1,public;

Как указано здесь: Постоянно установить путь схемы Postgresql

Затем снова успешно запустите сидер:

    node_modules/sequelize-cli/bin/sequelize --url postgres://user:password@localhost:5432/database db:seed

    Sequelize [Node: 0.12.6, CLI: 2.0.0, ORM: 3.11.0, pg: ^4.4.2]

    Parsed url postgres://user:*****@localhost:5432/database
    Using gulpfile node_modules/sequelize-cli/lib/gulpfile.js
    Starting 'db:seed'...
    Finished 'db:seed' after 558 ms
    == 20151029161319-Countries: migrating =======
    == 20151029161319-Countries: migrated (0.294s)

Спасибо @a_horse_with_no_name за информацию о search_path. Я бы хотел, чтобы библиотека sequelize могла справиться с этой ситуацией, или, может быть, я злоупотребляю ею.

Обновить : Открыл тикет на Github (https://github.com/sequelize/sequelize/ issues / 4778 # issuecomment-152566806) и решение довольно простое:

Вместо того, чтобы устанавливать только таблицу в качестве первого аргумента, установите

{tableName: 'country', schema: 'schema1'}

3
Community 23 Май 2017 в 12:00

Фактически вы можете указать схему и имя таблицы с помощью объекта, как это объясняется в этом выпуске Github:

'use strict';

module.exports = {
    up: function (queryInterface, Sequelize) {
        return queryInterface.bulkInsert(
            { tableName: 'account', schema: 'crm' },
            {
                name: 'Michael'
            },
            {}
        );
    },

    down: function (queryInterface, Sequelize) {
        return queryInterface.bulkDelete({ tableName: 'account', schema: 'crm' }, null, {});
    }
};
1
Sergio Flores 24 Сен 2019 в 22:51