sql >> Database >  >> RDS >> PostgreSQL

R2DBC en enum (PostgreSQL)

Getest met org.springframework.data:spring-data-r2dbc:1.0.0.RELEASE en io.r2dbc:r2dbc-postgresql:0.8.1.RELEASE .

Kotlin-versie.

  1. Definieer een opsommingsklasse

    enum class Mood {
        UNKNOWN,
        HAPPY,
        SAD
    }
    
  2. Maak een aangepaste codec

    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. Registreer de codec

    Mogelijk moet u runtimeOnly("io.r2dbc:r2dbc-postgresql") wijzigen naar 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. Foutcode:1215. Kan geen beperking voor externe sleutels toevoegen (buitenlandse sleutels)

  2. Verbinding Toegang geweigerd voor gebruiker www-data

  3. MySql-FOUT! De server is gestopt zonder het PID-bestand bij te werken

  4. Hoe willekeurige parameters naar Oracle-trigger te sturen?