PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

R2DBC và enum (PostgreSQL)

Đã kiểm tra với org.springframework.data:spring-data-r2dbc:1.0.0.RELEASEio.r2dbc:r2dbc-postgresql:0.8.1.RELEASE .

Phiên bản Kotlin.

  1. Xác định một lớp enum

    enum class Mood {
        UNKNOWN,
        HAPPY,
        SAD
    }
    
  2. Tạo codec tùy chỉnh

    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. Đăng ký codec

    Bạn có thể cần thay đổi runtimeOnly("io.r2dbc:r2dbc-postgresql") đến 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. Các chỉ mục JSON của postgres có đủ hiệu quả so với các bảng chuẩn hóa cổ điển không?

  2. Cách triển khai Chọn để cập nhật trong EF Core

  3. Chuyển đổi giá trị cột dấu thời gian thành kỷ nguyên trong truy vấn chọn PostgreSQL

  4. Chèn số dấu phẩy động vào bảng bằng libpq

  5. postgres:tạo bảng trong cơ sở dữ liệu từ dòng lệnh