Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PostgreSQL时出现的问题_Postgresql_Scala_Slick - Fatal编程技术网

使用PostgreSQL时出现的问题

使用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

我在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[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(生产)时,我找到了解决方案

  • 在光滑的表格对象中使用小写字母
类MyTable(tag:tag)扩展了表[MyRecord](tag, 一些(“我的图表”,“我的表格”)

  • 在H2 url配置中,需要指定数据库_to_UPPER=false(这可以防止表名和列名大写),并在INIT模式周围加引号(这可以防止模式大写)
网址= jdbc:h2:mem:test;MODE=PostgreSQL;DATABASE_TO_UPPER=false;INIT=create 架构如果不存在“我的架构”;设置架构“我的架构”

  • 在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
      }