PostgreSQL数据库中分区,如何配置主键? 返回

SqlSugar 沟通中
7 289

PG数据库中,以年月来对表分区,如何设置主键?无法单独设置自增id为主键。主要是后期用ORM,没有主键不好操作

热忱回答7

  • fate sta fate sta VIP0
    1个月前

    一般雪花ID作主键,文档:雪花ID

    0 回复
  • csbird23 csbird23 VIP0
    1个月前

    CREATE TABLE sensor_data1 (

        id          BIGINT  PRIMARY KEY,

        device_id   TEXT NOT NULL,

        temperature NUMERIC(5,2),

        humidity    NUMERIC(5,2),

        record_time TIMESTAMP NOT NULL DEFAULT now()

    ) PARTITION BY RANGE (record_time);



    //==================================

    错误提示:

    ERROR:  unique constraint on partitioned table must include all partitioning columns

    DETAIL:  PRIMARY KEY constraint on table "sensor_data1" lacks column "record_time" which is part of the partition key.



    因为用了record_time字段(时间,年月)来分区,所以,设置id为单独的主键就不行,如果不设置主键(取消id的PRIMARY KEY ),那么Sugar中进行增删改查的操作时,又变成了无主键?

    0 回复
  • csbird23 csbird23 VIP0
    1个月前

    -- 复合主键可以创建,但是,以后操作的时候,都要用复合主键。是否可以操作的时候用id作为唯一的主键?

    CREATE TABLE sensor_data1 (

        id          BIGINT ,

        device_id   TEXT NOT NULL,

        temperature NUMERIC(5,2),

        humidity    NUMERIC(5,2),

        record_time TIMESTAMP NOT NULL DEFAULT now(),

        PRIMARY KEY (id, record_time)  -- 复合主键

    ) PARTITION BY RANGE (record_time);

    0 回复
  • fate sta fate sta VIP0
    1个月前

    这个表不用ORM建表就行了。


    你实体加上主键就行了。ORM中实体只是CRUD的一个标识,不一定要和数据库一致。

    0 回复
  • csbird23 csbird23 VIP0
    1个月前

    是否可以理解为:

    在数据库中建表时,用PRIMARY KEY (id, record_time)  -- 复合主键

    然后ORM中的实体,只配置id为主键?这样CRUD操作的时候,是以id为唯一标识来操作?

    0 回复
  • fate sta fate sta VIP0
    1个月前

    是的

    0 回复
  • csbird23 csbird23 VIP0
    1个月前

    明白了,感谢,感谢

    0 回复