Slick 2 中的多个 PostgreSQL 数据库(同一服务器)访问
Posted
技术标签:
【中文标题】Slick 2 中的多个 PostgreSQL 数据库(同一服务器)访问【英文标题】:Multiple PostgreSQL database (same server) access in Slick 2 【发布时间】:2014-03-16 15:09:47 【问题描述】:所以我有一个使用多个 mysql 和 PostgreSQL 数据库(在同一台服务器上)的 Scala/Play 应用程序,但是我遇到了 PostgreSQL 的问题。
这是配置:
db.postgres.driver=org.postgresql.Driver
db.postgres.url="jdbc:postgresql://localhost:5432/"
db.postgres.user=root
db.postgres.password=root
db.mysql.driver="com.mysql.jdbc.Driver"
db.mysql.url="jdbc:mysql://localhost"
db.mysql.user=root
db.mysql.pass=root
这个简单的方法适用于 MySQL:
def test = DB("mysql").withDynSession
val rez = sql"""select * from dbName.test""".as[TestRow].list
println(rez)
但与 Postgres 的方法完全相同
def test = DB("postgres").withDynSession
val rez = sql"""select * from dbName.test""".as[TestRow].list
println(rez)
抛出错误:
org.postgresql.util.PSQLException: ERROR: relation "dbName.test" does not exist
为什么这些方法是相同的,但 MySQL 示例有效而 PostgreSQL 无效?
我的堆栈:
Scala 2.10.3 播放 2.2.2 光滑 2.0 PostgreSQL 9.3.3 MySQL 5.6.16 Java 8Postgresql JDBC 驱动版本为 9.3-1101-jdbc41
【问题讨论】:
您是否验证通过 psql 运行该查询可以正确返回结果?也许您提供的语法无效,或者您期望的架构真的不存在? @JasonPearson 我开始意识到这种方法在 Postgres 中可能是不可能的,因为你只能连接到一个特定的数据库,所以你不能用数据库名称为表添加前缀。我可能是错的,但从我目前的发现来看,它指向了这个结论。 【参考方案1】:我遇到了同样的问题。
我正在使用具有提升嵌入功能的 Slick 2.0 和 PostgreSQL 9.3。
您必须在定义表时设置架构:
类咖啡(标签:标签) extends Table[(String, Int, Double, Int, Int)](tag, Some("MYSCHEMA"), "COFFEES")
文档: http://slick.typesafe.com/doc/2.0.1/schemas.html
【讨论】:
【参考方案2】:这可能是区分大小写的问题。尝试引用名称并将架构添加到限定名称:sql"""select * from "dbName"."theSchema"."test""""
这有帮助吗?
【讨论】:
我试过了,错误根本没有改变。我开始认为这在 postgres 中可能根本不可能? 也许您需要将架构添加到限定路径。另见postgresql.org/docs/9.1/static/… 和***.com/questions/7942520/…以上是关于Slick 2 中的多个 PostgreSQL 数据库(同一服务器)访问的主要内容,如果未能解决你的问题,请参考以下文章
Play Framework 2.6 中未触发 Slick (postgresql) 演变