aboutsummaryrefslogtreecommitdiff
path: root/weed/server/postgres/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'weed/server/postgres/README.md')
-rw-r--r--weed/server/postgres/README.md284
1 files changed, 284 insertions, 0 deletions
diff --git a/weed/server/postgres/README.md b/weed/server/postgres/README.md
new file mode 100644
index 000000000..7d9ecefe5
--- /dev/null
+++ b/weed/server/postgres/README.md
@@ -0,0 +1,284 @@
+# PostgreSQL Wire Protocol Package
+
+This package implements PostgreSQL wire protocol support for SeaweedFS, enabling universal compatibility with PostgreSQL clients, tools, and applications.
+
+## Package Structure
+
+```
+weed/server/postgres/
+├── README.md # This documentation
+├── server.go # Main PostgreSQL server implementation
+├── protocol.go # Wire protocol message handlers with MQ integration
+├── DESIGN.md # Architecture and design documentation
+└── IMPLEMENTATION.md # Complete implementation guide
+```
+
+## Core Components
+
+### `server.go`
+- **PostgreSQLServer**: Main server structure with connection management
+- **PostgreSQLSession**: Individual client session handling
+- **PostgreSQLServerConfig**: Server configuration options
+- **Authentication System**: Trust, password, and MD5 authentication
+- **TLS Support**: Encrypted connections with custom certificates
+- **Connection Pooling**: Resource management and cleanup
+
+### `protocol.go`
+- **Wire Protocol Implementation**: Full PostgreSQL 3.0 protocol support
+- **Message Handlers**: Startup, query, parse/bind/execute sequences
+- **Response Generation**: Row descriptions, data rows, command completion
+- **Data Type Mapping**: SeaweedFS to PostgreSQL type conversion
+- **SQL Parser**: Uses PostgreSQL-native parser for full dialect compatibility
+- **Error Handling**: PostgreSQL-compliant error responses
+- **MQ Integration**: Direct integration with SeaweedFS SQL engine for real topic data
+- **System Query Support**: Essential PostgreSQL system queries (version, current_user, etc.)
+- **Database Context**: Session-based database switching with USE commands
+
+## Key Features
+
+### Real MQ Topic Integration
+The PostgreSQL server now directly integrates with SeaweedFS Message Queue topics, providing:
+
+- **Live Topic Discovery**: Automatically discovers MQ namespaces and topics from the filer
+- **Real Schema Information**: Reads actual topic schemas from broker configuration
+- **Actual Data Access**: Queries real MQ data stored in Parquet and log files
+- **Dynamic Updates**: Reflects topic additions and schema changes automatically
+- **Consistent SQL Engine**: Uses the same SQL engine as `weed sql` command
+
+### Database Context Management
+- **Session Isolation**: Each PostgreSQL connection has its own database context
+- **USE Command Support**: Switch between namespaces using standard `USE database` syntax
+- **Auto-Discovery**: Topics are discovered and registered on first access
+- **Schema Caching**: Efficient caching of topic schemas and metadata
+
+## Usage
+
+### Import the Package
+```go
+import "github.com/seaweedfs/seaweedfs/weed/server/postgres"
+```
+
+### Create and Start Server
+```go
+config := &postgres.PostgreSQLServerConfig{
+ Host: "localhost",
+ Port: 5432,
+ AuthMethod: postgres.AuthMD5,
+ Users: map[string]string{"admin": "secret"},
+ Database: "default",
+ MaxConns: 100,
+ IdleTimeout: time.Hour,
+}
+
+server, err := postgres.NewPostgreSQLServer(config, "localhost:9333")
+if err != nil {
+ return err
+}
+
+err = server.Start()
+if err != nil {
+ return err
+}
+
+// Server is now accepting PostgreSQL connections
+```
+
+## Authentication Methods
+
+The package supports three authentication methods:
+
+### Trust Authentication
+```go
+AuthMethod: postgres.AuthTrust
+```
+- No password required
+- Suitable for development/testing
+- Not recommended for production
+
+### Password Authentication
+```go
+AuthMethod: postgres.AuthPassword,
+Users: map[string]string{"user": "password"}
+```
+- Clear text password transmission
+- Simple but less secure
+- Requires TLS for production use
+
+### MD5 Authentication
+```go
+AuthMethod: postgres.AuthMD5,
+Users: map[string]string{"user": "password"}
+```
+- Secure hashed authentication with salt
+- **Recommended for production**
+- Compatible with all PostgreSQL clients
+
+## TLS Configuration
+
+Enable TLS encryption for secure connections:
+
+```go
+cert, err := tls.LoadX509KeyPair("server.crt", "server.key")
+if err != nil {
+ return err
+}
+
+config.TLSConfig = &tls.Config{
+ Certificates: []tls.Certificate{cert},
+}
+```
+
+## Client Compatibility
+
+This implementation is compatible with:
+
+### Command Line Tools
+- `psql` - PostgreSQL command line client
+- `pgcli` - Enhanced command line with auto-completion
+- Database IDEs (DataGrip, DBeaver)
+
+### Programming Languages
+- **Python**: psycopg2, asyncpg
+- **Java**: PostgreSQL JDBC driver
+- **JavaScript**: pg (node-postgres)
+- **Go**: lib/pq, pgx
+- **.NET**: Npgsql
+- **PHP**: pdo_pgsql
+- **Ruby**: pg gem
+
+### BI Tools
+- Tableau (native PostgreSQL connector)
+- Power BI (PostgreSQL data source)
+- Grafana (PostgreSQL plugin)
+- Apache Superset
+
+## Supported SQL Operations
+
+### Data Queries
+```sql
+SELECT * FROM topic_name;
+SELECT id, message FROM topic_name WHERE condition;
+SELECT COUNT(*) FROM topic_name;
+SELECT MIN(id), MAX(id), AVG(amount) FROM topic_name;
+```
+
+### Schema Information
+```sql
+SHOW DATABASES;
+SHOW TABLES;
+DESCRIBE topic_name;
+DESC topic_name;
+```
+
+### System Information
+```sql
+SELECT version();
+SELECT current_database();
+SELECT current_user;
+```
+
+### System Columns
+```sql
+SELECT id, message, _timestamp_ns, _key, _source FROM topic_name;
+```
+
+## Configuration Options
+
+### Server Configuration
+- **Host/Port**: Server binding address and port
+- **Authentication**: Method and user credentials
+- **Database**: Default database/namespace name
+- **Connections**: Maximum concurrent connections
+- **Timeouts**: Idle connection timeout
+- **TLS**: Certificate and encryption settings
+
+### Performance Tuning
+- **Connection Limits**: Prevent resource exhaustion
+- **Idle Timeout**: Automatic cleanup of unused connections
+- **Memory Management**: Efficient session handling
+- **Query Streaming**: Large result set support
+
+## Error Handling
+
+The package provides PostgreSQL-compliant error responses:
+
+- **Connection Errors**: Authentication failures, network issues
+- **SQL Errors**: Invalid syntax, missing tables
+- **Resource Errors**: Connection limits, timeouts
+- **Security Errors**: Permission denied, invalid credentials
+
+## Development and Testing
+
+### Unit Tests
+Run PostgreSQL package tests:
+```bash
+go test ./weed/server/postgres
+```
+
+### Integration Testing
+Use the provided Python test client:
+```bash
+python postgres-examples/test_client.py --host localhost --port 5432
+```
+
+### Manual Testing
+Connect with psql:
+```bash
+psql -h localhost -p 5432 -U seaweedfs -d default
+```
+
+## Documentation
+
+- **DESIGN.md**: Complete architecture and design overview
+- **IMPLEMENTATION.md**: Detailed implementation guide
+- **postgres-examples/**: Client examples and test scripts
+- **Command Documentation**: `weed db -help`
+
+## Security Considerations
+
+### Production Deployment
+- Use MD5 or stronger authentication
+- Enable TLS encryption
+- Configure appropriate connection limits
+- Monitor for suspicious activity
+- Use strong passwords
+- Implement proper firewall rules
+
+### Access Control
+- Create dedicated read-only users
+- Use principle of least privilege
+- Monitor connection patterns
+- Log authentication attempts
+
+## Architecture Notes
+
+### SQL Parser Dialect Considerations
+
+**✅ POSTGRESQL ONLY**: SeaweedFS SQL engine exclusively supports PostgreSQL syntax:
+
+- **✅ Core Engine**: `engine.go` uses custom PostgreSQL parser for proper dialect support
+- **PostgreSQL Server**: Uses PostgreSQL parser for optimal wire protocol compatibility
+- **Parser**: Custom lightweight PostgreSQL parser for full PostgreSQL compatibility
+- **Support Status**: Only PostgreSQL syntax is supported - MySQL parsing has been removed
+
+**Key Benefits of PostgreSQL Parser**:
+- **Native Dialect Support**: Correctly handles PostgreSQL-specific syntax and semantics
+- **System Catalog Compatibility**: Supports `pg_catalog`, `information_schema` queries
+- **Operator Compatibility**: Handles `||` string concatenation, PostgreSQL-specific operators
+- **Type System Alignment**: Better PostgreSQL type inference and coercion
+- **Reduced Translation Overhead**: Eliminates need for dialect translation layer
+
+**PostgreSQL Syntax Support**:
+- **Identifier Quoting**: Uses PostgreSQL double quotes (`"`) for identifiers
+- **String Concatenation**: Supports PostgreSQL `||` operator
+- **System Functions**: Full support for PostgreSQL system catalogs (`pg_catalog`) and functions
+- **Standard Compliance**: Follows PostgreSQL SQL standard and dialect
+
+**Implementation Features**:
+- Native PostgreSQL query processing in `protocol.go`
+- System query support (`SELECT version()`, `BEGIN`, etc.)
+- Type mapping between PostgreSQL and SeaweedFS schema types
+- Error code mapping to PostgreSQL standards
+- Comprehensive PostgreSQL wire protocol support
+
+This package provides enterprise-grade PostgreSQL compatibility, enabling seamless integration of SeaweedFS with the entire PostgreSQL ecosystem.