PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Playframework विकास फ़ाइलें पोस्टग्रेज़ और h2 दोनों के साथ संगत हैं

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन ऐसा लगता है कि कुछ साल बाद भी कोई स्पष्ट समाधान नहीं है। एक अल्पकालिक सुधार के रूप में, प्ले 2.4.x-2.5.x (अभी तक केवल वहां परीक्षण किया गया) में, आप कस्टम इवोल्यूशन रीडर बनाकर परीक्षण के दौरान इवोल्यूशन लागू होने के तरीके को बदल सकते हैं:

package support

import play.api.db.evolutions.{ClassLoaderEvolutionsReader, Evolutions, ResourceEvolutionsReader}

import java.io.{ByteArrayInputStream, InputStream}
import java.nio.charset.StandardCharsets
import scala.io.Source
import scala.util.Try

class EvolutionTransformingReader(
    classLoader: ClassLoader = classOf[ClassLoaderEvolutionsReader].getClassLoader,
    prefix: String = "")
  extends ResourceEvolutionsReader {

  def loadResource(db: String, revision: Int): Option[InputStream] =
    for {
      stream <- Option(classLoader.getResourceAsStream(prefix + Evolutions.resourceName(db, revision)))
      lines <- Try(Source.fromInputStream(stream).getLines).toOption
      updated = lines map convertPostgresLinesToH2
    } yield convertLinesToInputStream(updated)

  private val ColumnRename = """(?i)\s*ALTER TABLE (\w+) RENAME COLUMN (\w+) TO (\w+);""".r

  private def convertPostgresLinesToH2(line: String): String =
    line match {
      case ColumnRename(tableName, oldColumn, newColumn) =>
        s"""ALTER TABLE $tableName ALTER COLUMN $oldColumn RENAME TO $newColumn;"""
      case _ => line
    }

  private def convertLinesToInputStream(lines: Iterator[String]): InputStream =
    new ByteArrayInputStream(lines.mkString("\n").getBytes(StandardCharsets.UTF_8))
}

फिर इसे उस स्थान पर पास करें जहां आप अपने परीक्षणों के दौरान विकास लागू करते हैं:

Evolutions.applyEvolutions(registry.database, new EvolutionTransformingReader())

ध्यान दें कि पाठक अभी भी एक बहुत ही गूंगा स्थिति में है (यह मानता है कि SQL कथन ऑनलाइनर हैं, जिसकी गारंटी नहीं है), लेकिन यह किसी को भी शुरू करने के लिए पर्याप्त होना चाहिए।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जाँच करें कि क्या डेटाबेस शेल का उपयोग करके PostgreSQL में मौजूद है

  2. postgresql बिना अंतराल के अनुक्रम उत्पन्न करता है

  3. पोस्टग्रेज में तालिका के लिए क्वेरी अनुदान

  4. postgresql त्रुटि:उपयोगकर्ता अनुरोध के कारण कथन रद्द करना

  5. डुप्लिकेट मानों की सूची संख्या