Skip to content

Database Compatibility Matrix

This page shows which FraiseQL features are supported on each database backend. Check this before starting a project to avoid discovering limitations mid-development.


FeaturePostgreSQLMySQL 8+SQL ServerSQLite
Queries (SELECT from views)✅✅✅✅
Mutations✅✅✅✅ DirectSql
Relay cursor pagination✅✅✅✅
Automatic WHERE from args✅✅✅✅
Rich filters (operators, ILIKE, IS NULL)✅✅✅✅
Full-text search✅⚠️ Limited⚠️ Limited❌
JSONB field traversal✅⚠️ JSON_EXTRACT⚠️ JSON_VALUE⚠️ json_extract
Row-Level Security (RLS)✅ Native⚠️ View-based⚠️ View-based❌

FeaturePostgreSQLMySQL 8+SQL ServerSQLite
Window functions✅ Full⚠️ Partial⚠️ Partial⚠️ Partial
Fact table analytics (tf_*)✅❌❌❌
Automatic Persisted Queries (APQ)✅✅✅✅
Query result caching✅✅✅✅
Subscriptions (CDC)✅ pg_notify❌❌❌
Multi-tenancy / RLS injection✅⚠️ Manual⚠️ Manual❌

FunctionPostgreSQLMySQL 8+SQL ServerSQLite
ROW_NUMBER(), RANK(), DENSE_RANK()✅✅✅✅
NTILE(n)✅✅✅✅
PERCENT_RANK(), CUME_DIST()✅❌✅❌
LAG(), LEAD(), FIRST_VALUE(), LAST_VALUE()✅✅✅✅
SUM() OVER, COUNT() OVER✅✅✅✅
STDDEV() OVER, VARIANCE() OVER✅❌✅❌
FILTER (WHERE ...) on aggregates✅❌❌❌
GROUPS frame type✅❌❌❌

FeaturePostgreSQLMySQL 8+SQL ServerSQLite
GraphQL transport✅✅✅✅
REST transport✅✅✅✅
gRPC transport✅✅✅✅
Wire protocol (binary streaming)✅❌❌❌
Apollo Federation subgraph✅✅✅❌
Federation circuit breaker✅✅✅❌
TLS / mTLS connections✅✅✅N/A
Connection pooling (PgBouncer-compatible)✅✅✅N/A
Health check endpoint✅✅✅✅

SymbolMeaning
✅Fully supported
⚠️Partial support — see notes below
❌Not supported
N/ANot applicable

  • Mutations — fully supported. All mutation functions use the same mutation_response return type as PostgreSQL.
  • Window functions — ranking and value functions work. PERCENT_RANK, CUME_DIST, STDDEV, VARIANCE aggregate-as-window, and the FILTER clause are not supported. The planner raises an error at compile time for unsupported functions.
  • Fact table analytics — not supported. Fact table introspection requires JSONB operators (PostgreSQL-native). MySQL uses JSON_EXTRACT which lacks the binary JSONB aggregation operators.
  • RLS — FraiseQL implements view-based security (inject a WHERE tenant_id = $user filter). MySQL does not have native RLS like PostgreSQL.
  • Full-text search — MySQL FULLTEXT indexes are supported via the MATCH ... AGAINST operator but require explicit index declarations. Not auto-detected.
  • Mutations — fully supported, using SQL Server’s SELECT * FROM fn_name(args) calling convention.
  • Window functions — ROWS/RANGE frames work. GROUPS frame type is not supported. PERCENT_RANK is available on SQL Server 2012+.
  • Fact table analytics — not supported (no JSONB, limited JSON aggregation).
  • JSONB traversal — available via JSON_VALUE(col, '$.path') but requires explicit path declarations; JSONB operators (->, ->>) are PostgreSQL-only.
  • UUID columns — use UNIQUEIDENTIFIER; cursor pagination uses CONVERT(UNIQUEIDENTIFIER, @p) comparisons.
  • Mutations — supported via MutationStrategy::DirectSql. SQLite does not have stored procedures, so FraiseQL executes INSERT, UPDATE, and DELETE statements directly with a RETURNING clause to produce the mutation response. This enables full read-write development and testing against SQLite without requiring PostgreSQL.
  • Subscriptions — not supported. SQLite has no LISTEN/NOTIFY equivalent.
  • Wire protocol — not supported. SQLite is in-process only.
  • Window functions — basic ranking and SUM/COUNT OVER work. PERCENT_RANK, CUME_DIST, STDDEV, VARIANCE, and frame exclusion are not supported.

ScenarioRecommendation
Production SaaS / multi-tenantPostgreSQL (native RLS, subscriptions, JSONB)
Existing MySQL codebaseMySQL 8+ (mutations, relay pagination, most query features)
Enterprise .NET / WindowsSQL Server (full mutation support, most query features)
Local development / testsSQLite (zero config, fast, no server needed, full read-write support)
Analytics / data warehousePostgreSQL (fact tables, window functions, JSONB dimensions)
Real-time features (subscriptions)PostgreSQL only