Sails.js - Postgresql 适配器多模式

Sails.js - Postgresql Adapter multiple schemas

我一直在搜索 Sails.js 多租户功能,但我知道这样的功能尚未实现。我最初的想法是通过为每个租户创建一个数据库来构建多租户应用程序。

因为我意识到我不能在 Sails.js 中做这样的事情,所以我尝试了一种不同的方法,只创建一个数据库 ( POSTGRES ),但有很多模式,每个模式代表一个租户。我的问题是我不能't/I 不知道(甚至不知道在 Sails/Postgres 适配器中是否可行)如何动态地(在运行时)定义给定对象应该查询什么模式,基于登录的用户。

有人遇到过这样的问题吗?我该如何继续?

对不起英语,谢谢。

我认为是水线 sequel 适配器的问题,基于 in this answer

方法是在模型

中添加一个 属性
  meta: {
    schemaName: 'schema'
  },

但不起作用,不能定义多个模式,只能将用户作为一个模式,如果 属性 模式设置为 true ins config/models.js,则定义每个 table 的模式都不起作用。

根据我的经验,添加模型不起作用。 唯一对我有用的是使用元调用来指定架构。

await Users.create(newUser).meta({ schemaName: 'admin' });

有点麻烦,但很管用。

希望这对某人有所帮助。

线索在 sails-postgresql 适配器代码中 - 它的几个助手包括这个位:

var schemaName = 'public';
    if (inputs.meta && inputs.meta.schemaName) {
      schemaName = inputs.meta.schemaName;
    } else if (inputs.datastore.config && inputs.datastore.config.schemaName) {
      schemaName = inputs.datastore.config.schemaName;
    }

所以默认情况下,驱动程序正在寻找名为 public 的架构,除非通过调用 meta() 提供不同的值 如上所述,或者架构名称是在应用程序范围内配置的。

要为所有模型配置模式名称,schemaName 属性 需要包含在 postgresql 数据存储的配置中,它出现在 datastore.js:

...
default: {
   adapter: 'sails-postgresql',
   url: 'postgresql://username:password@localhost:5432/your_database_name',
   schemaName: 'your_schema_name_here'
}

完成后,您不必将 meta({ schemaName: 'blah'}) 附加到任何查询。我为此苦苦挣扎了几天,终于以这种方式解决了它。