Quick verdict
Choose Amazon Redshift when you are on AWS and need a managed data warehouse for large analytical queries across many tables and sources, and you accept a different SQL dialect and data model. Choose PostgreSQL for the application database: row-level changes, enforced constraints, triggers and the full PostgreSQL type system. Do not treat Redshift as "big PostgreSQL": AWS's own documentation warns that shared syntax does not mean identical behaviour, so most teams run both, with Aurora or RDS for PostgreSQL replicating into Redshift through a zero-ETL integration.
Amazon Redshift is AWS's managed data warehouse. AWS's documentation says it "is based on PostgreSQL", but also that its storage and query execution engine "are completely different from the PostgreSQL implementation": data is stored by column with compression encodings, queries run in parallel across compute nodes coordinated by a leader node, and features suited to OLTP, such as secondary indexes and efficient single-row changes, were left out. It comes as provisioned clusters (AWS now recommends its Graviton-based RG node type, generally available since May 2026, with RA3 as the current generation) or as Redshift Serverless, billed by capacity used.
PostgreSQL is the open source object-relational database server, released under the PostgreSQL License. It is a general-purpose engine with a strong transactional focus: enforced constraints, MVCC, many index types, triggers, a rich type system (arrays, jsonb, ranges, UUID) and an extension ecosystem. postgresql.org lists 18.6 as the current release. On AWS it is available as Amazon RDS for PostgreSQL and Aurora PostgreSQL.
Side by side
| Aspect | Amazon Redshift | PostgreSQL |
|---|---|---|
| Designed for | Analytical (OLAP) and BI queries over large datasets | General purpose, with a strong focus on transactional (OLTP) workloads |
| Storage and execution | Columnar, compressed, distributed across compute nodes; leader node plans queries | Row-oriented heap tables on one server; parallel query within that server |
| Constraints | Primary key, unique and foreign key are informational only (not enforced); used by the planner | Primary key, unique, foreign key, check and exclusion constraints are enforced |
| Physical design | No indexes; distribution style (DISTSTYLE, DISTKEY) and sort keys instead |
B-tree, GIN, GiST, BRIN and other indexes; declarative partitioning |
| Missing PostgreSQL features (per AWS) | Triggers, sequences, table partitioning, tablespaces, inheritance, full text search, collations | All part of core PostgreSQL |
| Semi-structured data | SUPER type (up to 16 MB per value) queried with PartiQL; PostgreSQL JSON, arrays and hstore are unsupported |
json, jsonb, arrays, hstore extension |
| Isolation | SNAPSHOT (default for new clusters and workgroups) or SERIALIZABLE | Read Committed (default), Repeatable Read, Serializable |
| Deployment | AWS only: provisioned clusters (RG, RA3) or Redshift Serverless | Self-hosted anywhere, or managed by AWS (RDS, Aurora) and many other providers |
| Licence | Proprietary AWS service | PostgreSQL License (open source) |
| Main trade-off | Not a drop-in PostgreSQL: different dialect, unenforced keys, AWS lock-in | Single-server row store; large analytical scans compete with the application workload |
Key differences
Same roots, different engine
Redshift's PostgreSQL heritage shows in its SQL syntax and PG-prefixed catalog tables. AWS previously recommended PostgreSQL JDBC and psqlODBC drivers for it, and now recommends its own Amazon Redshift drivers instead. That is where the similarity ends. AWS states plainly that you should not "assume that the semantics of elements that Amazon Redshift and PostgreSQL have in common are identical", and its documentation keeps three lists of what Redshift does not support. The most important for anyone moving from PostgreSQL:
- Features: indexes, triggers, sequences, table partitioning (range and list), tablespaces, inheritance, exclusion and check constraints, collations, full text search, table functions, SQL/MED, and the
psqlclient (AWS supports its own RSQL client instead). Primary key, unique and foreign key constraints can be declared but are not enforced. - Data types: arrays,
BYTEA,BIT, composite, enumerated, range, network address,SERIAL/BIGSERIAL,MONEY,UUID,XML,HSTOREand PostgreSQL'sJSON. - Functions: among others
STRING_AGG(),ARRAY_AGG(),GENERATE_SERIES(),FORMAT(),REGEXP_MATCHES(),IS DISTINCT FROM,ROLLBACK TO SAVEPOINTand the array, range, text search and XML function families. AWS notes that some unsupported functions do not raise an error when they run only on the leader node, which is not a sign that they are supported.
Other behaviour differs quietly: Redshift's default VACUUM is a full vacuum that also re-sorts rows, ALTER TABLE ... ADD COLUMN adds one column per statement, and trailing spaces in VARCHAR values are ignored in comparisons. AWS also announced that Python UDFs are no longer supported after 30 June 2026, with enforcement in phases; SQL UDFs and Lambda UDFs remain.
Physical design: distribution and sort keys instead of indexes
In PostgreSQL you design indexes for the queries you run. In Redshift there are no indexes; you choose how rows are distributed across nodes and how they are sorted on disk, or let Redshift choose with AUTO. Auto-numbering also changes: Redshift has IDENTITY(seed, step) columns instead of sequences and SERIAL.
-- Amazon Redshift
CREATE TABLE sales (
sale_id BIGINT IDENTITY(1,1),
customer_id INT NOT NULL,
sale_date DATE NOT NULL,
amount DECIMAL(12,2),
PRIMARY KEY (sale_id) -- informational only, not enforced
)
DISTSTYLE KEY DISTKEY (customer_id)
SORTKEY (sale_date);-- PostgreSQL
CREATE TABLE sales (
sale_id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
customer_id int NOT NULL REFERENCES customers (customer_id),
sale_date date NOT NULL,
amount numeric(12,2)
);
CREATE INDEX ON sales (sale_date);Because Redshift does not enforce the primary key, loading the same batch twice leaves duplicate rows. AWS also warns that the planner assumes declared keys are valid, so if the data violates them some queries can return incorrect results (a SELECT DISTINCT can return duplicates, for example). Redshift does enforce NOT NULL. Deduplication becomes part of your load process, typically with MERGE, which Redshift supports (including a REMOVE DUPLICATES simplified mode). PostgreSQL rejects the duplicate at insert time, or handles it with INSERT ... ON CONFLICT, which Redshift does not have.
Dialect gaps you will hit when porting queries
String aggregation is the classic example. PostgreSQL's STRING_AGG is on Redshift's unsupported list; Redshift uses LISTAGG:
-- PostgreSQL
SELECT region, STRING_AGG(city, ', ' ORDER BY city) AS cities
FROM stores GROUP BY region;
-- Amazon Redshift
SELECT region, LISTAGG(city, ', ') WITHIN GROUP (ORDER BY city) AS cities
FROM stores GROUP BY region;JSON is the second. PostgreSQL's json/jsonb operators do not exist in Redshift; semi-structured data goes into a SUPER column, loaded with JSON_PARSE or COPY, and is navigated with PartiQL dot and bracket notation. Date series built with generate_series(), regular-expression splitting and array functions all need rewriting as well. In our view, expect a port of PostgreSQL reporting SQL to Redshift to be a review of every query, not a connection-string change.
Getting PostgreSQL data into Redshift: zero-ETL and federated queries
AWS provides two documented paths that avoid building your own pipeline:
- Zero-ETL integrations replicate data continuously from a source into a Redshift provisioned cluster or Serverless workgroup after an initial load. Supported sources listed in October 2026 are Aurora MySQL, Aurora PostgreSQL, RDS for MySQL, RDS for PostgreSQL, RDS for Oracle, Oracle Database@AWS, DynamoDB, several SaaS applications, and self-managed MySQL, PostgreSQL, SQL Server and Oracle. Regional support varies by source.
- Federated queries let Redshift query live tables in RDS or Aurora PostgreSQL (9.6 or later) and RDS or Aurora MySQL (5.6 or later) through an external schema, pushing predicates down to the source. They are read-only, do not work with concurrency scaling, and add load (and, on Aurora, I/O charges) to the operational database.
Neither path is free of trade-offs. Zero-ETL moves data continuously, so you pay for storage and compute on both sides; federated queries hit your production database each time. For occasional joins of live operational data with warehouse data, federated queries are simpler; for dashboards over the full history, replicate.
When you do not need Redshift yet
The decision is often less "Redshift or PostgreSQL" than "do we need a warehouse at all". If reporting fits on a PostgreSQL read replica, and partitioning, BRIN indexes and materialised views keep queries acceptable, a second system adds cost and a new dialect for little gain. Columnar options in between include PostgreSQL extensions, an embedded engine such as DuckDB reading PostgreSQL, or a dedicated columnar server such as ClickHouse; see DuckDB vs PostgreSQL and ClickHouse vs PostgreSQL. The general trade-offs are covered in data warehouse vs database.
Redshift becomes the better fit when analytics joins data from several systems, history grows into many terabytes, many analysts or BI tools query at once, or reporting load is affecting the application. If you are choosing between warehouses rather than whether to have one, see BigQuery vs Redshift and Snowflake vs PostgreSQL.
Pricing and licensing
Amazon Redshift has two billing models. Provisioned clusters are billed per node-hour (on demand, or lower with reserved instances), with Redshift Managed Storage billed separately per GB-month on RG and RA3 nodes. Redshift Serverless is billed in RPU-hours per second with a 60-second minimum; one RPU provides 16 GB of memory, the default base capacity is 128 RPUs, and base capacity can be set from 4 RPUs (in listed regions) up to 512, or 1,024 in some regions. Querying data in Amazon S3 with Redshift Spectrum is billed per TB scanned; the pricing page states Spectrum is not required on RG nodes, which include a built-in data lake query engine. Zero-ETL integrations may add charges on the source and target services.
As one example, the Redshift pricing page lists Serverless compute at USD 0.375 per RPU-hour in US East (N. Virginia) in October 2026, plus managed storage at USD 0.024 per GB-month in the same region. Use the AWS Pricing Calculator for node-based clusters and other regions. New Serverless users are offered a USD 300 credit that expires after 90 days.
PostgreSQL is free under the PostgreSQL License. Managed PostgreSQL on AWS (RDS or Aurora) is billed by instance or capacity, storage, I/O and backup according to AWS's price lists.
Pricing checked on the vendors' official pages on 7 October 2026. Prices change; confirm before buying.
Where each one leads
Amazon Redshift strengths
- Columnar, compressed storage with parallel execution across nodes, designed for large analytical queries
- Managed on AWS, with a Serverless option that scales capacity and bills per second
- Zero-ETL integrations from Aurora, RDS and other sources, plus read-only federated queries to RDS and Aurora
- Queries data in Amazon S3 alongside warehouse tables
- Familiar PostgreSQL-derived syntax and catalog for many basic queries
PostgreSQL strengths
- Enforced primary key, unique, foreign key, check and exclusion constraints
- Indexes, triggers, sequences, partitioning and full text search
- Rich types: arrays, jsonb, ranges, UUID, network addresses and extensions
- Runs anywhere, under a permissive open source licence, with many managed providers
- Efficient single-row inserts, updates and deletes under high concurrency
Limitations
Amazon Redshift limitations
- Many PostgreSQL features, types and functions are unsupported, and shared syntax can behave differently
- Primary, unique and foreign keys are not enforced, so duplicates must be handled in loading
- No indexes; performance depends on distribution and sort key design or AUTO settings
- AWS only, with a proprietary licence
- Python UDFs are no longer supported after 30 June 2026; existing ones need migrating
PostgreSQL limitations
- Row storage on a single server is not designed for scans over very large fact tables
- Heavy reporting competes with application traffic unless moved to replicas
- Scaling analytics across nodes needs an extension such as Citus or another system
- No built-in columnar storage or S3 querying in core PostgreSQL
When to choose each
Choose Amazon Redshift if
- You are on AWS and analytical data from several sources is growing into many terabytes
- Many analysts or BI tools query the same data concurrently
- You want reporting load off your Aurora or RDS database, replicated with zero-ETL
- You want a managed warehouse with a pay-per-use Serverless option
Choose PostgreSQL if
- You need the application's system of record with enforced constraints and triggers
- Reporting volume is moderate and fits on PostgreSQL or a read replica
- You rely on arrays, jsonb, ranges, full text search or PostgreSQL extensions
- You want to avoid cloud lock-in or run outside AWS
When neither is right
- You are not on AWS, or want a serverless warehouse billed per query: see BigQuery vs Redshift and BigQuery vs PostgreSQL.
- You need analytics on files or inside a pipeline with no server at all: see DuckDB vs PostgreSQL.
- You need real-time analytics on event or log data with an open source engine: see ClickHouse vs PostgreSQL.
- You want a multi-cloud warehouse: see Snowflake vs PostgreSQL.
Final recommendation
Redshift and PostgreSQL share ancestry, not a role. PostgreSQL should run the application: enforced constraints, triggers, rich types and efficient row-level changes. Amazon Redshift is for analytics at a scale or concurrency that PostgreSQL handles poorly, on AWS, and it asks you to design around distribution and sort keys, unenforced keys and its own dialect. For AWS teams the usual pattern is Aurora or RDS for PostgreSQL feeding Redshift through zero-ETL, with federated queries for occasional live lookups. If your reports still run comfortably on a PostgreSQL replica, you probably do not need Redshift yet.
Frequently asked questions
Is Amazon Redshift based on PostgreSQL?
Yes, AWS documents that Redshift is based on PostgreSQL, but also that its storage and execution engine are completely different. Indexes, triggers, sequences, partitioning, many data types (including arrays, UUID and JSON) and many functions (including STRING_AGG and GENERATE_SERIES) are not supported.
Can I use psql or PostgreSQL drivers with Redshift?
AWS lists the psql query tool as unsupported and provides the Amazon Redshift RSQL client instead. It previously recommended PostgreSQL JDBC and ODBC drivers but now recommends its own Amazon Redshift drivers. GUI tools such as DBeaver and DataGrip have Redshift connections.
Does Redshift enforce primary keys?
No. Primary key, unique and foreign key constraints are informational only: Redshift accepts them and the query planner uses them, but it does not reject rows that violate them. Deduplicate during loading, for example with MERGE.
How do I get data from Aurora PostgreSQL into Redshift?
AWS offers zero-ETL integrations from Aurora PostgreSQL and RDS for PostgreSQL (and other sources) that replicate data continuously into a Redshift cluster or Serverless workgroup. For read-only queries against live data without copying it, Redshift federated queries can reach RDS or Aurora PostgreSQL 9.6 or later.
Does Redshift support JSON?
Not PostgreSQL's JSON type. Redshift stores semi-structured data in its SUPER type, up to 16 MB per value, and queries it with PartiQL syntax.
Sources
- Amazon Redshift: Amazon Redshift and PostgreSQL
- Amazon Redshift: Unsupported PostgreSQL features
- Amazon Redshift: Unsupported PostgreSQL data types
- Amazon Redshift: Unsupported PostgreSQL functions
- Amazon Redshift: Features implemented differently
- Amazon Redshift: Table constraints
- Amazon Redshift: Isolation levels
- Amazon Redshift: SUPER type
- Amazon Redshift: MERGE
- Amazon Redshift: Zero-ETL integrations
- Amazon Redshift: Federated queries
- Amazon Redshift: Federated query considerations
- Amazon Redshift Serverless: Compute capacity
- Amazon Redshift pricing
- AWS What's New: Amazon Redshift RG instances (May 2026)
- PostgreSQL home page (current releases)
- PostgreSQL License
Checked October 2026.
How we research comparisons: our editorial method.