From 6f0b26832176c9aa514ba7e55d5706a0a40d9776 Mon Sep 17 00:00:00 2001 From: Bel LaPointe <153096461+breel-render@users.noreply.github.com> Date: Wed, 10 Dec 2025 12:47:00 -0700 Subject: [PATCH] i think i like tables --- cmd/pg-pubsub-demo/main.go | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/cmd/pg-pubsub-demo/main.go b/cmd/pg-pubsub-demo/main.go index ecb5505..41b90cc 100644 --- a/cmd/pg-pubsub-demo/main.go +++ b/cmd/pg-pubsub-demo/main.go @@ -29,7 +29,46 @@ func run(ctx context.Context) error { } return with.PSQL(ctx, *c, func(pg *sql.DB) error { + log.Println("setup...") if _, err := pg.ExecContext(ctx, ` + DROP SCHEMA "pubsub" CASCADE; + + CREATE SCHEMA IF NOT EXISTS "pubsub"; + + CREATE TABLE IF NOT EXISTS "pubsub".topic ( + id UUID NOT NULL DEFAULT GEN_RANDOM_UUID() PRIMARY KEY, + created_at TIMESTAMP DEFAULT NOW(), + updated_at TIMESTAMP DEFAULT NOW(), + partitions INTEGER NOT NULL DEFAULT 10, + name TEXT UNIQUE + ); + + CREATE TABLE IF NOT EXISTS "pubsub".group ( + id UUID NOT NULL DEFAULT GEN_RANDOM_UUID() PRIMARY KEY, + created_at TIMESTAMP DEFAULT NOW(), + updated_at TIMESTAMP DEFAULT NOW(), + name TEXT UNIQUE + ); + + CREATE TABLE IF NOT EXISTS "pubsub".group_topic_partition_offset ( + group_name TEXT REFERENCES "pubsub".group(name) ON DELETE CASCADE, + topic_name TEXT REFERENCES "pubsub".topic(name) ON DELETE CASCADE, + partition INTEGER NOT NULL DEFAULT 0, + partition_offset INTEGER NOT NULL, + PRIMARY KEY (group_name, topic_name, partition) + ); + + CREATE TABLE IF NOT EXISTS "pubsub".data ( + topic_name TEXT REFERENCES "pubsub".topic(name) ON DELETE CASCADE, + partition INTEGER NOT NULL DEFAULT 0, + partition_offset INTEGER NOT NULL DEFAULT 0, + payload BYTEA NOT NULL, + PRIMARY KEY (topic_name, partition, partition_offset) + ) PARTITION BY HASH (topic_name, partition); + + CREATE TABLE IF NOT EXISTS "pubsub".data_0 PARTITION OF "pubsub".data FOR VALUES WITH (modulus 3, remainder 0); + CREATE TABLE IF NOT EXISTS "pubsub".data_1 PARTITION OF "pubsub".data FOR VALUES WITH (modulus 3, remainder 1); + CREATE TABLE IF NOT EXISTS "pubsub".data_2 PARTITION OF "pubsub".data FOR VALUES WITH (modulus 3, remainder 2); `); err != nil { return err }