I replaced my entire tech stack with Postgres...
By Fireship
Key Concepts
PostgreSQL, extensions, JSONB, PG Cron, unlogged tables, PG Vector, PG AI, TS Vector, PG GraphQL, Electric SQL, PG Crypto, PG JWT, row-level security, PG Mooncake, PostgREST, full-stack application.
PostgreSQL as a Web Development Platform
The video explores using PostgreSQL, a relational database, for a wide range of web development tasks typically handled by specialized tools and SaaS platforms. The central argument is that PostgreSQL's extensibility and advanced features allow developers to consolidate many functionalities within a single database, potentially reducing complexity and costs.
1. Unstructured Data with JSONB
- Main Point: PostgreSQL supports storing and querying unstructured data using the
JSONB
data type. - Details: A table can be created with a
JSONB
column to store raw JSON strings. Data within the JSON can be accessed and filtered using specific syntax inSELECT
statements andWHERE
clauses. - Example: The video demonstrates creating a table with a
JSONB
column and inserting JSON data, then querying specific fields within the JSON objects.
2. Scheduled Tasks with PG Cron
- Main Point: The
PG Cron
extension enables scheduling and running SQL statements as cron jobs directly within PostgreSQL. - Process:
- Install the
PG Cron
extension. - Write a SQL statement to define the cron schedule, job name, and the SQL code to be executed.
- Install the
- Application: Automating tasks like data deletion or aggregation on a daily basis.
3. In-Memory Caching with Unlogged Tables
- Main Point: PostgreSQL can be used as a "poor man's Redis" by leveraging unlogged tables for caching.
- Process:
- Create an unlogged table. Unlogged tables skip write-ahead logging, improving performance but sacrificing durability.
- Configure PostgreSQL to store the table in shared buffers, keeping the data in RAM.
- Use the
autovacuum
daemon to prevent table bloat. - Optionally, use
PG Cron
to automatically delete expired entries based on a time-to-live (TTL) value.
- Technical Terms:
- Write-Ahead Logging (WAL): A standard database feature where changes are written to a log file before being applied to data files, ensuring durability (the "D" in ACID).
- Unlogged Table: A table that bypasses WAL, offering faster performance but lower durability.
- Shared Buffers: A portion of RAM allocated to PostgreSQL for caching frequently accessed data.
- Autovacuum: A PostgreSQL process that automatically reclaims space occupied by deleted or updated rows.
4. Vector Database with PG Vector and PG AI
- Main Point: The
PG Vector
extension allows PostgreSQL to function as a vector database for AI applications. - Details:
PG Vector
provides a vector data type for storing multi-dimensional data.- Supports nearest neighbor queries based on distance metrics like L2 distance.
- The
PG AI
extension extends this functionality by enabling data loading and vectorization directly within SQL.
- Application: Building AI applications that use Retrieval Augmented Generation (RAG) stacks.
5. Full-Text Search with TS Vector
- Main Point: PostgreSQL has built-in support for full-text search using the
TS Vector
data type. - Process:
- The
TS Vector
type breaks down a string into smaller parts. - A Generalized Inverted Index (GIN) is created for improved search performance.
- Queries are performed using the
@@
operator to find the most likely results.
- The
- Technical Terms:
- TS Vector: A data type representing a preprocessed document optimized for full-text search.
- Generalized Inverted Index (GIN): An index structure that allows efficient searching for words or phrases within a text.
6. GraphQL API with PG GraphQL
- Main Point: The
PG GraphQL
extension transforms a PostgreSQL database into a GraphQL API. - Process:
- Install the
PG GraphQL
extension. - Write GraphQL resolvers directly in SQL code.
- Install the
- Benefits: Eliminates the need for separate servers, libraries, or paid SaaS middlemen for creating a GraphQL API.
7. Real-time Data Synchronization with Electric SQL
- Main Point: Electric SQL is a sync layer that sits between the database and front-end code to provide real-time data synchronization.
- Functionality: Ensures that end-users always have fresh data without requiring manual data fetching or WebSocket implementation.
- Note: Electric SQL is not a PG extension but a separate component that integrates with PostgreSQL.
8. Authentication with PG Crypto and PG JWT
- Main Point: User authentication can be implemented directly in PostgreSQL using the
PG Crypto
andPG JWT
extensions. - Process:
- Use
PG Crypto
to hash passwords and generate salts for security. - Use
PG JWT
to cryptographically sign JSON Web Tokens (JWTs) for user session validation.
- Use
- Security: Hashing passwords with salts protects against attackers accessing plain text passwords in case of a database breach.
9. Row-Level Security
- Main Point: PostgreSQL offers built-in row-level security (RLS) to control data access based on user roles and permissions.
- Process:
- Create policies that define rules about how data can be accessed.
- Verify the current user's token before executing queries.
- Application: Ensuring that users can only read and write data that they own.
10. Time-Series Data and Analytics with PG Mooncake
- Main Point:
PG Mooncake
turns PostgreSQL into a time-series database for analytics. - Features:
- Supports column store tables for efficient storage and querying of time-series data.
- Uses DuckDB execution for fast analytics.
- Data can be exported to cloud storage buckets and visualized with tools like Grafana.
11. RESTful API with PostgREST
- Main Point:
PostgREST
automatically turns a PostgreSQL database into a RESTful API. - Functionality: Allows querying database tables via HTTP requests, returning data in JSON format.
- Features: Supports filtering, pagination, and authentication.
12. Serving Static Assets
- Main Point: It is possible to store HTML, CSS, and JavaScript files directly in the database.
- Extreme Example: Some developers are even running React Server Components within PostgreSQL.
Conclusion
The video demonstrates the versatility of PostgreSQL as a comprehensive web development platform. By leveraging extensions and built-in features, developers can potentially replace numerous specialized tools and SaaS services with a single, powerful database. However, the video emphasizes the importance of critical thinking and choosing the right tool for the job, cautioning against blindly replacing established solutions without careful consideration. The main takeaway is that PostgreSQL offers a viable and often overlooked alternative for building full-stack applications with a reduced reliance on external services.
Notable Quotes
- "It's no coincidence that America's homeless population started to rise immediately after the release of nextjs in 2016" - Humorous hyperbole to emphasize the complexity of modern web development.
- "...just because you can do something in postgress doesn't mean you should..." - A crucial disclaimer about the responsible use of these advanced techniques.
Chat with this Video
AI-PoweredHi! I can answer questions about this video "I replaced my entire tech stack with Postgres...". What would you like to know?