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

R2DBC dan enum (PostgreSQL)

Diuji dengan org.springframework.data:spring-data-r2dbc:1.0.0.RELEASE dan io.r2dbc:r2dbc-postgresql:0.8.1.RELEASE .

Versi Kotlin.

  1. Tentukan kelas enum

    enum class Mood {
        UNKNOWN,
        HAPPY,
        SAD
    }
    
  2. Buat codec khusus

    class MoodCodec(private val allocator: ByteBufAllocator) :  Codec<Mood> {
        override fun canEncodeNull(type: Class<*>): Boolean = false
    
        override fun canEncode(value: Any): Boolean = value is Mood
    
        override fun encode(value: Any): Parameter {
            return Parameter(Format.FORMAT_TEXT, oid) {
                ByteBufUtils.encode(allocator, (value as Mood).name)
            }
        }
    
        override fun canDecode(dataType: Int, format: Format, type: Class<*>): Boolean = dataType == oid
    
        override fun decode(buffer: ByteBuf?, dataType: Int, format: Format, type: Class<out Mood>): Mood? {
            buffer ?: return null
            return Mood.valueOf(ByteBufUtils.decode(buffer))
        }
    
        override fun type(): Class<*> = Mood::class.java
    
        override fun encodeNull(): Parameter =
            Parameter(Format.FORMAT_TEXT, oid, Parameter.NULL_VALUE)
    
        companion object {
            // Get form `select oid from pg_type where typname = 'mood'`
            private const val oid = YOUR_ENUM_OID
        }
    }
    
  3. Daftarkan codecnya

    Anda mungkin perlu mengubah runtimeOnly("io.r2dbc:r2dbc-postgresql") untuk implementation("io.r2dbc:r2dbc-postgresql")

    @Configuration
    @EnableR2dbcRepositories
    class AppConfig : AbstractR2dbcConfiguration() {
        override fun connectionFactory(): ConnectionFactory = PostgresqlConnectionConfiguration.builder()
            .port(5432) // Add your config here.
            .codecRegistrar { _, allocator, registry ->
                registry.addFirst(MoodCodec(allocator))
                Mono.empty()
            }.build()
            .let { PostgresqlConnectionFactory(it) }
    }
    



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah pg_prepare() menyiapkan pernyataan (bukan PDO) mencegah SQL-Injection?

  2. Gabungkan baris postgres dan ganti nilai dengan yang terbaru jika bukan nol

  3. Menggunakan PgBouncer Connection Pooler untuk PostgreSQL dengan ClusterControl 1.8.2

  4. Membuat kata sandi pengguna postgresql

  5. pilih bersarang menggunakan hitungan untuk menghitung setiap baris di Postgres