1CREATE TABLE "accounts" (
2 "id" bigserial PRIMARY KEY, -- or "id" uuid PRIMARY KEY
3 "owner" varchar NOT NULL,
4 "balance" bigint NOT NULL,
5 "is_blocked" boolean NOT NULL DEFAULT false,
6 "currency" varchar NOT NULL,
7 "created_at" timestamptz NOT NULL DEFAULT (now())
8);
1CREATE INDEX ON "accounts" ("owner");
Create Unique Index (prevent row with duplicate field)
1CREATE UNIQUE INDEX ON "accounts" ("owner", "currency");
1CREATE INDEX ON "transfers" ("from_account_id", "to_account_id");
1ALTER TABLE "tableA" ADD FOREIGN KEY ("tableB_id") REFERENCES "tableB" ("id");
1ALTER TABLE IF EXISTS "table_name" DROP CONTRAINT IF EXISTS "tableA_tableB_fkey";
Set a Field to NOT NULL or NULL
1ALTER TABLE "table_name" ALTER COLUMN "field" SET NOT NULL;
2ALTER TABLE "table_name" ALTER COLUMN "field" DROP NOT NULL;
1ALTER TABLE "table_name" ADD "field" varchar;
1ALTER TABLE "table_name" DROP COLUMN "field";
1ALTER TABLE "table_name" RENAME COLUMN "fieldA" to "fieldB";
1-- name: CreateUser :one
2INSERT INTO users (
3 username, email, passowrdHash
4) VALUES (
5 $1, $2, $3
6)
7RETURNING *;
1-- name: GetAccount :one
2SELECT * FROM accounts
3WHERE id = $1 LIMIT 1;
1-- name: ListAccounts :many
2SELECT * FROM accounts
3WHERE owner = $1
4ORDER BY id
5LIMIT $2
6OFFSET $3;
1-- name: UpdateAccount :one
2UPDATE accounts
3SET balance = $2
4WHERE id = $1
5RETURNING *;
1-- name: DeleteAccount :exec
2DELETE FROM accounts WHERE id = $1;
1-- name: AddAccountBalance :one
2UPDATE accounts
3SET balance = balance + sqlc.arg(amount)
4WHERE id = sqlc.arg(id)
5RETURNING *;