首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Waterline将现有数据库迁移到无需航行的waterline模型

Waterline将现有数据库迁移到无需航行的waterline模型
EN

Stack Overflow用户
提问于 2017-04-05 01:36:51
回答 1查看 502关注 0票数 1
代码语言:javascript
复制
 Error (E_UNKNOWN) :: Encountered an unexpected error
: Trying to define a collection (external_resource) which already exists.

我正在尝试为现有的数据库创建一个模型。我没有使用风帆。只有水线是独立的。我已经把连接设置为安全迁移。然而,waterline仍在尝试创建一个表,该表已经存在于我先前存在的数据库中。如果我将tableName命名为一个新名称,它会工作得很好。问题似乎是当我试图使用现有表中的现有数据,然后为它创建一个水线模型时。

我相信这是一个bug,因为迁移安全根本不应该尝试创建一个表,对吧?

我用的是没有船帆的水线。

Waterline的配置如下:

代码语言:javascript
复制

models = [];

HOMEDIR+ '/lib/models/waterline').forEach(function(file) {fs.readdirSync

Models.push(需要(HOMEDIR+ '/lib/models/waterline/‘+文件));

});

module.exports ={

初始化:函数(下一个){

代码语言:javascript
复制
models.forEach(function(model) {
代码语言:javascript
复制
  orm.loadCollection(model);
代码语言:javascript
复制
});
代码语言:javascript
复制
orm.initialize(config, function(err, models) {
代码语言:javascript
复制
  if (err) throw err;
代码语言:javascript
复制
  global.models = models.collections;
代码语言:javascript
复制
  global.connections = models.connections;
代码语言:javascript
复制
  next();
代码语言:javascript
复制
});

}

};

//在我的配置中

本地主机:{

代码语言:javascript
复制
  migrate: 'safe',
代码语言:javascript
复制
  adapter: 'postgres',
代码语言:javascript
复制
  database: 'intellinote',
代码语言:javascript
复制
  host: 'localhost',
代码语言:javascript
复制
  user: 'postgres',
代码语言:javascript
复制
  password: '',
代码语言:javascript
复制
  port: 5432
代码语言:javascript
复制
}
代码语言:javascript
复制

顺便说一下,使用sails-postgresql。"sails-postgresql":"^0.11.4",

我的一个假设是,我的模型定义与我的postgresql模型不完全匹配。我试过这样做,但也许我遗漏了一些小东西。它在waterline代码中的什么地方检查模型==模式定义?也许如果我知道了这一点,我就能找到为什么要尝试创建一个

使用Sails 3年。数十亿公司的主要生产级别错误:(

提前感谢

更多信息:表的sql如下所示

代码语言:javascript
复制

DROP TABLE如果存在"intellinotedb"."external_resource";

创建表“intellinotedb”。“external_resource”(

代码语言:javascript
复制
"id" int8 NOT NULL DEFAULT nextval('external_resource_id_seq'::regclass),
代码语言:javascript
复制
"external_id" varchar(2000) NOT NULL COLLATE "default",
代码语言:javascript
复制
"version_id" varchar(2000) COLLATE "default",
代码语言:javascript
复制
"url" varchar(5000) COLLATE "default",
代码语言:javascript
复制
"name" varchar(4000) COLLATE "default",
代码语言:javascript
复制
"size" int8,
代码语言:javascript
复制
"creator" varchar(50) NOT NULL COLLATE "default",
代码语言:javascript
复制
"created_at" timestamp(6) NOT NULL DEFAULT now(),
代码语言:javascript
复制
"modified_at" timestamp(6) NULL,
代码语言:javascript
复制
"project_id" int8 NOT NULL,
代码语言:javascript
复制
"note_id" int8,
代码语言:javascript
复制
"type" varchar(50) NOT NULL COLLATE "default",
代码语言:javascript
复制
"is_public" bool NOT NULL DEFAULT false,
代码语言:javascript
复制
"state" varchar(100) NOT NULL DEFAULT 'ACTIVE'::character varying COLLATE "default",
代码语言:javascript
复制
"mime_type" text COLLATE "default",
代码语言:javascript
复制
"internal_type" text COLLATE "default",
代码语言:javascript
复制
"is_template" bool NOT NULL,
代码语言:javascript
复制
"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没有动作不可推迟初始立即;

代码语言:javascript
复制

我的模型是:

代码语言:javascript
复制

Waterline = require('waterline');

module.exports = Waterline.Collection.extend({

tableName:'external_resource',

元:{

代码语言:javascript
复制
schemaName: process.env.WATERLINE_SCHEMA || 'intellinotedb'

},

连接: process.env.WATERLINE_DB ||‘本地主机’,

属性:{

代码语言:javascript
复制
id: {
代码语言:javascript
复制
  type: 'integer',
代码语言:javascript
复制
  autoIncrement: true,
代码语言:javascript
复制
  primaryKey: true,
代码语言:javascript
复制
  unique: true,
代码语言:javascript
复制
  size: 8
代码语言:javascript
复制
},
代码语言:javascript
复制
external_id: {
代码语言:javascript
复制
  type: 'string',
代码语言:javascript
复制
  required: true,
代码语言:javascript
复制
  size: 2000
代码语言:javascript
复制
},
代码语言:javascript
复制
version_id: {
代码语言:javascript
复制
  type: 'string',
代码语言:javascript
复制
  size: 2000
代码语言:javascript
复制
},
代码语言:javascript
复制
url: {
代码语言:javascript
复制
  type: 'string',
代码语言:javascript
复制
  required: true,
代码语言:javascript
复制
  size: 5000
代码语言:javascript
复制
},
代码语言:javascript
复制
name: {
代码语言:javascript
复制
  type: 'string',
代码语言:javascript
复制
  required: true,
代码语言:javascript
复制
  size: 4000
代码语言:javascript
复制
},
代码语言:javascript
复制
size: {
代码语言:javascript
复制
  type: 'integer',
代码语言:javascript
复制
  required: true,
代码语言:javascript
复制
  size: 8
代码语言:javascript
复制
},
代码语言:javascript
复制
creator: {
代码语言:javascript
复制
  type: 'string',
代码语言:javascript
复制
  required: true,
代码语言:javascript
复制
  size: 50
代码语言:javascript
复制
},
代码语言:javascript
复制
createdAt: {
代码语言:javascript
复制
  type: 'datetime',
代码语言:javascript
复制
  columnName: 'created_at'
代码语言:javascript
复制
},
代码语言:javascript
复制
updatedAt: {
代码语言:javascript
复制
  type: 'datetime',
代码语言:javascript
复制
  columnName: 'modified_at'
代码语言:javascript
复制
},
代码语言:javascript
复制
project_id: {
代码语言:javascript
复制
  type: 'integer',
代码语言:javascript
复制
  required: true
代码语言:javascript
复制
},
代码语言:javascript
复制
note_id: {
代码语言:javascript
复制
  type: 'integer',
代码语言:javascript
复制
  required: true,
代码语言:javascript
复制
  size: 8
代码语言:javascript
复制
},
代码语言:javascript
复制
type: {
代码语言:javascript
复制
  type: 'string',
代码语言:javascript
复制
  defaultsTo: 'FILE',
代码语言:javascript
复制
  required: true,
代码语言:javascript
复制
  size: 50
代码语言:javascript
复制
},
代码语言:javascript
复制
is_public: {
代码语言:javascript
复制
  type: 'boolean',
代码语言:javascript
复制
  defaultsTo: true,
代码语言:javascript
复制
  required: true
代码语言:javascript
复制
},
代码语言:javascript
复制
state: {
代码语言:javascript
复制
  type: 'string',
代码语言:javascript
复制
  enum: ['ACTIVE', 'DELETED'],
代码语言:javascript
复制
  defaultsTo: 'ACTIVE',
代码语言:javascript
复制
  required: true,
代码语言:javascript
复制
  size: 100
代码语言:javascript
复制
},
代码语言:javascript
复制
mime_type: {
代码语言:javascript
复制
  type: 'string',
代码语言:javascript
复制
  required: true
代码语言:javascript
复制
},
代码语言:javascript
复制
internal_type: {
代码语言:javascript
复制
  type: 'string',
代码语言:javascript
复制
  defaultsTo: 'REGULAR',
代码语言:javascript
复制
  required: true
代码语言:javascript
复制
},
代码语言:javascript
复制
is_template: {
代码语言:javascript
复制
  type: 'boolean',
代码语言:javascript
复制
  defaultsTo: false,
代码语言:javascript
复制
  required: false
代码语言:javascript
复制
},
代码语言:javascript
复制
has_filled_data: {
代码语言:javascript
复制
  type: 'boolean',
代码语言:javascript
复制
  defaultsTo: false,
代码语言:javascript
复制
  required: false
代码语言:javascript
复制
}

}

});

代码语言:javascript
复制
EN

回答 1

Stack Overflow用户

发布于 2017-04-05 02:09:36

迁移功能需要在每个型号上,而不是在连接上。根据这个帖子:https://github.com/balderdashy/waterline/issues/1472

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43214030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档