-
Notifications
You must be signed in to change notification settings - Fork 1
Architecture POSTGRESQL WIRE PROTOCOL
Navigation: Home > Architecture
ThemisDB implements the PostgreSQL wire protocol for BI tool compatibility, allowing connections from tools like Tableau, Metabase, psql, and JDBC/ODBC clients.
- Parse Message Handler: Validates queries and stores prepared statements with parameter types
- Bind Message Handler: Binds parameters to prepared statements with validation
- Execute Message Handler: Executes portals with bound parameters and parameter substitution
- Describe Message Handler: Returns metadata for statements (ParameterDescription + RowDescription) and portals (RowDescription)
- Close Message Handler: Deallocates prepared statements and portals with proper cleanup
- Parameter Format Support: Parses parameter format codes (text/binary) in Bind message
- Transaction State Tracking: Tracks IDLE, IN_TRANSACTION, and FAILED states
- Transaction Control: BEGIN, COMMIT, ROLLBACK with proper state transitions
- Error Recovery: Failed transactions properly tracked and recovered with ROLLBACK
- ReadyForQuery Messages: Sends correct transaction status ('I', 'T', 'E')
- ParameterDescription ('t'): Describes parameter types for prepared statements
- NoData ('n'): Indicates queries that don't return result sets
- CloseComplete ('3'): Confirms statement/portal closure
- Improved RowDescription ('T'): Properly encodes all field metadata (OIDs, sizes, format codes)
- Schema Introspection: Support for pg_catalog and information_schema queries
- PostgreSQL Functions: version(), current_database()
- Type OID Mappings: Common PostgreSQL type OIDs (int4=23, text=25, etc.)
- Binary Format: Parsing logic exists but not fully tested
- Result Streaming: Basic implementation, needs maxRows handling
- SQL-to-Cypher Translation: Core functionality exists, needs database integration
- COPY Protocol: Bulk data transfer (COPY IN/OUT)
- PortalSuspended: Partial result set support
- Binary Result Encoding: Results are currently text-only
- Advanced Type OIDs: Only basic types implemented
Client: Server:
------- -------
Q: "SELECT * FROM users"
RowDescription
DataRow (x N)
CommandComplete
ReadyForQuery('I')
Client: Server:
------- -------
P: stmt="s1", query="SELECT * FROM users WHERE id=$1", paramTypes=[23]
ParseComplete
D: type='S', name="s1"
ParameterDescription([23])
RowDescription([...])
B: portal="", stmt="s1", params=["123"]
BindComplete
E: portal="", maxRows=0
DataRow (x N)
CommandComplete
S: Sync
ReadyForQuery('I')
Client: Server:
------- -------
Q: "BEGIN"
CommandComplete("BEGIN")
ReadyForQuery('T')
Q: "INSERT INTO users VALUES (1, 'Alice')"
CommandComplete("INSERT 0 1")
ReadyForQuery('T')
Q: "COMMIT"
CommandComplete("COMMIT")
ReadyForQuery('I')
Client: Server:
------- -------
Q: "BEGIN"
CommandComplete("BEGIN")
ReadyForQuery('T')
Q: "SELECT * FROM non_existent"
ErrorResponse(ERROR, 42P01, "relation does not exist")
ReadyForQuery('E')
Q: "INSERT ..."
ErrorResponse(WARNING, 25P02, "current transaction is aborted")
ReadyForQuery('E')
Q: "ROLLBACK"
CommandComplete("ROLLBACK")
ReadyForQuery('I')
| Type | Name | Description |
|---|---|---|
| 'Q' | Query | Simple query protocol |
| 'P' | Parse | Parse SQL statement into prepared statement |
| 'B' | Bind | Bind parameters to prepared statement |
| 'E' | Execute | Execute portal |
| 'D' | Describe | Request description of statement or portal |
| 'C' | Close | Close statement or portal |
| 'S' | Sync | Synchronize extended query protocol |
| 'X' | Terminate | Close connection |
| Type | Name | Description |
|---|---|---|
| 'R' | Authentication | Authentication request/response |
| 'S' | ParameterStatus | Runtime parameter status |
| 'K' | BackendKeyData | Cancellation key data |
| 'Z' | ReadyForQuery | Server ready for new query |
| 'T' | RowDescription | Result set column metadata |
| 'D' | DataRow | Result set data row |
| 'C' | CommandComplete | Query completion tag |
| '1' | ParseComplete | Parse operation completed |
| '2' | BindComplete | Bind operation completed |
| '3' | CloseComplete | Close operation completed |
| 't' | ParameterDescription | Parameter type metadata |
| 'n' | NoData | Query returns no data |
| 'E' | ErrorResponse | Error message |
Common PostgreSQL type OIDs used in ParameterDescription and RowDescription:
| Type | OID | Size | Description |
|---|---|---|---|
| bool | 16 | 1 | Boolean |
| int2 | 21 | 2 | 16-bit integer |
| int4 | 23 | 4 | 32-bit integer |
| int8 | 20 | 8 | 64-bit integer |
| float4 | 700 | 4 | Single precision float |
| float8 | 701 | 8 | Double precision float |
| text | 25 | -1 | Variable length text |
| varchar | 1043 | -1 | Variable length varchar |
| timestamp | 1114 | 8 | Timestamp without timezone |
| date | 1082 | 4 | Date |
ββββββββ
β IDLE β <βββββββββββββββββββ
ββββ¬ββββ β
β β
BEGIN COMMIT/
β ROLLBACK
v β
ββββββββββββββββ β
βIN_TRANSACTIONβ ββββββββββββββββ
ββββββββ¬ββββββββ
β
ERROR
β
v
ββββββββββ
β FAILED β
ββββββ¬ββββ
β
ROLLBACK
β
βββββββββββββββ> [IDLE]
Common PostgreSQL error codes (SQLSTATE):
| Code | Category | Description |
|---|---|---|
| 08P01 | Connection Exception | Protocol Violation |
| 25P01 | Invalid Transaction | No Active Transaction |
| 25P02 | Invalid Transaction | In Failed Transaction |
| 26000 | Invalid Statement | Statement Not Found |
| 34000 | Invalid Cursor | Portal Not Found |
| 42601 | Syntax Error | Syntax Error or Access Rule Violation |
| 42P01 | Syntax Error | Undefined Table |
| XX000 | Internal Error | Internal Error |
-
test_postgres_wire.cpp: Basic protocol and SQL translation tests -
test_postgres_prepared_statements.cpp: Prepared statement lifecycle tests -
test_postgres_transactions.cpp: Transaction state and control tests
To test with psql:
# Enable PostgreSQL wire protocol in build
cmake -DTHEMIS_ENABLE_POSTGRES_WIRE=ON ..
make
# Start ThemisDB with PostgreSQL port
./themis-server --postgres-port 5432
# Connect with psql
psql -h localhost -p 5432 -U themis -d themisdbExample queries:
-- Simple query
SELECT version();
-- Prepared statement
PREPARE get_user (int) AS SELECT * FROM users WHERE id = $1;
EXECUTE get_user(123);
-- Transaction
BEGIN;
INSERT INTO users VALUES (1, 'Alice');
COMMIT;Tableau uses extended query protocol extensively:
- Connects and requests version()
- Queries pg_catalog for schema metadata
- Uses prepared statements for parameterized queries
- Requires proper transaction handling
Metabase requirements:
- Basic schema introspection (information_schema)
- Simple query protocol for ad-hoc queries
- Transaction support for data modifications
DBeaver SQL IDE:
- Full pg_catalog support for schema browser
- Prepared statements for SQL execution
- Transaction control in GUI
Issue: Client reports "protocol version not supported"
- Solution: Ensure server sends protocol version 3.0 (196608) in startup
Issue: BI tool can't see tables
- Solution: Implement pg_class and information_schema.tables queries
Issue: Prepared statements fail
- Solution: Check parameter count matches in Parse and Bind
Issue: Transaction state errors
- Solution: Verify ReadyForQuery sends correct status after each command
- Integrate query execution with actual database
- Add comprehensive error handling
- Implement result set streaming with maxRows
- Add connection pooling
- COPY protocol for bulk imports
- Binary result format
- Extended type OID support
- Cursor support (DECLARE, FETCH)
- Query plan caching
- Parallel query execution
- Result set compression
- Connection multiplexing
ThemisDB 1.9.0-beta Β· Home Β· Module-Index Β· GitHub Β· Issues
ThemisDB 1.9.0-beta Β· Home Β· Wiki-Index Β· Module-Index Β· FAQ Β· Quick-Reference Β· GitHub Β· Issues Β· Discussions Β· License
- Batch Operations
- Best Practices
- CRUD Tutorial
- Custom Document Ingestion
- Getting Started Tutorial
- Interactive Examples
- Schema Design
- Video Tutorials
- AQL Reference
- AQL Examples
- AQL Overview
- AQL Feature Roadmap
- AQL Geospatial Guide
- AQL LLM Migration Guide
- AQL API
- AQL Grammar (EBNF)
- AQL Root Overview
- AQL Examples (root)
- API Reference
- API Module README
- OpenAPI Overview
- Client SDK Overview
- SDK Overview
- Operations
- Operations Overview
- Operations Runbook
- Operations Handbook
- ThemisCtl Admin Guide
- Pipeline E2E SOPs
- Deploy Overview
- Docker Overview
- Docker Hub README
- Helm Overview
- Packaging Overview
- Operator Overview
- Security Policy
- Production Hardening Checklist
- Security Hardening Guide
- Encryption Key Management
- Access Control Framework
- Zero Trust Policy
- API Authentication & Authorization
- HSM Production Setup
- PKCS11 Integration
- DSGVO / SOC2 Checklist
- Access Model Runbooks
- Access Model Dashboard
- Maturity Automation Runbook
- Access Review Automation
- Access Model Dashboard
- Access Model Runbooks
- Rights Revocation
- Dr Checklists
- Dr Testing
- Incident Response Playbook
- Incident Response Testing
- GPU Oom Recovery
- Grammar Debugging
- Metrics Scrape Troubleshooting
- Model Swap Procedure
- Quota Tuning
- Subagent Deployment
- Logging Configuration
- Content Model
- Crypto & Keys
- Feature Flags Reference
- Modular Architecture Roadmap
- Modularization Guide
- Module Architecture Index
- PostgreSQL Wire Protocol
- Query Scheduling
- Raft Consensus Design
- Resource Pooling
- Source Directory Guide
- Unified Access Model
- E1 001 Layered Retrieval Design
- E1 002 Ann Abstraction Strategy
- E1 003 Tensor Summary Types
- E1 004 Lora Package Distinction
- E1 005 Model Switch Compatibility
- E1 006 Federated Tensor Summaries
- E2 001 Evaluation Framework Design
- E2 002 Hardware Profile Strategy
- E2 003 Query Planner Routing Model
- E2 004 Approximation Governance Rules
- E2 005 Cross Layer Fallback Confidence Policy
- E3 001 Distributed Tensor Design
- E3 002 Manifest Coordination Strategy
- E3 003 Recovery And Erasure Choice
- E3 004 Tensor Fabric Infrastructure
- Contributing
- Contributing (root)
- Code of Conduct
- Support
- Maintainers
- CTest Guide
- Build Quick Reference
- Developer Wiki Index
- Build / Test / CI
- Module Index
- Branching Strategy
- Disabled Stub Policy
- Docs PR Policy
- GA Promotion Sign Off
- Github Milestones Setup
- Maturity Claim Verification Checklist
- Maturity Evidence Registry
- Merge Gate Bot Config
- Merge Gate Status Live
- Phase 1 Closure Report
- Phase Closure Policy
- Phase Dependency Graph
- Phase3 Enforcement Runbook
- Plugin Submodule Rollback
- PR Version Targeting
- PR Version Targeting Backfill
- Production Ready 2026 Delivery Plan
- Query Module Status
- Readme
- Release Promotion Gate Policy
- Release Validation Checklist
- Security Module 5671 Evidence Summary
- Sharding P6 Residual Risk Acceptance
- Sourcecode Compliance Governance
- Updates Development Status Sign Off
- Wave C Implementation Complete
- Blob Storage
- Cuda
- Ethics Ai
- Exporters
- Huggingface
- Image Analysis
- Importers
- RPC
- Scraper
- Themisdb Ai Watermark Detector
- User Storage Encrypted
- Chimera Architecture
- Chimera Future
- Chimera Readme
- Chimera Roadmap
- Covina Fastapi Ingestion Architecture
- Covina Fastapi Ingestion Future
- Covina Fastapi Ingestion Roadmap
- Vcc Base Architecture
- Vcc Base Future
- Vcc Base Roadmap
- Vcc Clara Ingestion Architecture
- Vcc Clara Ingestion Future
- Vcc Clara Ingestion Roadmap
- Vcc Veritas Architecture
- Vcc Veritas Future
- Vcc Veritas Roadmap
- 01 Hello World
- 02 Todo App
- 03 Contact Manager
- 04 Inventory System
- 05 Time Series Monitor
- 06 Graph Social Network
- 07 Vector Search Documents
- 08 Dms Erp System
- 09 Iot Sensor Network
- 10 Drone Image Analysis
- 11 Blog Wiki
- 12 Expense Tracker
- 13 Recipe Manager
- 14 Ecommerce Catalog
- 15 Event Management
- 16 Kanban Board
- 17 Crm
- 18 Realtime Chat
- 19 Recommendation Engine
- 20 Smart Home
- 21 Coding Platform
- 22 AQL Diagram Tool
- 23 Traveling Salesman
- 24 Moral Philosophy Debates
- API Versioning
- Distributed Sharding
- Feedback Plugins
- Geo
- Gnn
- Image Analysis
- Legal Lora Training
- LLM
- Lora Sync
- Migration
- Nlp
- Performance
- Railway
- Replication
- Rope Visualization
- Sample Product Config
- Security
- Client SDK Overview
- Quickstart
- Sdk Enhancements
- Sdk Implementation Summary
- Test Suite Readme
- Go
- Java
- Javascript
- Php
- Python
- Ruby
- Rust
- Typescript
- 01 Grundlegende Operationen
- 02 AQL Queries
- 03 Graph Daten
- 04 Multimodell Anwendung
- 01 Quickstart Guide
- 02 AQL Referenz Kurzuebersicht
- 03 Datenmodellierung Guide
- 04 Uebungsaufgaben
- 05 Best Practices Guide
- Training Documents
- Training Overview
- 01 Einfuehrung Und Uebersicht
- 02 Datenmodelle Und Architektur
- 03 AQL Abfragesprache
- 04 Installation Und Setup
- 05 Anwendungsbeispiele
- Training Presentations
- Dependencies Readme
- Processmonitor Readme
- Themis.admintools.shared Readme
- Themis.aqlquerybuilder Readme
- Themis.aqlquerybuilder Roadmap
- Themis.auditlogviewer Readme
- Themis.auditlogviewer Roadmap
- Themis.classificationdashboard Readme
- Themis.classificationdashboard Roadmap
- Themis.compliancereports Readme
- Themis.compliancereports Roadmap
- Themis.gisviewer.controlpanel Readme
- Themis.gisviewer.controlpanel Roadmap
- Themis.impactanalysisviewer Readme
- Themis.impactanalysisviewer Roadmap
- Themis.ingestiontool Readme
- Themis.ingestiontool Roadmap
- Themis.keyrotationdashboard Readme
- Themis.keyrotationdashboard Roadmap
- Themis.piimanager Readme
- Themis.piimanager Roadmap
- Themis.retentionmanager Readme
- Themis.retentionmanager Roadmap
- Themis.sagaverifier Readme
- Themis.sagaverifier Roadmap
- Themis.usbadmintool Readme
- Themis.usbadmintool Roadmap
- CI Readme
- CI Roadmap
- Compiler Diagnostics Readme
- Compiler Diagnostics Roadmap
- Completion Readme
- Copilot Ollama Router Readme
- Copilot Ollama Router Roadmap
- Gnn Readme
- Gnn Roadmap
- Rope Visualizer Readme
- Rope Visualizer Roadmap
- Tco Calculator Readme
- Tco Calculator Roadmap
- Tests Readme
- Tests Roadmap
- Themis Config Wx Readme
- Themis Docs Builder Readme
- Wikipedia Ingestion Readme