如何在knex模式中指定float精度?

时间:2016-03-26 19:25:15

标签: node.js bookshelf.js knex.js

我在knex模式中定义浮点精度时遇到问题,我希望它是一个浮点数(10,6)以存储纬度/经度位置。以下是我试图宣布它的方式:

lat: {type: 'float(10,6)', nullable: false},

由于(10,6),它在迁移时失败,所以如何正确地执行此操作?

2 个答案:

答案 0 :(得分:2)

我不知道这种JSON方法,因为我只使用Schema Builder

看起来像{geostuffidlatlng列:

var knex = require('knex')({client:'sqlite3',connection:{filename: 'sample.sqlite3'}});

knex.schema.createTable('geostuff', function(table) {
  table.increments('id').primary();
  table.float('lat', 14, 10).notNullable();
  table.float('lng', 14, 10).notNullable();
}).then(function() {
  console.dir('table created');
}).catch(function(err) {
  console.log('table not created');
  console.dir(err);
});

请注意,精度说明符不受广泛支持。 PostgreSQL支持float(precision),但SQLite3(来自示例)不支持(更好的是:不关心)。幸运的是,knex.js隐藏了那些特质。

答案 1 :(得分:0)

为了存储地理位置,我使用了双精度数据类型,为此,我的迁移保持如下状态:

exports.up = function(knex, Promise) {
    return knex.schema.createTable('route', table => {
        table.increments('id').primary()
        table.specificType('latitue', 'double precision').notNull()
        table.specificType('longitude', 'double precision').notNull()
    })
};

exports.down = function(knex, Promise) {
    return knex.schema.dropTable('route')
};