2

我们在 Web 应用程序中使用 Play Framework 2.1。我们想public在作为应用程序数据库的 PostgreSQL 数据库中显式设置数据库模式(不是模式)。我该如何设置?

4

3 回答 3

3

据我所知,根据我之前的尝试。schema你应该为你想要的每个模型定义你的名字。它应该是这样的:

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

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

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

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

于 2013-04-10T16:09:53.193 回答
2

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

alter user your_appuser set search_path = 'schema1';

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

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

不要忘记commit这个声明。该更改仅在用户下次登录后才会生效。现有连接不会受到影响。

于 2013-04-10T16:27:30.930 回答
0

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 框架将使用这些参数创建一个默认连接池。Postgres 驱动程序基本上能够使用?currentSchema=backofficefromversion 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

}
于 2020-09-04T07:12:14.177 回答