fosrl.pangolin/server/db
2025-06-27 18:55:04 +08:00
..
pg Implemented a resouce landing page for members and Implemented basic user details (full name) and password reset via that is sent via SMTP or if SMTP is disabled will be shown to the admin to copy. 2025-06-27 18:55:04 +08:00
sqlite Implemented a resouce landing page for members and Implemented basic user details (full name) and password reset via that is sent via SMTP or if SMTP is disabled will be shown to the admin to copy. 2025-06-27 18:55:04 +08: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.