2012-11-14 6 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) 
} 

मैंने देखा है कि schema.table के नाम "" में दिखाई देता है तो कथन है:

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

जो निश्चित रूप से (काम नहीं करता मैं PostgreSQL उपकरण में इसे चलाने के लिए कोशिश की है और मैंको दूर करने के लिए आवश्यकतालिका का नाम यह काम करने के लिए।

क्या आप कृपया मुझे बता सकते हैं कि तालिका नामों का उपयोग करते समय "" किसी भी प्रश्न में शामिल करने के लिए कोई स्लिम विकल्प नहीं है?

+1

आप कर रहे हैं सुनिश्चित करें कि यह समस्या आपके पास है? Ungoted पहचानकर्ता PostgreSQL में निचले मामले में परिवर्तित कर रहे हैं, आपके उदाहरण में उद्धरण हटाने के परिणामस्वरूप एक समान क्वेरी होगी। –

+0

@ एंट्सएजामा, मुझे यकीन है कि "परिसंपत्तियां। एड्रेस" वह है जो सिरदर्द देता है। –

+0

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

उत्तर

6

जाँच अपने आयात अंत में: आप अलग स्कीमा निर्दिष्ट करना मैं इस मुद्दे को हल करने में सक्षम था।

मैं केवल तालिका नाम निर्दिष्ट करें:

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

और मेरे PostgreSQL conf बदलने खोजते समय मेरी स्कीमा शामिल करने के लिए (ऐसा लगता है कि चालाक केवल public स्कीमा पर विचार कर रही है):

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

और अब यह काम करता है।

+0

आपको यह देखने में खुशी हुई कि आपको कोई कामकाज मिल गया है, और साझा करने के लिए धन्यवाद :-) क्या आपने यह कोशिश की है: jdbc: postgresql: // लोकलहोस्ट: 5432/yourdatabase? searchpath = assetsxs – Jack

+0

@ जैकोबसआर हाँ, लेकिन मुझे समझ में नहीं आता कि यह क्यों काम नहीं करता है ... –

4

आपने स्कीमा को टेबल नाम में रखा है। एक (उद्धृत) तालिका नाम जिसमें एक डॉट वर्ण होता है वह SQL में मान्य है लेकिन यह वह नहीं है जो आप यहां चाहते हैं। ,

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

धन्यवाद लेकिन ऐसा लगता है कि इस तरह स्कीमा अब एसक्यूएल कथन में शामिल नहीं है: 'एसक्यूएल कथन: x2 का चयन करें। "आईडी", x2। "सड़क", x2। "संख्या" , x2। "पिनकोड", x2। अगर मैं भूल नहीं कर रहा हूँ x2' –

+0

@CristianBoariu "" प्रेषक "पता ry गिनती", आप डेटाबेस URL के भाग के रूप में स्कीमा निर्दिष्ट कर सकते हैं, लेकिन मुझे लगता है कि सही परीक्षण नहीं कर सकते अभी व। – Jack

+0

@ जैकोबसआर मैंने इसे 'url? Schema = assetsx' की तरह भी कोशिश की है लेकिन फिर भी यह काम नहीं करता है ... –

-2

तुम बस गलत ड्राइवर का उपयोग कर रहे

आयात scala.slick.driver.PostgresDriver.simple._

+0

मैं पहले से आपके द्वारा निर्दिष्ट आयात का उपयोग करता हूं: 'import scala.slick.driver.PostgresDriver.simple._' –

3

तरल पदार्थ और स्लिम का उपयोग करके एच 2 (परीक्षण) और पोस्टग्रेस (उत्पादन) दोनों के साथ काम करना चाहते समय समाधान मिला। अपने स्लिक तालिका में लोअरकेस साथ

  • स्टिक वस्तुओं

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

  • अपने एच 2 यूआरएल config में आप का उल्लेख करना होगा DATABASE_TO_UPPER = false (यह ऊपरी होने से मेज और स्तंभ नाम से बचाता है cased) और आईएनआईटी स्कीमा के चारों ओर उद्धरण चिह्न डालें (यह स्कीमा को ऊपरी cased होने से रोकता है)

url = jdbc:h2:mem:test;MODE=PostgreSQL;DATABASE_TO_UPPER=false;INIT=create schema if not exists \"my_schema\"\;SET SCHEMA \"my_schema\""

  • जब तरल पदार्थ स्क्रिप्ट में स्कीमा नाम निर्दिष्ट करते हैं तो इसे भी उद्धृत किया जाना चाहिए ताकि 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 
}