Default core-table bootstrap
CREATE_REQUIRED_TABLES is true by default. You can change it if needed. When enabled, Flowless creates all core tables internally with a secure bootstrap flow.
# default
CREATE_REQUIRED_TABLES=true
# optional override
CREATE_REQUIRED_TABLES=false
PostgreSQL dialect
-- PostgreSQL migration helper
-- Source style: pubflow flowless core (portable SQL-first)
CREATE TABLE IF NOT EXISTS users (
id TEXT PRIMARY KEY,
name TEXT,
last_name TEXT,
email TEXT NOT NULL UNIQUE,
user_type TEXT NOT NULL DEFAULT 'customer',
picture TEXT,
user_name TEXT UNIQUE,
password_hash TEXT,
is_verified BOOLEAN NOT NULL DEFAULT FALSE,
phone TEXT UNIQUE,
two_factor BOOLEAN NOT NULL DEFAULT FALSE,
lang TEXT,
metadata JSONB,
-- Enhanced profile
mobile TEXT,
tmz TEXT,
bio TEXT,
dob TEXT,
recovery_email TEXT,
display_name TEXT,
first_time BOOLEAN NOT NULL DEFAULT TRUE,
deleted_at TEXT,
deletion_reason TEXT,
gender TEXT,
reference_id TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_users_email ON users(email);
CREATE INDEX IF NOT EXISTS idx_users_user_name ON users(user_name);
CREATE INDEX IF NOT EXISTS idx_users_user_type ON users(user_type);
-- Optional upsert example
INSERT INTO users (id, email, name, user_type, lang) VALUES ('user_1', 'dev@pubflow.com', 'Dev', 'customer', 'en')
ON CONFLICT (id) DO UPDATE SET updated_at = CURRENT_TIMESTAMP;
These snippets are migration starters. Keep your IDs, indexes, and constraints aligned with your production requirements.