fosrl.pangolin/server/db
2025-06-04 15:56:16 -04:00
..
pg look for ipv6 in brackets and fix cors headers in install config 2025-06-04 15:56:16 -04:00
sqlite Merge branch 'dev' into postgres 2025-06-04 12:04:28 -04:00
index.ts support postgresql as database option 2025-06-04 12:02:07 -04:00
names.json Fixing stuff 2024-10-14 21:59:35 -04:00
names.ts support postgresql as database option 2025-06-04 12:02:07 -04:00
README.md look for ipv6 in brackets and fix cors headers in install config 2025-06-04 15:56:16 -04:00

Database

Pangolin can use a Postgres or SQLite database to store its data.

Development

Postgres

To use Postgres, edit server/db/index.ts to export all from server/db/pg/index.ts:

export * from "./pg";

Make sure you have a valid config file with a connection string:

postgres:
    connection_string: postgresql://postgres:postgres@localhost:5432

You can run an ephemeral Postgres database for local development using Docker:

docker run -d \
  --name postgres \
  --rm \
  -p 5432:5432 \
  -e POSTGRES_PASSWORD=postgres \
  -v $(mktemp -d):/var/lib/postgresql/data \
  postgres:17

Schema

server/db/pg/schema.ts and server/db/sqlite/schema.ts contain the database schema definitions. These need to be kept in sync with with each other.

Stick to common data types and avoid Postgres-specific features to ensure compatibility with SQLite.

SQLite

To use SQLite, edit server/db/index.ts to export all from server/db/sqlite/index.ts:

export * from "./sqlite";

No edits to the config are needed. If you keep the Postgres config, it will be ignored.

Generate and Push Migrations

Ensure drizzle-kit is installed.

Postgres

You must have a connection string in your config file, as shown above.

npm run db:pg:generate
npm run db:pg:push

SQLite

npm run db:sqlite:generate
npm run db:sqlite:push

Build Time

There is a dockerfile for each database type. The dockerfile swaps out the server/db/index.ts file to use the correct database type.