2016-03-25 1 views
0

Я пытаюсь создать Sequelize (3.20) модели этих 2 таблиц на Postgresql:Зарубежное Основные определения на Sequelize Модели

| user |   | comment | 
|-------|   |----------| 
| id |   | id  | 
| email |   | userId | 

пользователя таблица на CRM схемы и комментарий таблица on комментарий схема. comment.userId имеет внешний ключ user.id.

var User = db_conn.define('user', { 
    email: { 
    ... 
    } 
}, { 
    ... 
}); 
User.sync({force: true}).then(function() { 
    return User.create({ 
    email: '[email protected]' 
    }); 
}); 

var Comment = db_conn.define('comment', { 
    userId: { 
    type: Sequelize.INTEGER, 
    allowNull: false, 
    references: { 
     model: User, 
     key : 'id', 
     deferrable: Sequelize.Deferrable.INITIALLY_DEFERRED 
    } 
    } 
}, { 
    ... 
}); 
Comment.sync({force: true}).then(function() { 
    return Comment.create({ 
    userId: 1, 
    }); 
}); 

Но я получаю эту ошибку:

Unhandled rejection SequelizeDatabaseError: relation "user" does not exist 

Сгенерированный SQL:

CREATE TABLE IF NOT EXISTS "comment"."comment" ("id" SERIAL, "userID" INTEGER NOT NULL REFERENCES "user" ("id") DEFERRABLE INITIALLY DEFERRED); 

Как вы видите, это создание FK для user таблицы не 'crm'.'user' таблицы. И это ошибка cauisng, потому что нет пользователь таблица на общедоступной схеме. Не могли бы вы рассказать мне, что мне не хватает?

спасибо.

ответ

1

Как обходной путь, пока Sequelize не эта проблема решена, вы можете установить search_path пользователя вы каротажного в базу данных с, следующим образом:

ALTER ROLE sequelize_user IN DATABASE my_sequelize_app_db 
    SET search_path = crm, comment, public; 

Таким образом, оператор CREATE TABLE, который в настоящее время терпит неудачу, будет работать хорошо. Вы столкнулись бы с проблемами, если у вас есть таблицы с одинаковым именем на разных схемах.

0

Попробуйте, используя этот код:

var Comment = db_conn.define('comment', { 
    userId: { 
    type: Sequelize.INTEGER, 
    allowNull: false, 
    references: 'user', 
    referencesKey: 'userId' 
    } 
    } 
} 

Важно, что «references'-атрибут имеет точно такое же имя, как и имя-таблицы в базе данных

(вид капитализации!) Это решение проблемы?

+0

Такая же ошибка @Simon. Также получение * устаревшей ошибки * – Eray

-1

Sequelize не поддерживает соединение кросс-базы данных в настоящий момент. ребята здесь предлагают взломать его. Пожалуйста, проверьте.

https://github.com/sequelize/sequelize/issues/3023

+0

Это не перекрестная база данных. Все эти схемы в одних и тех же базах данных. – Eray