使用PostgreSQL时出现的问题
我在scala项目中使用它来查询一些表使用PostgreSQL时出现的问题,postgresql,scala,slick,Postgresql,Scala,Slick,我在scala项目中使用它来查询一些表 //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[Stri
//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 _)
}
我注意到schema.table的名称出现在“
中,因此该语句是:
select x2."id", x2."street", x2."number", x2."zipcode", x2."country"
from "assetxs.address" x2
这当然不起作用(我曾尝试在PostgreSQL工具中运行它,我需要从表名中删除”
,才能使它起作用
您能否告诉我,在使用表名时,是否有任何巧妙的选项不在任何查询中包含
“
”您已将架构放入表名中。包含点字符的(带引号的)表名在SQL中有效,但不是您想要的。您必须单独指定架构:
object Addresses extends Table[Address](Some("assetxs"), "address")
您只是使用了错误的驱动程序,请检查您的导入
导入scala.slick.driver.PostgresDriver.simple.\u最终我解决了这个问题 我仅指定表名:
对象地址扩展表[地址](“地址”)
并将我的postgresql配置更改为在搜索时包含我的模式(似乎slick只查看public
schema):
search\u path='“$user”,assetxs,public'
现在它可以工作了。当我想使用liquibase和slick处理H2(测试)和Postgres(生产)时,我找到了解决方案
- 在光滑的表格对象中使用小写字母
- 在H2 url配置中,需要指定数据库_to_UPPER=false(这可以防止表名和列名大写),并在INIT模式周围加引号(这可以防止模式大写)
- 在liquibase脚本中指定架构名称时,还必须将其引用,以便H2不会尝试将其大写
- 由于这个问题仍然困扰着Scala的新来者(像我一样),我进行了一些小规模的研究,发现这样一个
应用程序.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
}
您确定这就是您遇到的问题吗?在您的示例中,在PostgreSQL中,不带引号的标识符将转换为小写,删除引号将导致相同的查询。@AntsAasma,我确定“assetxs.address“是一个令人头痛的问题。如果您尝试在PostgreSQL工具UI中运行此查询,它将不起作用。因此,slick打印出来的内容不正确……如果我尝试从scla/slick运行查询,它会告诉我:
ERROR:relation”assetxs.address”不存在
@MichaelKrelin hacker如果我没有在那里指定模式,它会告诉我错误:关系“address”不存在
谢谢,但这样模式似乎不再包含在sql语句中:sql语句:选择x2.“id”,x2.“street”,x2.“number”,x2.“zipcode”,x2.“count ry”from“address”x2
@CristianBoariu如果我没有弄错的话,你可以将模式指定为数据库URL的一部分,但我现在无法测试它。@JacobusR我也尝试过类似于URL?schema=assetx
的方法,但仍然不起作用……我发现这两篇文章可能有帮助:和。你提到的问题也是ScalaQuery的问题,但是不幸的是,问题链接已断开,因此我们不知道它是否已修复:原始问题的新工作链接为。忽略表定义中的架构名称这一事实是一个错误:。我已经使用了您指定的导入:import scala.slick.driver.PostgresDriver.simple.\u
很高兴看到您找到了解决方法,谢谢对于共享:-)您尝试过这个:jdbc:p吗ostgresql://localhost:5432/yourdatabase?searchpath=assetxs
postgres.devenv = {
url = "jdbc:postgresql://localhost:5432/dbname?currentSchema=customSchema"
user = "user"
password = "password"
driver = org.postgresql.Driver
}