2012-11-14 3 views
11

저는 스칼라 프로젝트에서 slick을 사용하여 일부 테이블을 쿼리합니다. 나는 그것이 작동하지 않습니다이 테이블의 쿼리를 사용하는 경우PostgreSQL을 사용할 때 문제가 있습니다.

//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) 
} 

가 나는 것으로 나타났습니다 스키 마 이름은 ""에 나타납니다 그래서 문은 다음과 같습니다

select x2."id", x2."street", x2."number", x2."zipcode", x2."country" 
from "assetxs.address" x2 

내가 PostgreSQL의 도구를 실행하려고했습니다 (작동하지 않습니다 물론 이는 내가을 제거하기 위해 필요에서 테이블 이름 작동하도록.

테이블 이름을 사용할 때 어떤 검색어에 ""이 포함되지 않는 매끄러운 옵션이 있으면 알려주실 수 있습니까?

+1

가 있습니까 이것이 당신이 가지고있는 문제인지 확인하십시오. 인용 부호가없는 식별자는 PostgreSQL에서 소문자로 변환됩니다. 예에서는 따옴표를 제거하면 동일한 쿼리가 생성됩니다. –

+0

@AntsAasma, 나는 "assetxs.address"가 두통을주는 사람이라고 확신합니다. –

+0

http://stackoverflow.com/questions/6720626/how-do-i-specify-a-postgresql-schema-in-scalaquery –

답변

6

을 확인

object Addresses extends Table[Address](Some("assetxs"), "address") 
+0

해결 방법을 찾았고, 공유 해 주셔서 감사합니다 :-) 이것을 시도해보십시오 : jdbc : postgresql : // localhost : 5432/yourdatabase? searchpath = assetxs – Jack

+0

@JacobusR 예,하지만 작동하지 않는 이유를 모르겠습니다 ... –

4

스키마를 테이블 이름에 넣었습니다. 도트 문자가 들어있는 (인용 된) 테이블 이름은 SQL에서는 유효하지만 여기에서 원하는 것은 아닙니다. 결국 당신의 수입

수입 scala.slick.driver.PostgresDriver.simple._

+1

고맙지 만 스키마가 SQL 문에 더 이상 포함되지 않는 것 같습니다 : 'SQL 문 : select x2. "id", x2. "street", x2. "number" , x2. "zipcode", x2. "count ry"from "address"x2' –

+0

@CristianBoariu 실수를 저 지르지 않으면 스키마를 데이터베이스 URL의 일부로 지정할 수 있지만 그 권리를 테스트 할 수는 없습니다 지금. – Jack

+0

@JacobusR 나는'url? schema = assetx'처럼 그렇게 시도했지만 여전히 작동하지 않습니다 ... –

-2

당신은 단지 잘못된 드라이버를 사용 : 별도로 스키마를 지정해야 나는이 문제를 해결할 수 있었다.

난 단지 테이블 이름을 지정합니다

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

:

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

및 검색 할 때 내 스키마를 포함하는 내 PostgreSQL의 conf의 변경 (그것은 그 매끄러운 만 public 스키마에 찾고 같다)

이제는 작동합니다.

+0

나는 당신이 지정한 import를 이미 사용하고 있습니다 :'import scala.slick.driver.PostgresDriver.simple._' –

3

솔루션은 내가 liquibase와 매끄러운를 사용하여 H2 (테스트)와 Postgres (생산) 모두와 함께 일하고 싶을 때 발견했습니다. 당신의 슬릭 표에서 소문자와

  • 스틱이 수소의 URL 설정에서

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

  • 개체를 다음과 같이 지정해야합니다 DATABASE_TO_UPPER = (이 상위 인에서 테이블 및 열 이름을 방지 거짓) INIT 스키마 주위에 따옴표를 붙이십시오 (이렇게하면 스키마가 대문자로 처리되지 않습니다)
  • liquibase 스크립트에서 스키마 이름을 지정할 때 H2가 대문자로 시도하지 않도록 따옴표를 붙여야합니다.이 문제가 계속 (나 같은) 스칼라 이민자를 괴롭 히고 있기 때문에
2

, 나는 작은 연구를 수행하고 이러한 application.conf는 슬릭 3.1.1이 성공적으로 완료되었습니다 발견과 PostgreSQL 9.5했습니다

postgres.devenv = { 
    url = "jdbc:postgresql://localhost:5432/dbname?currentSchema=customSchema" 
    user = "user" 
    password = "password" 
    driver = org.postgresql.Driver 
} 
관련 문제