我在scala项目中使用slick来查询某些表。
//define table
object Addresses extends Table[Address]("assetxs.address") {
def id = column[Int]("id", O.PrimaryKey)
def street = column[String]("street")
def number = column[String]("number")
def zipcode = column[String]("zipcode")
def country = column[String]("country")
def * = id ~ street ~ number ~ zipcode ~ country <> (Address, Address.unapply _)
}
如果我使用此表的任何查询它不起作用(它说它找不到我的表)所以我更进一步打印出如下查询:
implicit val session = Database.forURL("jdbc:postgresql://localhost:5432/postgres", driver = "org.postgresql.Driver", user="postgres", password="postgres").createSession()
session.withTransaction{
val query = Query(Addresses)
println("Addresses: " + query.selectStatement)
}
我注意到schema.table的名称出现在""
中,因此语句为:
select x2."id", x2."street", x2."number", x2."zipcode", x2."country"
from "assetxs.address" x2
当然不起作用(我尝试在PostgreSQL工具中运行它,我需要从表名中删除""
才能让它正常工作。
在使用表名时,是否可以告诉我在任何查询中是否有任何光滑的选项都不包含""
?
答案 0 :(得分:6)
最后我能够解决这个问题。
我只指定表名:
object Addresses extends Table[Address]("address")
并更改我的postgresql conf以在搜索时包含我的架构(看起来光滑只在public
架构上查看):
search_path = '"$user",assetxs,public'
现在可行。
答案 1 :(得分:4)
您已将架构放入表名中。包含点字符的(引用)表名在SQL中有效,但这不是您想要的。您必须单独指定架构:
object Addresses extends Table[Address](Some("assetxs"), "address")
答案 2 :(得分:3)
我希望使用liquibase和光滑处理H2(测试)和Postgres(生产)时找到的解决方案。
class MyTable(tag:Tag)扩展Table [MyRecord](标签, 一些(&#34; my_schema&#34;),&#34; my_table&#34;)
url = JDBC:H2:MEM:测试; MODE = PostgreSQL的; DATABASE_TO_UPPER = FALSE; INIT =创建 架构如果不存在\&#34; my_schema \&#34; \; SET SCHEMA \&#34; my_schema \&#34;&#34;
答案 3 :(得分:3)
由于这个问题仍然困扰着Scala的新人(像我一样),我进行了小规模的研究,发现这样的application.conf
在Slick 3.1.1和PostgreSQL 9.5中取得了成功:
postgres.devenv = {
url = "jdbc:postgresql://localhost:5432/dbname?currentSchema=customSchema"
user = "user"
password = "password"
driver = org.postgresql.Driver
}
答案 4 :(得分:-2)
您只是使用了错误的驱动程序,请检查您的导入
导入scala.slick.driver.PostgresDriver.simple ._