Java 如何设置默认的PostgreSQL模式?

Java 如何设置默认的PostgreSQL模式?,java,postgresql,playframework,playframework-2.1,ebean,Java,Postgresql,Playframework,Playframework 2.1,Ebean,我们在web应用程序中使用Play Framework 2.1。我们希望在作为应用程序数据库的PostgreSQL数据库中显式设置数据库模式(而不是publicschema)。如何设置它?据我所知,根据我以前的尝试。您应该为要创建的每个模型定义模式名称。应该是这样的: import play.db.ebean.Model; import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(schema

我们在web应用程序中使用Play Framework 2.1。我们希望在作为应用程序数据库的PostgreSQL数据库中显式设置数据库模式(而不是
public
schema)。如何设置它?

据我所知,根据我以前的尝试。您应该为要创建的每个模型定义
模式
名称。应该是这样的:

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

@Entity
@Table(schema = "schema2")
public class TableOnSchema2 extends Model {
  ...
}
也许这个解决方案需要做更多的工作,用模式名定义每个模型。因为,我不知道是否可以设置配置值来指定应用程序的默认数据库方案。但它对我有用


希望这对您有所帮助:)

如果您的表都位于公共架构之外,最好的做法是更改应用程序用户的搜索路径:

alter user your_appuser set search_path = 'schema1';
如果有多个架构,则可以添加所有架构:

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

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

Playframework 2.8.x使用Scala示例:

我们可以在
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 framework将使用这些参数创建默认连接池。 Postgres驱动程序基本上能够使用
9.4版以后的
在conneciton 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

}

你是说使用进化脚本还是什么?否则,只需使用psql在数据库中使用所需的任何模式即可。还是我完全误解了?当我试图从数据库访问表时,我得到了PersistenceException。因为系统找不到该表。它假设我使用公共模式,所以我应该告诉框架使用othername模式。