Как установить схему PostgreSQL по умолчанию в Play?

Мы используем Play Framework 2.1 в нашем веб-приложении. Мы хотим явно установить схему базы данных (не схему public) в нашей базе данных PostgreSQL, которая является базой данных приложения. Как я могу установить это?


person Ozgur Dogus    schedule 10.04.2013    source источник
comment
Вы говорите об использовании сценариев эволюции или что? В противном случае просто используйте любую схему, которую вы хотите в базе данных, используя psql. Или я совсем не так понял?   -  person maba    schedule 10.04.2013
comment
Когда я пытаюсь получить доступ к таблице из базы данных, я получаю PersistenceException. Поскольку система не смогла найти таблицу. Предполагается, что я использую общедоступную схему, поэтому каким-то образом я должен указать фреймворку использовать схему с другим именем.   -  person Ozgur Dogus    schedule 10.04.2013


Ответы (3)


Насколько я знаю, из того, что я пробовал раньше. Вы должны определить свое schema имя для каждой модели, которую вы хотите. Это должно быть так:

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

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

Возможно, это решение потребует дополнительных усилий для определения каждой модели с именем схемы. Потому что я не знаю, можно ли установить значение конфигурации для указания схемы базы данных по умолчанию для приложения. Но это работает для меня!

Надеюсь, это поможет вам.. :)

person Wayan Wiprayoga    schedule 10.04.2013

Если все ваши таблицы расположены за пределами общедоступной схемы, лучше всего изменить search_path для пользователя вашего приложения:

alter user your_appuser set search_path = 'schema1';

Если у вас несколько схем, вы можете добавить их все:

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

Не забудьте commit это заявление. Изменение вступит в силу только после того, как пользователь войдет в систему в следующий раз. Существующие соединения не будут затронуты.

person a_horse_with_no_name    schedule 10.04.2013

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

}
person ForeverLearner    schedule 04.09.2020