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.4.tar.gz (21.3 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.4-py3-none-any.whl (11.3 kB view details)

Uploaded Python 3

File details

Details for the file datus_postgresql-0.1.4.tar.gz.

File metadata

  • Download URL: datus_postgresql-0.1.4.tar.gz
  • Upload date:
  • Size: 21.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for datus_postgresql-0.1.4.tar.gz
Algorithm Hash digest
SHA256 5438495cda3752a0d4e05f5e2cd9968ea7892901887ccc668c01ed3083558896
MD5 a2bc3b51ca616e8b235c2a85f1c251c2
BLAKE2b-256 38852063b93a4f626c603d9d20ce7cc33e418fd24d72b9271d066a62b7a200f0

See more details on using hashes here.

File details

Details for the file datus_postgresql-0.1.4-py3-none-any.whl.

File metadata

File hashes

Hashes for datus_postgresql-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 d43454a96871008719363a62e4c03cdec3ff26530bc82539c6d8138d8576df6c
MD5 541d8b1c43d03749c9d51c79883a3bfa
BLAKE2b-256 838e95226584ead3dad2bc5c987eae068ab82ab1138007fc647db684b7b8280d

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