184 lines
4.1 KiB
Markdown
184 lines
4.1 KiB
Markdown
# PostgreSQL - Database Services
|
|
|
|
## Table of Contents
|
|
- [Overview](#overview)
|
|
- [What is PostgreSQL?](#what-is-postgresql)
|
|
- [Why Use PostgreSQL?](#why-use-postgresql)
|
|
- [Configuration in AI-Homelab](#configuration-in-ai-homelab)
|
|
- [Official Resources](#official-resources)
|
|
- [Database Instances](#database-instances)
|
|
|
|
## Overview
|
|
|
|
**Category:** Relational Database
|
|
**Docker Image:** [postgres](https://hub.docker.com/_/postgres)
|
|
**Default Stack:** `development.yml`
|
|
**Ports:** 5432 (internal)
|
|
|
|
## What is PostgreSQL?
|
|
|
|
PostgreSQL is an advanced open-source relational database. It's more feature-rich than MySQL/MariaDB, with better support for complex queries, JSON, full-text search, and extensions. Many consider it the best open-source database.
|
|
|
|
### Key Features
|
|
- **ACID Compliant:** Reliable transactions
|
|
- **JSON Support:** Native JSON/JSONB
|
|
- **Extensions:** PostGIS, pg_trgm, etc.
|
|
- **Full-Text Search:** Built-in FTS
|
|
- **Complex Queries:** Advanced SQL
|
|
- **Replication:** Streaming replication
|
|
- **Performance:** Excellent for complex queries
|
|
- **Free & Open Source:** PostgreSQL license
|
|
|
|
## Why Use PostgreSQL?
|
|
|
|
1. **Feature-Rich:** More features than MySQL
|
|
2. **Standards Compliant:** SQL standard
|
|
3. **JSON Support:** Native JSON queries
|
|
4. **Extensions:** Powerful ecosystem
|
|
5. **Reliability:** ACID compliant
|
|
6. **Performance:** Great for complex queries
|
|
7. **Community:** Strong development
|
|
|
|
## Configuration in AI-Homelab
|
|
|
|
AI-Homelab uses separate PostgreSQL instances for different applications.
|
|
|
|
## Official Resources
|
|
|
|
- **Website:** https://www.postgresql.org
|
|
- **Documentation:** https://www.postgresql.org/docs
|
|
- **Docker Hub:** https://hub.docker.com/_/postgres
|
|
|
|
## Database Instances
|
|
|
|
### GitLab Database (gitlab-postgres)
|
|
|
|
```yaml
|
|
gitlab-postgres:
|
|
image: postgres:14
|
|
container_name: gitlab-postgres
|
|
restart: unless-stopped
|
|
networks:
|
|
- traefik-network
|
|
environment:
|
|
- POSTGRES_DB=gitlabhq_production
|
|
- POSTGRES_USER=gitlab
|
|
- POSTGRES_PASSWORD=${GITLAB_DB_PASSWORD}
|
|
volumes:
|
|
- /opt/stacks/development/gitlab-postgres/data:/var/lib/postgresql/data
|
|
```
|
|
|
|
**Purpose:** GitLab platform database
|
|
**Location:** `/opt/stacks/development/gitlab-postgres/data`
|
|
|
|
### Development Database (postgres)
|
|
|
|
```yaml
|
|
postgres:
|
|
image: postgres:latest
|
|
container_name: postgres
|
|
restart: unless-stopped
|
|
networks:
|
|
- traefik-network
|
|
ports:
|
|
- "5432:5432"
|
|
environment:
|
|
- POSTGRES_USER=admin
|
|
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
|
|
- POSTGRES_DB=postgres
|
|
volumes:
|
|
- /opt/stacks/development/postgres/data:/var/lib/postgresql/data
|
|
```
|
|
|
|
**Purpose:** General development database
|
|
**Location:** `/opt/stacks/development/postgres/data`
|
|
|
|
## Management
|
|
|
|
### Access Database
|
|
|
|
```bash
|
|
# Connect to PostgreSQL
|
|
docker exec -it postgres psql -U admin -d postgres
|
|
|
|
# Or specific database
|
|
docker exec -it postgres psql -U admin -d dbname
|
|
```
|
|
|
|
### Common Commands
|
|
|
|
```sql
|
|
-- List databases
|
|
\l
|
|
|
|
-- Connect to database
|
|
\c database_name
|
|
|
|
-- List tables
|
|
\dt
|
|
|
|
-- Describe table
|
|
\d table_name
|
|
|
|
-- List users
|
|
\du
|
|
|
|
-- Quit
|
|
\q
|
|
```
|
|
|
|
### Backup Database
|
|
|
|
```bash
|
|
# Backup single database
|
|
docker exec postgres pg_dump -U admin dbname > backup.sql
|
|
|
|
# Backup all databases
|
|
docker exec postgres pg_dumpall -U admin > all_dbs_backup.sql
|
|
|
|
# Restore database
|
|
docker exec -i postgres psql -U admin -d dbname < backup.sql
|
|
```
|
|
|
|
### Create Database/User
|
|
|
|
```sql
|
|
-- Create database
|
|
CREATE DATABASE myapp;
|
|
|
|
-- Create user
|
|
CREATE USER myuser WITH PASSWORD 'password';
|
|
|
|
-- Grant privileges
|
|
GRANT ALL PRIVILEGES ON DATABASE myapp TO myuser;
|
|
```
|
|
|
|
## Summary
|
|
|
|
PostgreSQL provides advanced database services for:
|
|
- GitLab (if using PostgreSQL backend)
|
|
- Development applications
|
|
- Applications needing JSON support
|
|
- Complex query requirements
|
|
- Extensions like PostGIS
|
|
|
|
**Key Points:**
|
|
- More advanced than MySQL
|
|
- Native JSON support
|
|
- Powerful extensions
|
|
- ACID compliance
|
|
- Excellent performance
|
|
- Standards compliant
|
|
- Free and open-source
|
|
|
|
**Remember:**
|
|
- Use strong passwords
|
|
- Regular backups critical
|
|
- Monitor disk space
|
|
- VACUUM periodically
|
|
- Use pgAdmin for GUI management
|
|
- Test backups work
|
|
- Separate containers for isolation
|
|
|
|
PostgreSQL powers your advanced applications!
|