Skip to main content

PostgreSQL database adapter for Datus

Project description

datus-postgresql

PostgreSQL database adapter for Datus.

Overview

This adapter provides PostgreSQL connectivity for Datus, supporting full SQL operations, metadata discovery, schema management, and materialized views via the standard PostgreSQL protocol.

Installation

pip install datus-postgresql

This will automatically install the required dependencies:

  • datus-agent
  • datus-sqlalchemy (which includes SQLAlchemy and psycopg2)

Usage

The adapter is automatically registered with Datus when installed. Configure your database connection:

namespace:
  postgresql_prod:
    type: postgresql
    host: localhost
    port: 5432
    username: postgres
    password: your_password
    database: mydb
    schema: public

Or use programmatically:

from datus_postgresql import PostgreSQLConnector, PostgreSQLConfig

# Using config object
config = PostgreSQLConfig(
    host="localhost",
    port=5432,
    username="postgres",
    password="password",
    database="mydb",
    schema_name="public",
)

connector = PostgreSQLConnector(config)

# Or using dict
connector = PostgreSQLConnector({
    "host": "localhost",
    "port": 5432,
    "username": "postgres",
    "password": "password",
    "database": "mydb",
})

# Use context manager for automatic cleanup
with connector:
    # Test connection
    connector.test_connection()

    # Execute queries
    result = connector.execute({"sql_query": "SELECT * FROM users LIMIT 10"})
    print(result.sql_return)

    # Get tables
    tables = connector.get_tables(schema_name="public")
    print(f"Tables: {tables}")

    # Get table schema
    columns = connector.get_schema(schema_name="public", table_name="users")
    for col in columns:
        print(f"  {col['name']}: {col['type']}")

    # Get materialized views
    mvs = connector.get_materialized_views(schema_name="public")
    print(f"Materialized Views: {mvs}")

Configuration Options

Option Type Default Description
host str "127.0.0.1" PostgreSQL server host
port int 5432 PostgreSQL server port
username str required PostgreSQL username
password str "" PostgreSQL password
database str None Default database name
schema_name str "public" Default schema name
sslmode str "prefer" SSL mode (disable, allow, prefer, require, verify-ca, verify-full)
timeout_seconds int 30 Connection timeout in seconds

Features

  • Full SQL Support: Execute queries, DDL, DML operations
  • Metadata Discovery: Automatic discovery of databases, schemas, tables, views, and materialized views
  • DDL Generation: Reconstruct CREATE TABLE / VIEW / MATERIALIZED VIEW statements
  • Schema Management: Switch between schemas seamlessly
  • Sample Data: Extract sample rows for data profiling
  • Connection Management: SQLAlchemy-based connection pooling with SSL support
  • Multiple Result Formats: pandas, arrow, csv, list

Code Structure

datus-postgresql/
├── datus_postgresql/
│   ├── __init__.py          # Package exports
│   ├── config.py            # PostgreSQLConfig (Pydantic model)
│   └── connector.py         # PostgreSQLConnector implementation
├── tests/
│   ├── unit/                # Unit tests with mocks (no database needed)
│   └── integration/         # Integration tests (requires PostgreSQL)
│       ├── conftest.py      # Test fixtures and TPC-H data setup
│       ├── test_integration.py  # General integration tests
│       └── test_tpch.py     # TPC-H benchmark data tests
├── scripts/
│   └── init_tpch_data.py    # TPC-H data initialization script
├── docker-compose.yml       # PostgreSQL test container
├── pyproject.toml
└── README.md

Testing

Quick Start

# 1. Start PostgreSQL test container
docker-compose up -d

# 2. Run tests
pytest tests/unit/ -v              # Unit tests (no database needed)
pytest tests/integration/ -v       # Integration tests (requires PostgreSQL)
pytest tests/ -v                   # All tests

Test Types

  • Unit tests: Configuration and connector logic with mocks (no database needed)
  • Integration tests: Real database operations (SQL, metadata, schema)
  • TPC-H tests: Analytical query tests using TPC-H benchmark data

TPC-H Integration Tests

The adapter includes TPC-H benchmark data tests for validating analytical query capabilities.

TPC-H Tables

Table Rows Description
tpch_region 5 World regions
tpch_nation 25 Countries with region references
tpch_supplier 5 Suppliers with nation references
tpch_customer 10 Customers with nation references
tpch_orders 15 Orders with customer references

Running TPC-H Tests

# Start PostgreSQL container
docker-compose up -d

# Run TPC-H integration tests
pytest tests/integration/test_tpch.py -v

# Initialize TPC-H data manually (for ad-hoc testing)
python scripts/init_tpch_data.py \
    --host localhost --port 5432 \
    --username test_user --password test_password \
    --database test --schema public

# Drop and recreate TPC-H tables
python scripts/init_tpch_data.py --drop

Environment Variables

Tests use these default values (matching docker-compose.yml):

Variable Default Description
POSTGRESQL_HOST localhost PostgreSQL server host
POSTGRESQL_PORT 5432 PostgreSQL server port
POSTGRESQL_USER test_user PostgreSQL username
POSTGRESQL_PASSWORD test_password PostgreSQL password
POSTGRESQL_DATABASE test Database name
POSTGRESQL_SCHEMA public Schema name

Requirements

  • Python >= 3.12
  • PostgreSQL >= 12
  • datus-agent >= 0.2.1
  • datus-sqlalchemy >= 0.1.0

License

Apache License 2.0

Related Packages

  • datus-sqlalchemy - SQLAlchemy base connector
  • datus-mysql - MySQL adapter
  • datus-redshift - Amazon Redshift adapter
  • datus-snowflake - Snowflake adapter

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

datus_postgresql-0.1.5rc2.tar.gz (23.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

datus_postgresql-0.1.5rc2-py3-none-any.whl (12.0 kB view details)

Uploaded Python 3

File details

Details for the file datus_postgresql-0.1.5rc2.tar.gz.

File metadata

  • Download URL: datus_postgresql-0.1.5rc2.tar.gz
  • Upload date:
  • Size: 23.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for datus_postgresql-0.1.5rc2.tar.gz
Algorithm Hash digest
SHA256 81282f4354c8288e53b3c9f1d53f0fbdb442ff4b4f84b4095c61076912e30e58
MD5 6c0b414550141ec3ceba2c51118366f7
BLAKE2b-256 ec6d154d403dcd4f6da590af4abb374be2cb62f622cc69ce99e79c6bdec7a55f

See more details on using hashes here.

File details

Details for the file datus_postgresql-0.1.5rc2-py3-none-any.whl.

File metadata

File hashes

Hashes for datus_postgresql-0.1.5rc2-py3-none-any.whl
Algorithm Hash digest
SHA256 7ead2c3af0f1991203334cbd65b2745b304b6e61bbd2e7310a2f4a2411eb7702
MD5 21131ea3b23caf330aaee45592e81115
BLAKE2b-256 2616d1a077668f180ddf3cd69b9dabc13acf748a9d37a8bf83701ff574b86b51

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page