dbschema 0.1.2

Define database schema's as HCL files, and generate idempotent SQL migrations
Documentation
table "users" {
  schema = "public"
  column "id" {
    type = "serial"
    nullable = false
  }
  column "updated_at" {
    type = "timestamptz"
    nullable = true
  }
  primary_key { columns = ["id"] }
}

function "set_updated_at" {
  schema   = "public"
  language = "plpgsql"
  returns  = "trigger"
  replace  = true
  body = <<-SQL
    BEGIN
      NEW.updated_at = now();
      RETURN NEW;
    END;
  SQL
}

trigger "users_updated_at" {
  schema   = "public"
  table    = "users"
  timing   = "BEFORE"
  events   = ["UPDATE"]
  level    = "ROW"
  function = "set_updated_at"
}

test "trigger" {
  assert = [
    "SELECT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'users_updated_at')"
  ]
}

test "trigger_behavior" {
  setup = [
    "INSERT INTO public.users DEFAULT VALUES",
    "UPDATE public.users SET updated_at = updated_at"
  ]
  assert = [
    "SELECT COUNT(*) = 1 FROM public.users WHERE updated_at IS NOT NULL"
  ]
}