Waterline - Postgres - DataTypes

时间:2017-11-13 06:13:37

标签: node.js database postgresql types sails.js

I am having difficulties with Waterline models and creating the Postgres tables related to those models.

No matter what I do to create a varchar(n) in the table through a model, it converts the attribute to text. And bigint also is being converted to integer!

Should I change the ORM?

Is there a way to do that?

2 个答案:

答案 0 :(得分:1)

你可以做一个更愉快的方法,使用Waterline在“CRUD”中“RUD”而不是“C” - 创建!这是因为Waterline在创建中间表,主键(复合键)等方面非常“糟糕”。所以我今天所做的就是:

  1. 撰写完整的.sql文件存档以创建索引和表格。
  2. 创建一次数据库。 (如果需要,请改变)。
  3. 将所有表格声明为模型。只需插入类型,主键(如果是单个键)和lifecycle callbacks
  4. 确保config/models.js设置为migrate : safe
  5. 结论:我可以使用Waterline插入,读取和删除行,但我不相信它(性能方面)来创建我的表。另一方面,Sequelize是一个更成熟的ORM,可以在需要时使用。对我来说,混合waterline + SQL就足够了。

    编辑:我的模型没有任何聚合(如my_pets: { model: pet}),只有行名称和类型,尽可能简单。

答案 1 :(得分:0)

支持Sails的数据类型:

String,text,integer,float,date,datetime,boolean,binary,array,json,mediumtext,longtext,objectid

如果您需要指定确切的长度 - > varchar(n),您需要使用支持的数据类型,如上所示,或者sails提供名为query的选项。

Model.query()方法,您可以使用它来执行您想要的任何类型的查询。

var queryString='CREATE TABLE if not exists sailsusers.test (id INT NOT NULL,name VARCHAR(45) NULL,PRIMARY KEY (id))'
 Test.query(queryString,function(err,a){
    if(err)
      return console.log(err);
    console.log(a,'\n',b);
    res.ok();
 });