Comparison with RDS
Pigsty is a local-first RDS alternative released under AGPLv3, deployable on your own physical/virtual machines or cloud servers.
We’ve chosen Amazon AWS RDS for PostgreSQL (the global market leader) and Alibaba Cloud RDS for PostgreSQL (China’s market leader) as benchmarks for comparison.
Both Aliyun RDS and AWS RDS are closed-source cloud database services, available only through rental models on public clouds. The following comparison is based on the latest PostgreSQL 16 as of February 2024.
Feature Comparison
| Feature | Pigsty | Aliyun RDS | AWS RDS |
|---|---|---|---|
| Major Version Support | 13 - 18 | 13 - 18 | 13 - 18 |
| Read Replicas | Supports unlimited read replicas | Standby instances not exposed to users | Standby instances not exposed to users |
| Read/Write Splitting | Port-based traffic separation | Separate paid component | Separate paid component |
| Fast/Slow Separation | Supports offline ETL instances | Not available | Not available |
| Cross-Region DR | Supports standby clusters | Multi-AZ deployment supported | Multi-AZ deployment supported |
| Delayed Replicas | Supports delayed instances | Not available | Not available |
| Load Balancing | HAProxy / LVS | Separate paid component | Separate paid component |
| Connection Pool | Pgbouncer | Separate paid component: RDS | Separate paid component: RDS Proxy |
| High Availability | Patroni / etcd | Requires HA edition | Requires HA edition |
| Point-in-Time Recovery | pgBackRest / MinIO | Backup supported | Backup supported |
| Metrics Monitoring | Prometheus / Exporter | Free basic / Paid advanced | Free basic / Paid advanced |
| Log Collection | Loki / Promtail | Basic support | Basic support |
| Visualization | Grafana / Echarts | Basic monitoring | Basic monitoring |
| Alert Aggregation | AlertManager | Basic support | Basic support |
Key Extensions
Here are some important extensions compared based on PostgreSQL 16, as of 2024-02-28
| Extension | Pigsty RDS / PGDG Official Repo | Aliyun RDS | AWS RDS |
|---|---|---|---|
| Install Extensions | Free to install | Not allowed | Not allowed |
| Geospatial | PostGIS 3.4.2 | PostGIS 3.3.4 / Ganos 6.1 | PostGIS 3.4.1 |
| Point Cloud | PG PointCloud 1.2.5 | Ganos PointCloud 6.1 | |
| Vector Embedding | PGVector 0.6.1 / Svector 0.5.6 | pase 0.0.1 | PGVector 0.6 |
| Machine Learning | PostgresML 2.8.1 | ||
| Time Series | TimescaleDB 2.14.2 | ||
| Horizontal Scaling | Citus 12.1 | ||
| Columnar Storage | Hydra 1.1.1 | ||
| Full Text Search | pg_bm25 0.5.6 | ||
| Graph Database | Apache AGE 1.5.0 | ||
| GraphQL | PG GraphQL 1.5.0 | ||
| OLAP | pg_analytics 0.5.6 | ||
| Message Queue | pgq 3.5.0 | ||
| DuckDB | duckdb_fdw 1.1 | ||
| Fuzzy Tokenization | zhparser 1.1 / pg_bigm 1.2 | zhparser 1.0 / pg_jieba | pg_bigm 1.2 |
| CDC Extraction | wal2json 2.5.3 | wal2json 2.5 | |
| Bloat Management | pg_repack 1.5.0 | pg_repack 1.4.8 | pg_repack 1.5.0 |
AWS RDS PG Available Extensions
AWS RDS for PostgreSQL 16 available extensions (excluding PG built-in extensions)
| name | pg16 | pg15 | pg14 | pg13 | pg12 | pg11 | pg10 |
|---|---|---|---|---|---|---|---|
| amcheck | 1.3 | 1.3 | 1.3 | 1.2 | 1.2 | yes | 1 |
| auto_explain | yes | yes | yes | yes | yes | yes | yes |
| autoinc | 1 | 1 | 1 | 1 | null | null | null |
| bloom | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| bool_plperl | 1 | 1 | 1 | 1 | null | null | null |
| btree_gin | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 | 1.2 |
| btree_gist | 1.7 | 1.7 | 1.6 | 1.5 | 1.5 | 1.5 | 1.5 |
| citext | 1.6 | 1.6 | 1.6 | 1.6 | 1.6 | 1.5 | 1.4 |
| cube | 1.5 | 1.5 | 1.5 | 1.4 | 1.4 | 1.4 | 1.2 |
| dblink | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
| dict_int | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| dict_xsyn | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| earthdistance | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
| fuzzystrmatch | 1.2 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
| hstore | 1.8 | 1.8 | 1.8 | 1.7 | 1.6 | 1.5 | 1.4 |
| hstore_plperl | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| insert_username | 1 | 1 | 1 | 1 | null | null | null |
| intagg | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
| intarray | 1.5 | 1.5 | 1.5 | 1.3 | 1.2 | 1.2 | 1.2 |
| isn | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.1 |
| jsonb_plperl | 1 | 1 | 1 | 1 | 1 | null | null |
| lo | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
| ltree | 1.2 | 1.2 | 1.2 | 1.2 | 1.1 | 1.1 | 1.1 |
| moddatetime | 1 | 1 | 1 | 1 | null | null | null |
| old_snapshot | 1 | 1 | 1 | null | null | null | null |
| pageinspect | 1.12 | 1.11 | 1.9 | 1.8 | 1.7 | 1.7 | 1.6 |
| pg_buffercache | 1.4 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 |
| pg_freespacemap | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
| pg_prewarm | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.1 |
| pg_stat_statements | 1.1 | 1.1 | 1.9 | 1.8 | 1.7 | 1.6 | 1.6 |
| pg_trgm | 1.6 | 1.6 | 1.6 | 1.5 | 1.4 | 1.4 | 1.3 |
| pg_visibility | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
| pg_walinspect | 1.1 | 1 | null | null | null | null | null |
| pgcrypto | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 |
| pgrowlocks | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
| pgstattuple | 1.5 | 1.5 | 1.5 | 1.5 | 1.5 | 1.5 | 1.5 |
| plperl | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| plpgsql | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| pltcl | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| postgres_fdw | 1.1 | 1.1 | 1.1 | 1 | 1 | 1 | 1 |
| refint | 1 | 1 | 1 | 1 | null | null | null |
| seg | 1.4 | 1.4 | 1.4 | 1.3 | 1.3 | 1.3 | 1.1 |
| sslinfo | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
| tablefunc | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| tcn | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| tsm_system_rows | 1 | 1 | 1 | 1 | 1 | 1 | 1.1 |
| tsm_system_time | 1 | 1 | 1 | 1 | 1 | 1 | 1.1 |
| unaccent | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
| uuid-ossp | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
Aliyun RDS PG Available Extensions
Aliyun RDS for PostgreSQL 16 available extensions (excluding PG built-in extensions)
| name | pg16 | pg15 | pg14 | pg13 | pg12 | pg11 | pg10 | description |
|---|---|---|---|---|---|---|---|---|
| bloom | 1 | 1 | 1 | 1 | 1 | 1 | 1 | Provides a bloom filter-based index access method. |
| btree_gin | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 | 1.2 | Provides GIN operator class examples that implement B-tree equivalent behavior for multiple data types and all enum types. |
| btree_gist | 1.7 | 1.7 | 1.6 | 1.5 | 1.5 | 1.5 | 1.5 | Provides GiST operator class examples that implement B-tree equivalent behavior for multiple data types and all enum types. |
| citext | 1.6 | 1.6 | 1.6 | 1.6 | 1.6 | 1.5 | 1.4 | Provides a case-insensitive string type. |
| cube | 1.5 | 1.5 | 1.5 | 1.4 | 1.4 | 1.4 | 1.2 | Provides a data type for representing multi-dimensional cubes. |
| dblink | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | Cross-database table operations. |
| dict_int | 1 | 1 | 1 | 1 | 1 | 1 | 1 | Additional full-text search dictionary template example. |
| earthdistance | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | Provides two different methods to calculate great circle distances on the Earth’s surface. |
| fuzzystrmatch | 1.2 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | Determines similarities and distances between strings. |
| hstore | 1.8 | 1.8 | 1.8 | 1.7 | 1.6 | 1.5 | 1.4 | Stores key-value pairs in a single PostgreSQL value. |
| intagg | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | Provides an integer aggregator and an enumerator. |
| intarray | 1.5 | 1.5 | 1.5 | 1.3 | 1.2 | 1.2 | 1.2 | Provides some useful functions and operators for manipulating null-free integer arrays. |
| isn | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.1 | Validates input according to a hard-coded prefix list, also used for concatenating numbers during output. |
| ltree | 1.2 | 1.2 | 1.2 | 1.2 | 1.1 | 1.1 | 1.1 | For representing labels of data stored in a hierarchical tree structure. |
| pg_buffercache | 1.4 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 | Provides a way to examine the shared buffer cache in real time. |
| pg_freespacemap | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | Examines the free space map (FSM). |
| pg_prewarm | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.1 | Provides a convenient way to load data into the OS buffer or PostgreSQL buffer. |
| pg_stat_statements | 1.1 | 1.1 | 1.9 | 1.8 | 1.7 | 1.6 | 1.6 | Provides a means of tracking execution statistics of all SQL statements executed by a server. |
| pg_trgm | 1.6 | 1.6 | 1.6 | 1.5 | 1.4 | 1.4 | 1.3 | Provides functions and operators for alphanumeric text similarity, and index operator classes that support fast searching of similar strings. |
| pgcrypto | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 | Provides cryptographic functions for PostgreSQL. |
| pgrowlocks | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | Provides a function to show row locking information for a specified table. |
| pgstattuple | 1.5 | 1.5 | 1.5 | 1.5 | 1.5 | 1.5 | 1.5 | Provides multiple functions to obtain tuple-level statistics. |
| plperl | 1 | 1 | 1 | 1 | 1 | 1 | 1 | Provides Perl procedural language. |
| plpgsql | 1 | 1 | 1 | 1 | 1 | 1 | 1 | Provides SQL procedural language. |
| pltcl | 1 | 1 | 1 | 1 | 1 | 1 | 1 | Provides Tcl procedural language. |
| postgres_fdw | 1.1 | 1.1 | 1.1 | 1 | 1 | 1 | 1 | Cross-database table operations. |
| sslinfo | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | Provides information about the SSL certificate provided by the current client. |
| tablefunc | 1 | 1 | 1 | 1 | 1 | 1 | 1 | Contains multiple table-returning functions. |
| tsm_system_rows | 1 | 1 | 1 | 1 | 1 | 1 | 1 | Provides the table sampling method SYSTEM_ROWS. |
| tsm_system_time | 1 | 1 | 1 | 1 | 1 | 1 | 1 | Provides the table sampling method SYSTEM_TIME. |
| unaccent | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | A text search dictionary that can remove accents (diacritics) from lexemes. |
| uuid-ossp | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | Provides functions to generate universally unique identifiers (UUIDs) using several standard algorithms. |
| xml2 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | Provides XPath queries and XSLT functionality. |
Performance Comparison
| Metric | Pigsty | Aliyun RDS | AWS RDS |
|---|---|---|---|
| Peak Performance | PGTPC on NVME SSD Benchmark sysbench oltp_rw | RDS PG Performance Whitepaper sysbench oltp scenario QPS 4000 ~ 8000 per core | |
| Storage Spec: Max Capacity | 32TB / NVME SSD | 32 TB / ESSD PL3 | 64 TB / io2 EBS Block Express |
| Storage Spec: Max IOPS | 4K Random Read: Max 3M, Random Write 2000~350K | 4K Random Read: Max 1M | 16K Random IOPS: 256K |
| Storage Spec: Max Latency | 4K Random Read: 75µs, Random Write: 15µs | 4K Random Read: 200µs | 500µs / Inferred as 16K random IO |
| Storage Spec: Max Reliability | UBER < 1e-18, equivalent to 18 nines MTBF: 2M hours 5DWPD, 3 years continuous | Reliability 9 nines, equivalent to UBER 1e-9 Storage and Data Reliability | Durability: 99.999%, 5 nines (0.001% annual failure rate) io2 specification |
| Storage Spec: Max Cost | ¥31.5/TB·month (5-year warranty amortized / 3.2T / Enterprise-grade / MLC) | ¥3200/TB·month (original ¥6400, monthly ¥4000) 50% off with 3-year prepaid | ¥1900/TB·month using max spec 65536GB / 256K IOPS best discount |
Observability
Pigsty provides nearly 3000 monitoring metrics and 50+ monitoring dashboards, covering database monitoring, host monitoring, connection pool monitoring, load balancer monitoring, and more, providing users with an unparalleled observability experience.

