【问题标题】:Migration on two schemas在两个架构上迁移
【发布时间】:2019-11-18 16:16:23
【问题描述】:

我的数据库中有 2 个架构:schema1public,我想在那里创建一些表。我在迁移中尝试了这样的代码:

return knex.schema

    .raw('CREATE SCHEMA IF NOT EXISTS schema1;')

    .createTableIfNotExists('table1', table => {
      table.increments('id')
    })

    .withSchema('public')

    .createTableIfNotExists('table2', table => {
      table.increments('id')
    })

我希望拥有:schema1.table1public.table2,但我没有。任何想法如何做到这一点?

【问题讨论】:

  • 创建模式语句正是这样做的。它不会把它放在路径中。扩展“table1”的创建以包含它“.createTableIfNotExists('application.table1'...”或在创建表之前使用“.withSchema(application'”。免责声明:我不知道 Knex,所以不确定需要系统税,

标签: postgresql migration knex.js


【解决方案1】:

Belayer 在 cmets 中非常正确,但我将扩展为一个答案来演示语法。您还需要避免做以下事情:

createTableIfNotExists('schema1.table1', table => {

根据Identifier Syntax,这是行不通的:只要养成始终使用withSchema 的习惯即可。

此外,我不建议在不等待前一个完成的情况下发出后续的createTables。虽然它可能有效,但我认为你会遇到关系等问题。这使你的原始代码更像:

exports.up = knex =>
  knex
    .raw("CREATE SCHEMA IF NOT EXISTS schema1")
    .then(() =>
      knex.withSchema("schema1").createTableIfNotExists("table1", table => {
        table.increments("id");
      })
    )
    .then(() =>
      knex.withSchema("public").createTableIfNotExists("table2", table => {
        table.increments("id");
      })
    );

【讨论】:

    猜你喜欢
    • 2013-10-06
    • 2017-08-29
    • 2016-03-17
    • 2015-08-03
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    相关资源
    最近更新 更多