2016-03-25 111 views
0

我想在PostgreSQL上創建這些2個表Sequelize(3.20)型號:外鍵定義

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

用戶表是CRM架構和評論評論架構。 comment.userIduser.id的外鍵。正如你看到它的創建FK到user表不'crm'.'user'

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

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。並且它是cauistng錯誤,因爲在公共模式上沒有用戶表。你能告訴我我錯過了什麼嗎?

謝謝。

回答

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