#postgresql #scala #sbt #slick #typesafe
#postgresql #scala #sbt #slick #typesafe
Вопрос:
Проблема: итак, я пытаюсь подключиться к базе данных PostgreSQL с помощью scala slick v3.3.3, и не удается найти пользователей отношения (таблицы) в схеме «один» в базе данных «onetest».
У меня есть следующая настройка таблицы:
CREATE SCHEMA one;
CREATE TABLE one.users (
...
);
и определение таблицы:
class UsersTable(tag: Tag) extends Table[UserRequest](tag, Some("one"), "users") {
...
}
с конфигурацией базы данных:
onedbtest = {
profile = "slick.jdbc.PostgresProfile$"
db = {
dataSourceClass = "org.postgresql.ds.PGSimpleDataSource" //Simple datasource with no connection pooling. The connection pool has already been specified with HikariCP.
driver = "slick.driver.PostgresDriver$"
serverName = "localhost"
portNumber = "5432"
databaseName = "onetest"
user = onetestuser
password = "password"
connectionPool = disabled
}
}
и при запуске (с необходимым импортом):
dbConfig.db.run((usersTable = createUserRequest).asTry)
Почему он не может найти отношения (таблицы) в БД?
Примечание: ошибка не появляется (при прохождении тестов), когда: keepAliveConnection = true
добавляется в конфигурацию для инициализации БД, однако запись в другую БД с именем «one» (среда разработки) не работает при connectionPool = disabled
добавлении. Он должен работать с добавленным атрибутом ConnectionPool, но это не так. Странно, что он ссылается на другую БД, когда БД нигде не определена в коде. Я использую sbt.version = 1.3.13 и scalaVersion := «2.12.6». sbt clean compile
и перестройка не решает проблемы с кэшированием. Я также отключил все процессы, чтобы остановить любые открытые соединения и использовать db.close
там, где это необходимо.
Комментарии:
1. Я пытался воспроизвести вашу проблему, но безрезультатно. Не похоже, что у slick есть проблемы с пользовательскими схемами. Вместо ошибок в поведении библиотеки, которые вы описываете, указывает на проблемы с конфигурацией в вашем проекте. Нет никакого способа, которым slick может получить базу данных, которую вы не настроили сами где-нибудь в проекте. Причиной такого поведения могло быть несколько конфигурационных файлов, которые были собраны и объединены недетерминированным образом. github.com/lightbend/config/issues/342
2. @tentacle Спасибо за ваш комментарий, я это исправил. Взгляните на ответ :).
Ответ №1:
Я поменялся dataSourceClass = "org.postgresql.ds.PGSimpleDataSource"
с dataSourceClass = "slick.jdbc.DatabaseUrlDataSource"
. Это позволяет приложению фактически закрывать коллекции, а не просто возвращать соединение в пул соединений. Это, в свою очередь, позволяет приложению инициализировать новое соединение с соответствующей БД и получать любые изменения в БД.