PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

File evolusi kerangka kerja yang kompatibel dengan postgres dan h2

saya tahu ini adalah posting yang lebih lama, tetapi sepertinya masih belum ada solusi yang jelas beberapa tahun kemudian. sebagai perbaikan jangka pendek, dalam permainan 2.4.x-2.5.x (sejauh ini hanya diuji di sana), Anda dapat mengubah cara penerapan evolusi selama pengujian dengan membuat pembaca evolusi khusus:

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

lalu berikan ke tempat Anda menerapkan evolusi selama pengujian:

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

perhatikan bahwa pembaca masih dalam kondisi yang cukup bodoh (diasumsikan pernyataan SQL adalah satu baris, yang tidak dijamin), tetapi ini sudah cukup untuk membuat siapa pun memulai.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan Umum Saat Memigrasikan Database PostgreSQL Dari Lokal ke AWS RDS

  2. Bagaimana cara saya menanyakan semua baris dalam radius 5 mil dari koordinat saya?

  3. Vertx JDBC client queryWithParams - bagaimana cara menambahkan daftar?

  4. PostgreSQL:antara dengan datetime

  5. Penyortiran kumpulan kueri:Menentukan susunan kolom untuk kueri Django ORM