PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Файлове за развитие на Playframework, съвместими с postgres и h2

знам, че това е по-стар пост, но изглежда, че няма очевидно решение няколко години по-късно. като краткосрочна корекция, в play 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 на AWS Aurora

  2. Postgres:трябва ли да се създават индекси преди или след попълване на таблици

  3. Как мога да напиша SQL заявка, за да изчисля количеството компоненти, продавани с техните родителски модули? (Postgres 11/рекурсивен CTE?)

  4. Android OS и postgreSQL

  5. създаването на разширение pg_cron в docker-entrypoint-initdb.d е неуспешно