如何在Play中设置默认的PostgreSQL架构?

时间:2013-04-10 12:52:16

标签: java postgresql playframework playframework-2.1 ebean

我们在Web应用程序中使用Play Framework 2.1。我们希望在PostgreSQL数据库中显式设置数据库模式(不是public模式),该数据库是应用程序的数据库。我该怎么设置它?

3 个答案:

答案 0 :(得分:3)

据我所知,从我以前的尝试开始。您应该为您想要的每个模型定义schema名称。它应该是这样的:

import play.db.ebean.Model;
import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(schema = "schema2")
public class TableOnSchema2 extends Model {
  ...
}

也许这个解决方案会额外努力用模式名称定义每个模型。因为,我不知道是否可以设置配置值来为应用程序指定默认数据库方案。但它对我有用!

希望这会对你有所帮助.. :)

答案 1 :(得分:2)

如果您的表都位于公共架构之外,那么最好的办法是更改应用程序用户的search_path:

alter user your_appuser set search_path = 'schema1';

如果您有多个架构,可以添加所有架构:

alter user your_appuser set search_path = 'schema1,schema2,public';

不要忘记commit这句话。只有在用户下次登录后,更改才会生效。现有连接不会受到影响。

答案 2 :(得分:0)

使用Scala示例的Playframework 2.8.x:

我们可以在application.conf中添加以下条目:

db {
  # You can declare as many datasources as you want.
  # By convention, the default datasource is named `default`

  default.driver = org.postgresql.Driver
  default.url = "jdbc:postgresql://localhost/postgres?currentSchema=backoffice"
  default.username = "user"
  default.password = "password"
}

Play框架将使用这些参数创建一个默认的连接池。 从?currentSchema=backoffice开始,Postgres驱动程序基本上可以使用version 9.4在连接URL中定义默认架构。

Dao对象可以如下使用此数据库:

import com.google.inject.Inject
import play.api.db.{DBApi, Database, DefaultDBApi}

class PostgresDao @Inject()(backofficeDB : Database) {
  val backofficeDb = backofficeDB
  //some more methods

}