Packages

Small Postgres + SQLite library for Gleam. Query builder for 80% of CRUD, typed raw SQL for the rest.

Current section

Files

Jump to
gloo src example migrations.gleam
Raw

src/example/migrations.gleam

import gloo/migration.{type Migration}
import gloo/pg
pub fn all() -> List(Migration) {
[create_users(), create_posts(), create_follows()]
}
fn create_users() -> Migration {
migration.create_table(
version: 20_260_430_000_001,
name: "create_users",
table: "users",
columns: [
pg.column("id", pg.BigSerial) |> pg.primary_key,
pg.column("email", pg.Text) |> pg.not_null |> pg.unique,
pg.column("name", pg.Text) |> pg.not_null,
pg.column("inserted_at", pg.TimestampTz)
|> pg.not_null
|> pg.default("NOW()"),
],
)
}
fn create_posts() -> Migration {
migration.create_table(
version: 20_260_430_000_002,
name: "create_posts",
table: "posts",
columns: [
pg.column("id", pg.BigSerial) |> pg.primary_key,
pg.column("user_id", pg.BigInt) |> pg.not_null,
pg.column("body", pg.Text) |> pg.not_null,
pg.column("inserted_at", pg.TimestampTz)
|> pg.not_null
|> pg.default("NOW()"),
],
)
|> migration.with_down("DROP TABLE IF EXISTS posts")
}
fn create_follows() -> Migration {
migration.create_table(
version: 20_260_430_000_003,
name: "create_follows",
table: "follows",
columns: [
pg.column("follower_id", pg.BigInt) |> pg.not_null,
pg.column("followee_id", pg.BigInt) |> pg.not_null,
pg.column("inserted_at", pg.TimestampTz)
|> pg.not_null
|> pg.default("NOW()"),
],
)
}