i think i like tables

main
Bel LaPointe 2025-12-10 12:47:00 -07:00
parent 43738a1d78
commit 6f0b268321
1 changed files with 39 additions and 0 deletions

View File

@ -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
}