Pigsty provides 638 PostgreSQL-related monitoring metrics, while AWS RDS only has 99, and Aliyun RDS has only single-digit metrics:

Additionally, some projects provide PostgreSQL monitoring capabilities, but are relatively simple:
- pgwatch: 123 metric types
- pgmonitor: 156 metric types
- datadog: 69 metric types
- pgDash
- ClusterControl
- pganalyze
- Aliyun RDS: 8 metric types
- AWS RDS: 99 metric types
- Azure RDS
Maintainability
| Metric | Pigsty | Aliyun RDS | AWS RDS |
|---|---|---|---|
| System Usability | Simple | Simple | Simple |
| Configuration Management | Config files / CMDB based on Ansible Inventory | Can use Terraform | Can use Terraform |
| Change Method | Idempotent Playbooks based on Ansible Playbook | Console click operations | Console click operations |
| Parameter Tuning | Auto-adapts to node specs, Four preset templates: OLTP, OLAP, TINY, CRIT | ||
| Infra as Code | Natively supported | Can use Terraform | Can use Terraform |
| Customizable Parameters | Pigsty Parameters 283 parameters | ||
| Service & Support | Commercial subscription support available | After-sales ticket support | After-sales ticket support |
| Air-gapped Deployment | Offline installation supported | N/A | N/A |
| Database Migration | Playbooks for zero-downtime migration from existing v10+ PG instances to Pigsty managed instances via logical replication | Cloud migration assistance Aliyun RDS Data Sync |
Cost
Based on experience, RDS unit cost is 5-15 times that of self-hosted for software and hardware resources, with a rent-to-own ratio typically around one month. For details, see Cost Analysis.
| Factor | Metric | Pigsty | Aliyun RDS | AWS RDS |
|---|---|---|---|---|
| Cost | Software License/Service Fee | Free, hardware ~¥20-40/core·month | ¥200-400/core·month | ¥400-1300/core·month |
| Support Service Fee | Service ~¥100/core·month | Included in RDS cost |
Other On-Premises Database Management Software
Some software and vendors providing PostgreSQL management capabilities:
- Aiven: Closed-source commercial cloud-hosted solution
- Percona: Commercial consulting, simple PG distribution
- ClusterControl: Commercial database management software
Other Kubernetes Operators
Pigsty refuses to use Kubernetes for managing databases in production, so there are ecological differences with these solutions.
- PGO
- StackGres
- CloudNativePG
- TemboOperator
- PostgresOperator
- PerconaOperator
- Kubegres
- KubeDB
- KubeBlocks
For more information, see: