Skip to the content.

MQTT PostgreSQL DB incoming messages requirements

Table creation for incoming messages.

CREATE TABLE incoming_message2 (
id BIGINT GENERATED BY DEFAULT AS IDENTITY,
payload BYTEA NOT NULL,
received_at TIMESTAMPTZ NOT NULL,
hour_of_day INT NOT NULL
) PARTITION BY LIST (hour_of_day);

CREATE TABLE incoming_message_0 PARTITION OF incoming_message2 FOR VALUES IN (0);
CREATE TABLE incoming_message_1 PARTITION OF incoming_message2 FOR VALUES IN (1);
CREATE TABLE incoming_message_2 PARTITION OF incoming_message2 FOR VALUES IN (2);
CREATE TABLE incoming_message_3 PARTITION OF incoming_message2 FOR VALUES IN (3);
CREATE TABLE incoming_message_4 PARTITION OF incoming_message2 FOR VALUES IN (4);
CREATE TABLE incoming_message_5 PARTITION OF incoming_message2 FOR VALUES IN (5);
CREATE TABLE incoming_message_6 PARTITION OF incoming_message2 FOR VALUES IN (6);
CREATE TABLE incoming_message_7 PARTITION OF incoming_message2 FOR VALUES IN (7);
CREATE TABLE incoming_message_8 PARTITION OF incoming_message2 FOR VALUES IN (8);
CREATE TABLE incoming_message_9 PARTITION OF incoming_message2 FOR VALUES IN (9);
CREATE TABLE incoming_message_10 PARTITION OF incoming_message2 FOR VALUES IN (10);
CREATE TABLE incoming_message_11 PARTITION OF incoming_message2 FOR VALUES IN (11);
CREATE TABLE incoming_message_12 PARTITION OF incoming_message2 FOR VALUES IN (12);
CREATE TABLE incoming_message_13 PARTITION OF incoming_message2 FOR VALUES IN (13);
CREATE TABLE incoming_message_14 PARTITION OF incoming_message2 FOR VALUES IN (14);
CREATE TABLE incoming_message_15 PARTITION OF incoming_message2 FOR VALUES IN (15);
CREATE TABLE incoming_message_16 PARTITION OF incoming_message2 FOR VALUES IN (16);
CREATE TABLE incoming_message_17 PARTITION OF incoming_message2 FOR VALUES IN (17);
CREATE TABLE incoming_message_18 PARTITION OF incoming_message2 FOR VALUES IN (18);
CREATE TABLE incoming_message_19 PARTITION OF incoming_message2 FOR VALUES IN (19);
CREATE TABLE incoming_message_20 PARTITION OF incoming_message2 FOR VALUES IN (20);
CREATE TABLE incoming_message_21 PARTITION OF incoming_message2 FOR VALUES IN (21);
CREATE TABLE incoming_message_22 PARTITION OF incoming_message2 FOR VALUES IN (22);
CREATE TABLE incoming_message_23 PARTITION OF incoming_message2 FOR VALUES IN (23);

CREATE INDEX idx_incoming_message2_received_at ON incoming_message2 (received_at);
CREATE INDEX idx_incoming_message_0_received_at ON incoming_message_0 (received_at);
CREATE INDEX idx_incoming_message_1_received_at ON incoming_message_1 (received_at);
CREATE INDEX idx_incoming_message_2_received_at ON incoming_message_2 (received_at);
CREATE INDEX idx_incoming_message_3_received_at ON incoming_message_3 (received_at);
CREATE INDEX idx_incoming_message_4_received_at ON incoming_message_4 (received_at);
CREATE INDEX idx_incoming_message_5_received_at ON incoming_message_5 (received_at);
CREATE INDEX idx_incoming_message_6_received_at ON incoming_message_6 (received_at);
CREATE INDEX idx_incoming_message_7_received_at ON incoming_message_7 (received_at);
CREATE INDEX idx_incoming_message_8_received_at ON incoming_message_8 (received_at);
CREATE INDEX idx_incoming_message_9_received_at ON incoming_message_9 (received_at);
CREATE INDEX idx_incoming_message_10_received_at ON incoming_message_10 (received_at);
CREATE INDEX idx_incoming_message_11_received_at ON incoming_message_11 (received_at);
CREATE INDEX idx_incoming_message_12_received_at ON incoming_message_12 (received_at);
CREATE INDEX idx_incoming_message_13_received_at ON incoming_message_13 (received_at);
CREATE INDEX idx_incoming_message_14_received_at ON incoming_message_14 (received_at);
CREATE INDEX idx_incoming_message_15_received_at ON incoming_message_15 (received_at);
CREATE INDEX idx_incoming_message_16_received_at ON incoming_message_16 (received_at);
CREATE INDEX idx_incoming_message_17_received_at ON incoming_message_17 (received_at);
CREATE INDEX idx_incoming_message_18_received_at ON incoming_message_18 (received_at);
CREATE INDEX idx_incoming_message_19_received_at ON incoming_message_19 (received_at);
CREATE INDEX idx_incoming_message_20_received_at ON incoming_message_20 (received_at);
CREATE INDEX idx_incoming_message_21_received_at ON incoming_message_21 (received_at);
CREATE INDEX idx_incoming_message_22_received_at ON incoming_message_22 (received_at);
CREATE INDEX idx_incoming_message_23_received_at ON incoming_message_23 (received_at);

JPA Class

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.PrePersist;
import jakarta.persistence.Table;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Entity
@Table(name = "incoming_message")
@Getter
@Setter
@NoArgsConstructor
@Builder(toBuilder = true)
public class IncomingMessage {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private byte[] payload;

    private Instant receivedAt;

    private int hourOfDay;

    @PrePersist
    protected void onCreate() {
        receivedAt = Instant.now();
        hourOfDay = ZonedDateTime.ofInstant(receivedAt, ZoneOffset.UTC).getHour();
    }
}