Мы используем Play Framework 2.1 в нашем веб-приложении. Мы хотим явно установить схему базы данных (не схему public
) в нашей базе данных PostgreSQL, которая является базой данных приложения. Как я могу установить это?
Как установить схему PostgreSQL по умолчанию в Play?
Ответы (3)
Насколько я знаю, из того, что я пробовал раньше. Вы должны определить свое schema
имя для каждой модели, которую вы хотите. Это должно быть так:
import play.db.ebean.Model;
import javax.persistence.Entity;
import javax.persistence.Table;
@Entity
@Table(schema = "schema2")
public class TableOnSchema2 extends Model {
...
}
Возможно, это решение потребует дополнительных усилий для определения каждой модели с именем схемы. Потому что я не знаю, можно ли установить значение конфигурации для указания схемы базы данных по умолчанию для приложения. Но это работает для меня!
Надеюсь, это поможет вам.. :)
Если все ваши таблицы расположены за пределами общедоступной схемы, лучше всего изменить search_path для пользователя вашего приложения:
alter user your_appuser set search_path = 'schema1';
Если у вас несколько схем, вы можете добавить их все:
alter user your_appuser set search_path = 'schema1,schema2,public';
Не забудьте commit
это заявление. Изменение вступит в силу только после того, как пользователь войдет в систему в следующий раз. Существующие соединения не будут затронуты.
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 в основном дает возможность определить схему по умолчанию в URL-адресе подключения, используя ?currentSchema=backoffice
с version 9.4
и далее.
Объект Dao может использовать эту базу данных, как показано ниже:
import com.google.inject.Inject
import play.api.db.{DBApi, Database, DefaultDBApi}
class PostgresDao @Inject()(backofficeDB : Database) {
val backofficeDb = backofficeDB
//some more methods
}