27 lines
914 B
SQL
27 lines
914 B
SQL
ALTER TABLE channel_messages
|
|
ADD COLUMN IF NOT EXISTS views_count INT NOT NULL DEFAULT 0;
|
|
|
|
CREATE TABLE IF NOT EXISTS channel_message_viewers (
|
|
channel_id BIGINT NOT NULL,
|
|
message_id INT NOT NULL,
|
|
viewer_user_id BIGINT NOT NULL,
|
|
viewed_at INT NOT NULL DEFAULT 0,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
PRIMARY KEY (channel_id, message_id, viewer_user_id),
|
|
CONSTRAINT channel_message_viewers_positive_check CHECK (
|
|
channel_id > 0 AND message_id > 0 AND viewer_user_id > 0
|
|
)
|
|
) PARTITION BY HASH (channel_id);
|
|
|
|
DO $$
|
|
DECLARE
|
|
i int;
|
|
BEGIN
|
|
FOR i IN 0..63 LOOP
|
|
EXECUTE format(
|
|
'CREATE TABLE IF NOT EXISTS channel_message_viewers_p%s PARTITION OF channel_message_viewers FOR VALUES WITH (MODULUS 64, REMAINDER %s)',
|
|
lpad(i::text, 2, '0'),
|
|
i
|
|
);
|
|
END LOOP;
|
|
END $$;
|