Arrays & Composite Types
Postgres-native collections and cautions. Practical PostgreSQL patterns for production queries.
Search across all documentation pages
Postgres-native collections and cautions. Practical PostgreSQL patterns for production queries.
SELECT ARRAY[1,2,3] || 4 AS arr;
SELECT unnest(ARRAY['a','b']) AS tag;When to reach for this: This pattern appears in application or reporting SQL you maintain.
CREATE TYPE app.point_pair AS (x int, y int);
CREATE TABLE app.samples (id int, segment app.point_pair);
INSERT INTO app.samples VALUES (1, ROW(1,2));What this demonstrates:
| Alternative | Use When | Don't Use When |
|---|---|---|
| ORM query builder | Team standardizes on one stack | Complex SQL becomes opaque |
| Materialized view | Repeat expensive aggregates | Needs refresh strategy |
| Warehouse replica | Heavy BI scans | Not for OLTP latency |
Use multiline template strings or SQL files; lint in CI.
When you need unique rows without aggregates.
Sort can use index order if query matches index columns.
Stack versions: This page was written for PostgreSQL 18.4 (stable 18, maintenance 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x, and PostGIS 3.5+.
Reviewed by Chris St. John·Last updated Jul 19, 2026