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

R2DBC и enum (PostgreSQL)

Тествано с org.springframework.data:spring-data-r2dbc:1.0.0.RELEASE и io.r2dbc:r2dbc-postgresql:0.8.1.RELEASE .

Версия на Kotlin.

  1. Дефинирайте клас enum

    enum class Mood {
        UNKNOWN,
        HAPPY,
        SAD
    }
    
  2. Създайте персонализиран кодек

    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. Регистрирайте кодека

    Може да се нуждаете от промяна на runtimeOnly("io.r2dbc:r2dbc-postgresql") към 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. Динамично генериране на колони за кръстосана таблица в PostgreSQL

  2. Индекс с няколко колони на 3 полета с хетерогенни типове данни

  3. не може да създаде автоматично инкрементиращ първичен ключ с flask-sqlalchemy

  4. Сравнителен анализ, управлявани PostgreSQL облачни решения – част първа:Amazon Aurora

  5. Добавяне на външен ключ към релсов модел