我们在Web应用程序中使用Play Framework 2.1。我们希望在PostgreSQL数据库中显式设置数据库模式(不是public
模式),该数据库是应用程序的数据库。我该怎么设置它?
答案 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
}