Files
silo/migrations/002_sequence_by_name.sql
2026-01-24 15:03:17 -06:00

36 lines
1020 B
PL/PgSQL

-- Migration: 002_sequence_by_name
-- Adds a sequence table that uses schema name instead of UUID for simpler operation
BEGIN;
-- Create a simpler sequences table using schema name
CREATE TABLE IF NOT EXISTS sequences_by_name (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
schema_name TEXT NOT NULL,
scope TEXT NOT NULL,
current_value INTEGER NOT NULL DEFAULT 0,
UNIQUE(schema_name, scope)
);
CREATE INDEX IF NOT EXISTS idx_sequences_by_name ON sequences_by_name(schema_name, scope);
-- Function to get next sequence by schema name
CREATE OR REPLACE FUNCTION next_sequence_by_name(
p_schema_name TEXT,
p_scope TEXT
) RETURNS INTEGER AS $$
DECLARE
v_next INTEGER;
BEGIN
INSERT INTO sequences_by_name (schema_name, scope, current_value)
VALUES (p_schema_name, p_scope, 1)
ON CONFLICT (schema_name, scope) DO UPDATE
SET current_value = sequences_by_name.current_value + 1
RETURNING current_value INTO v_next;
RETURN v_next;
END;
$$ LANGUAGE plpgsql;
COMMIT;