Create a schema directory and define your desired schema using standard SQL files:
Copy
mkdir -p schema/tables schema/functions
Create schema/tables/users.sql:
Copy
CREATE TABLE users ( id BIGSERIAL PRIMARY KEY, email VARCHAR(255) NOT NULL UNIQUE, name VARCHAR(100), created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW());CREATE INDEX idx_users_email ON users(email);CREATE INDEX idx_users_created_at ON users(created_at);
Create schema/tables/orders.sql:
Copy
CREATE TABLE orders ( id BIGSERIAL PRIMARY KEY, user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE, total NUMERIC(12, 2) NOT NULL, status VARCHAR(20) NOT NULL DEFAULT 'pending', created_at TIMESTAMPTZ NOT NULL DEFAULT NOW());CREATE INDEX idx_orders_user_id ON orders(user_id);CREATE INDEX idx_orders_status ON orders(status);
Organize your SQL files by type (tables, views, functions, etc.) for maintainability. pgtofu will automatically resolve dependencies regardless of file organization.
-- Migration generated by pgtofu-- Changes: ADD_TABLE (public.users)BEGIN;CREATE TABLE IF NOT EXISTS public.users ( id BIGSERIAL PRIMARY KEY, email VARCHAR(255) NOT NULL UNIQUE, name VARCHAR(100), created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW());CREATE INDEX IF NOT EXISTS idx_users_email ON public.users(email);CREATE INDEX IF NOT EXISTS idx_users_created_at ON public.users(created_at);COMMIT;