Postgresql Slick是否支持每个查询动态更改模式?

Postgresql Slick是否支持每个查询动态更改模式?,postgresql,scala,slick,Postgresql,Scala,Slick,我想使用postgresql来支持多租户环境,这样每个客户都有自己的模式 当我进行sql查询时,我可以在使用Slick时动态更改模式吗 如果是,如何实现?您可以参数化表类和表查询工厂 trait Schema{ def name: String } case object Customer1 extends Schema{ def name = "CUSTOMER_1" } case object Customer2 extends Schema{ def name = "CUSTO

我想使用postgresql来支持多租户环境,这样每个客户都有自己的模式

当我进行sql查询时,我可以在使用Slick时动态更改模式吗


如果是,如何实现?

您可以参数化表类和表查询工厂

trait Schema{
  def name: String
}
case object Customer1 extends Schema{
  def name = "CUSTOMER_1"
}
case object Customer2 extends Schema{
  def name = "CUSTOMER_2"
}
class MyTable(tag: Tag, schema: Option[String]) extends Table[...](tag, schema){
  ...
}

def myTable(schema: Schema) = new TableQuery( new MyTable(_,Some(schema.name)) )

myTable(Customer1).filter(_.id == 5).run

我假设您试图避免运行手动
SET search\u path=…
query?@CraigRinger是的,我不想在每个查询上都这样做。如果还没有,您可能需要增强您正在使用的框架来支持它。我需要像参数一样传递模式,我将有数百个客户和模式。像这样
def myTable(schema:String)=newtablequery(newmytable(u,Some(schema));myTable(“CUSTOMER_1”).filter(u.id==5)。run
我也对这样做感兴趣,但不希望将模式从我派生要使用的模式的控制器向下传递到调用堆栈。我宁愿不使用隐式。有什么想法吗?希望提供请求范围的MyTable对象,db层在需要表对象时注入该对象@loyalflow你明白了吗?如果有帮助的话,你可以把你的数据库层变成一个类,并把模式作为参数传递进来。显式地将其传递给方法或构造函数比一些神奇的动态注入要好。