Error (E_UNKNOWN) :: Encountered an unexpected error
: Trying to define a collection (external_resource) which already exists.我正在尝试为现有的数据库创建一个模型。我没有使用风帆。只有水线是独立的。我已经把连接设置为安全迁移。然而,waterline仍在尝试创建一个表,该表已经存在于我先前存在的数据库中。如果我将tableName命名为一个新名称,它会工作得很好。问题似乎是当我试图使用现有表中的现有数据,然后为它创建一个水线模型时。
我相信这是一个bug,因为迁移安全根本不应该尝试创建一个表,对吧?
我用的是没有船帆的水线。
Waterline的配置如下:
models = [];
HOMEDIR+ '/lib/models/waterline').forEach(function(file) {fs.readdirSync
Models.push(需要(HOMEDIR+ '/lib/models/waterline/‘+文件));
});
module.exports ={
初始化:函数(下一个){
models.forEach(function(model) { orm.loadCollection(model);});orm.initialize(config, function(err, models) { if (err) throw err; global.models = models.collections; global.connections = models.connections; next();});}
};
//在我的配置中
本地主机:{
migrate: 'safe', adapter: 'postgres', database: 'intellinote', host: 'localhost', user: 'postgres', password: '', port: 5432}顺便说一下,使用sails-postgresql。"sails-postgresql":"^0.11.4",
我的一个假设是,我的模型定义与我的postgresql模型不完全匹配。我试过这样做,但也许我遗漏了一些小东西。它在waterline代码中的什么地方检查模型==模式定义?也许如果我知道了这一点,我就能找到为什么要尝试创建一个
使用Sails 3年。数十亿公司的主要生产级别错误:(
提前感谢
更多信息:表的sql如下所示
DROP TABLE如果存在"intellinotedb"."external_resource";
创建表“intellinotedb”。“external_resource”(
"id" int8 NOT NULL DEFAULT nextval('external_resource_id_seq'::regclass),"external_id" varchar(2000) NOT NULL COLLATE "default","version_id" varchar(2000) COLLATE "default","url" varchar(5000) COLLATE "default","name" varchar(4000) COLLATE "default","size" int8,"creator" varchar(50) NOT NULL COLLATE "default","created_at" timestamp(6) NOT NULL DEFAULT now(),"modified_at" timestamp(6) NULL,"project_id" int8 NOT NULL,"note_id" int8,"type" varchar(50) NOT NULL COLLATE "default","is_public" bool NOT NULL DEFAULT false,"state" varchar(100) NOT NULL DEFAULT 'ACTIVE'::character varying COLLATE "default","mime_type" text COLLATE "default","internal_type" text COLLATE "default","is_template" bool NOT NULL,"has_filled_data" bool NOT NULL)
使用(OIDS=FALSE);
将表“INITIOTEDB.”external_resource“OWNER更改为"intellinote";
--表external_resource的主键结构
ALTER TABLE“intellinotedb tedb.”external_resource“ADD PRIMARY KEY ("id")初始立即不可推迟;
--表external_resource的唯一结构
ALTER TABLE“intellinotedb tedb.”external_resource“ADD CONSTRAINT "external_resource_note_id_key”UNIQUE“("note_id")最初不能推迟;
--表external_resource的外键结构
ALTER TABLE "intellinotedb"."external_resource“ADD CONSTRAINT "external_resource_note_id_fkey”外键("note_id")引用"intellinotedb"."note“("id") ON UPDATE无DELETE CASCADE操作不可推迟初始立即;
ALTER TABLE“智能项目”.“external_resource”添加约束"external_resource_project_id_fkey“外键("project_id")引用”智能项目“.”project“("id")在UPDATE上没有动作DELETE没有动作不可推迟初始立即;
我的模型是:
Waterline = require('waterline');
module.exports = Waterline.Collection.extend({
tableName:'external_resource',
元:{
schemaName: process.env.WATERLINE_SCHEMA || 'intellinotedb'},
连接: process.env.WATERLINE_DB ||‘本地主机’,
属性:{
id: { type: 'integer', autoIncrement: true, primaryKey: true, unique: true, size: 8},external_id: { type: 'string', required: true, size: 2000},version_id: { type: 'string', size: 2000},url: { type: 'string', required: true, size: 5000},name: { type: 'string', required: true, size: 4000},size: { type: 'integer', required: true, size: 8},creator: { type: 'string', required: true, size: 50},createdAt: { type: 'datetime', columnName: 'created_at'},updatedAt: { type: 'datetime', columnName: 'modified_at'},project_id: { type: 'integer', required: true},note_id: { type: 'integer', required: true, size: 8},type: { type: 'string', defaultsTo: 'FILE', required: true, size: 50},is_public: { type: 'boolean', defaultsTo: true, required: true},state: { type: 'string', enum: ['ACTIVE', 'DELETED'], defaultsTo: 'ACTIVE', required: true, size: 100},mime_type: { type: 'string', required: true},internal_type: { type: 'string', defaultsTo: 'REGULAR', required: true},is_template: { type: 'boolean', defaultsTo: false, required: false},has_filled_data: { type: 'boolean', defaultsTo: false, required: false}}
});
发布于 2017-04-05 02:09:36
迁移功能需要在每个型号上,而不是在连接上。根据这个帖子:https://github.com/balderdashy/waterline/issues/1472
https://stackoverflow.com/questions/43214030
复制相似问题