72 lines
1.5 KiB
Markdown
72 lines
1.5 KiB
Markdown
# 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`:
|
|
|
|
```typescript
|
|
export * from "./pg";
|
|
```
|
|
|
|
Make sure you have a valid config file with a connection string:
|
|
|
|
```yaml
|
|
postgres:
|
|
connection_string: postgresql://postgres:postgres@localhost:5432
|
|
```
|
|
|
|
You can run an ephemeral Postgres database for local development using Docker:
|
|
|
|
```bash
|
|
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`:
|
|
|
|
```typescript
|
|
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.
|
|
|
|
```bash
|
|
npm run db:pg:generate
|
|
npm run db:pg:push
|
|
```
|
|
|
|
### SQLite
|
|
|
|
```bash
|
|
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.
|