You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The integration test suite validates Duckgres compatibility with PostgreSQL for OLAP workloads.
8
+
The integration test suite validates Duckgres compatibility with PostgreSQL for OLAP workloads. Tests run against **DuckLake by default** (DuckDB + PostgreSQL metadata + MinIO object storage).
9
9
10
-
### Overall Results
10
+
### Test Modes
11
+
12
+
| Mode | Description | Pass Rate |
13
+
|------|-------------|-----------|
14
+
|**DuckLake** (default) | Full DuckLake with PostgreSQL metadata + MinIO | 53% |
15
+
|**Vanilla DuckDB**| In-memory DuckDB without DuckLake | 76% |
16
+
17
+
To run without DuckLake: `DUCKGRES_TEST_NO_DUCKLAKE=1 go test ./tests/integration/...`
18
+
19
+
### Overall Results (DuckLake Mode)
20
+
21
+
| Metric | Count |
22
+
|--------|-------|
23
+
|**PASS**| 48 |
24
+
|**FAIL**| 42 |
25
+
|**Pass Rate**| 53% |
26
+
27
+
### Overall Results (Vanilla DuckDB Mode)
11
28
12
29
| Metric | Count |
13
30
|--------|-------|
@@ -16,7 +33,7 @@ The integration test suite validates Duckgres compatibility with PostgreSQL for
@@ -40,7 +57,40 @@ The integration test suite validates Duckgres compatibility with PostgreSQL for
40
57
|**Functions**|~180 |~130 |~50 |~72% |
41
58
|**Types**|~80 |~60 |~20 |~75% |
42
59
43
-
## Passing Test Categories
60
+
## DuckLake Mode
61
+
62
+
DuckLake mode is enabled by default because it better represents production usage. DuckLake stores table metadata in PostgreSQL and data files as Parquet in S3-compatible storage (MinIO).
63
+
64
+
### DuckLake Infrastructure
65
+
66
+
The test infrastructure includes:
67
+
-**PostgreSQL** (port 35432): For comparison testing against real PostgreSQL
-**MinIO** (port 39000): S3-compatible object storage for Parquet files
70
+
71
+
### DuckLake-Specific Limitations
72
+
73
+
DuckLake has additional constraints compared to vanilla DuckDB:
74
+
75
+
1.**No RETURNING clause** - `INSERT/UPDATE/DELETE ... RETURNING` not supported
76
+
2.**Limited DEFAULT values** - Only numeric and string literals (no `DEFAULT true`, `DEFAULT now()`)
77
+
3.**No PRIMARY KEY/UNIQUE/FOREIGN KEY** - Constraints are stripped by the DDL transform
78
+
4.**No SERIAL types** - Converted to INTEGER types
79
+
5.**No CREATE INDEX** - Indexes are no-ops in DuckLake
80
+
81
+
### Passing Categories in DuckLake Mode
82
+
83
+
| Category | Pass Rate |
84
+
|----------|-----------|
85
+
| pg_catalog Compatibility | 100% |
86
+
| information_schema | 100% |
87
+
| DDL (with constraint stripping) |~70% |
88
+
| DML (without RETURNING) |~60% |
89
+
| Window Functions | 100% |
90
+
| CTEs | 100% |
91
+
| Set Operations | 100% |
92
+
93
+
## Passing Test Categories (Vanilla DuckDB)
44
94
45
95
### pg_catalog Compatibility (100%)
46
96
All pg_catalog views and functions work correctly:
@@ -142,24 +192,34 @@ The SHOW command is not fully supported for all PostgreSQL configuration paramet
142
192
143
193
**Workaround**: Use `SELECT current_setting('server_version')` instead
144
194
145
-
### 6. Prepared Statement Protocol
146
-
The extended query protocol (Parse/Bind/Describe/Execute) has timing issues with the 'T' (RowDescription) message.
195
+
### 6. RETURNING Clause (DuckLake)
196
+
DuckLake does not support `INSERT/UPDATE/DELETE ... RETURNING`.
197
+
198
+
**Impact**: Tests using RETURNING clause fail in DuckLake mode
199
+
**Workaround**: Use separate SELECT after mutation
147
200
148
-
### 7. Per-Connection Database
201
+
### 7. Per-Connection Database (Vanilla DuckDB)
149
202
Each new database connection gets a fresh in-memory DuckDB database. This is by design but affects tests requiring data persistence across connections.
150
203
204
+
**Note**: This is not an issue in DuckLake mode where metadata persists.
205
+
151
206
## Fixes Applied
152
207
153
208
### Wire Protocol Fixes
154
209
-**Timestamp formatting** (`server/conn.go`): Format timestamps as `2006-01-02 15:04:05` instead of Go's default `2024-01-01 10:00:00 +0000 UTC`
155
210
-**Prepared statement protocol** (`server/conn.go`): Fixed duplicate RowDescription during Execute when Describe(S) was called - now tracks statement describe state and propagates to portals
156
211
212
+
### DDL Transform Fixes (DuckLake)
213
+
-**Strip boolean defaults** (`transpiler/transform/ddl.go`): DuckLake only supports numeric/string literal defaults
214
+
-**Strip all constraints** (`transpiler/transform/ddl.go`): PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK
215
+
157
216
### Test Harness Fixes
158
217
-**`compare.go`**: Use `sql.RawBytes` to avoid driver parsing issues
0 commit comments