11

私はいくつかのテーブルをクエリするために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ツールで実行しようとしましたが、機能させるにはテーブル名""から削除する必要がありました。

""テーブル名を使用するときにクエリに含めないための巧妙なオプションがあるかどうか教えてください。

4

5 に答える 5

6

結局、私はこの問題を解決することができました。

テーブル名のみを指定します。

object Addresses extends Table[Address]("address")

そして、検索時に私のスキーマを含めるようにpostgresql confを変更します(slickはpublicスキーマのみを検索しているようです):

search_path = '"$user",assetxs,public'

そして今それは動作します。

于 2012-11-15T09:33:20.633 に答える
5

スキーマをテーブル名に追加しました。ドット文字を含む(引用符で囲まれた)テーブル名はSQLで有効ですが、ここで必要なものではありません。スキーマを個別に指定する必要があります。

object Addresses extends Table[Address](Some("assetxs"), "address")
于 2012-11-14T15:21:10.520 に答える
3

liquibaseとslickを使用してH2(テスト)とPostgres(本番)の両方で作業したいときに見つけたソリューション。

  • SlickTableオブジェクトでは小文字を使用してください

class MyTable(tag:Tag)extends Table [MyRecord](tag、Some( "my_schema")、 "my_table")

  • H2 URL構成で、DATABASE_TO_UPPER = falseを指定し(これにより、テーブル名と列名が大文字になるのを防ぎます)、INITスキーマを引用符で囲みます(これにより、スキーマが大文字になるのを防ぎます)

url = jdbc:h2:mem:test; MODE = PostgreSQL; DATABASE_TO_UPPER = false;INIT=存在しない場合はスキーマを作成する\"my_schema\" \; SET SCHEMA \ "my_schema \" "

  • liquibaseスクリプトでスキーマ名を指定するときは、H2がスキーマ名を大文字にしようとしないように、スキーマ名も引用符で囲む必要があります。
于 2015-06-25T01:22:43.863 に答える
3

この問題はまだ(私のような)Scalaの初心者を悩ませているので、私は小さな調査を行ったところ、application.confSlick3.1.1とPostgreSQL9.5でそのような問題が成功したことがわかりました。

postgres.devenv = {
  url = "jdbc:postgresql://localhost:5432/dbname?currentSchema=customSchema"
  user = "user"
  password = "password"
  driver = org.postgresql.Driver
}
于 2016-09-08T22:46:03.227 に答える
-2

間違ったドライバーを使用しているだけです。インポートを確認してください

インポートscala.slick.driver.PostgresDriver.simple._

于 2012-11-14T17:43:29.747 に答える