PostgreSQL
SQLDen mest avancerede open-source relationel database med stærk fokus på standards og extensibility.
Beskrivelse
PostgreSQL (ofte kaldet Postgres) er en kraftfuld, enterprise-grade open-source database kendt for sin robusthed, feature-rigdom og standards compliance. Udviklet siden 1986, er den berømt for sin evne til at håndtere komplekse queries, avancerede datatyper (JSON, arrays, ranges, geometric types) og custom extensions. PostgreSQL følger strengt ACID principper og understøtter advanced features som window functions, CTEs, recursive queries, full-text search, og MVCC (Multi-Version Concurrency Control) for høj concurrency. Den er valget for applikationer der kræver data integritet, komplekse relationer og analytical workloads. Med extensions som PostGIS (geospatial), TimescaleDB (time-series) og pgvector (AI embeddings), kan PostgreSQL tilpasses næsten enhver use case. Store firmaer som Apple, Instagram, Spotify og Reddit stoler på PostgreSQL.
Features
- •Advanced indexing (B-tree, Hash, GiST, GIN, BRIN)
- •Full ACID compliance med MVCC
- •Native JSON og JSONB support
- •Table inheritance og partitioning
- •Foreign Data Wrappers (query eksterne data)
- •Advanced full-text search
- •Custom data types og operators
- •Parallel query execution
Query Eksempel
-- Opret tabel med advanced features
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(200) NOT NULL,
price NUMERIC(10, 2),
metadata JSONB,
tags TEXT[],
created_at TIMESTAMP DEFAULT NOW()
);
-- GIN index til JSONB
CREATE INDEX idx_metadata ON products USING GIN (metadata);
-- Indsæt data med JSON
INSERT INTO products (name, price, metadata, tags)
VALUES (
'Laptop',
8999.00,
'{"brand": "Dell", "ram": "16GB", "storage": "512GB SSD"}',
ARRAY['electronics', 'computers']
);
-- Advanced query med JSONB og CTE
WITH expensive_products AS (
SELECT
name,
price,
metadata->>'brand' as brand,
tags
FROM products
WHERE price > 5000
)
SELECT
brand,
COUNT(*) as product_count,
AVG(price) as avg_price
FROM expensive_products
WHERE 'electronics' = ANY(tags)
GROUP BY brand
ORDER BY avg_price DESC;Anvendelsesområder
- •Enterprise applikationer med kompleks business logic
- •Geospatial applikationer med PostGIS
- •Financial systems med strict ACID requirements
- •Data warehousing og analytics
- •Multi-tenant SaaS applikationer
Fordele
- ✓Mest feature-rig open-source database
- ✓Excellent til komplekse queries
- ✓Stærk data integritet og consistency
- ✓Extensible med custom functions og types
- ✓Aktiv community og development
Ulemper
- ✗Mere kompleks at lære end MySQL
- ✗Kræver mere tuning for optimal performance
- ✗Tungere ressourceforbrug
- ✗Lidt langsommere til simple queries
- ✗Mindre udbredt end MySQL (færre hosting options)
Bedst til
- →Komplekse analytical queries
- →Applikationer med høje data integrity krav
- →Geospatial data (med PostGIS)
- →JSON/semi-structured data
- →Multi-tenant systemer
Ikke anbefalet til
- ⚠Meget simple CRUD applikationer (overkill)
- ⚠Extreme horizontal scaling (brug NoSQL)
- ⚠Ultra-høj write throughput
- ⚠Ressource-begrænsede environments
- ⚠Teams uden database expertise