Node.js Bookshelf.js/Knex.js上加载数据库模式的常见做法

Node.js Bookshelf.js/Knex.js上加载数据库模式的常见做法,node.js,bookshelf.js,knex.js,Node.js,Bookshelf.js,Knex.js,ActiveRecord(来自Rails)和Sequelize(另一个node.js ORM)都提供了一种初始化数据库的方法,通过模型定义创建表结构。Rails通过Rails db:schema:load命令来实现这一点,而Sequelize有sync()方法来实现这一点。通过使用它,我们不需要运行应用程序的整个迁移堆栈来启动新的数据库,也不需要在项目存储库中保存SQL转储 在这种背景下,我希望Bookshelf.js或Knex.js具有类似的功能,但在这两个项目的文档中都找不到 然后我决定看一

ActiveRecord(来自Rails)和Sequelize(另一个node.js ORM)都提供了一种初始化数据库的方法,通过模型定义创建表结构。Rails通过
Rails db:schema:load
命令来实现这一点,而Sequelize有
sync()
方法来实现这一点。通过使用它,我们不需要运行应用程序的整个迁移堆栈来启动新的数据库,也不需要在项目存储库中保存SQL转储

在这种背景下,我希望Bookshelf.js或Knex.js具有类似的功能,但在这两个项目的文档中都找不到

然后我决定看一下的源代码,它使用Bookshelf,我发现他们在自己的代码库中处理数据库初始化:

我希望避免编写自己的代码来专门处理这样的事情,因为像Sequelize这样的其他选项提供了开箱即用的功能


在书架上加载数据库模式时,是否有推荐的常用做法、插件或库?

我认为您的思路是正确的,可能只是错过了文档

对于加载架构,如果迁移被写入幂等项,则可以运行迁移堆栈

另一个选项是使用数据库的导出和导入功能。例如:

Rails通过两个rake任务db:schema:dump和db:schema:load实现迁移。Dump将以自定义ruby格式将db模式转储到本地schema.rb文件中。db:schema:load加载该文件


因此,您可以使用pg_dump和pg_restore以及npm包脚本实现类似的功能。只要让脚本使用node的exec方法调用pg_dump并每次转储到同一个文件即可。

谢谢您的回答!但这些选择正是我想要避免的。当一个应用程序变得庞大和复杂时,通过运行整个迁移堆栈来初始化一个新的数据库通常不是一个好主意,而使用SQL转储更新项目存储库也是一项重复的任务,我不想将其添加到工作流中。ActiveRecord和Sequelize都有模式加载功能,可以顺利地解决这个问题,所以我希望能为Bookshelf找到类似的功能,但似乎没有。Rails db:schema:load通过加载每次运行迁移时转储的schema.rb文件来工作。db:schema:dump替换该转储。因此,从某种意义上说,rails也在使用sql转储来更新存储库。因此,您可以通过让一个npm脚本使用pg_dump来创建模式,让pg_restore来加载模式,让一个迁移脚本使用knex运行迁移,然后转储模式,轻松实现rails所做的相同事情。每次模式转储时,覆盖相同的文件,模式加载脚本加载该文件。这听起来是一个不错的解决方案!你介意把它加到原来的答案里吗?这样我就可以接受了?