SteinDB
The only bidirectional Oracle <-> PostgreSQL migration tool
Terminal Demo
$ stein --version
SteinDB CLI v0.1.0
$ stein scan sample.sql --output table
SteinDB -- Oracle -> PostgreSQL Migration
================================================
Scanned: 10 objects in 0.3s
Object Type Schema Complexity Status
--------------- ----------- ------- ----------- ------
employees TABLE hr 2 Low
emp_seq SEQUENCE hr 1 Low
trg_emp_bi TRIGGER hr 4 Medium
active_emps VIEW hr 3 Low
get_salary FUNCTION hr 5 Medium
Summary: 8 auto-convertible, 2 need AI assistance
Savings estimate: ~$180K/year in Oracle licensing
$ stein convert sample.sql --output converted/ --mode rules
Converting... ======================== 100%
Converted: 8/10 objects (rules), 2 forwarded to AI
Output: converted/
$ stein verify converted/
All 8 conversions: GREEN (confidence: 100%)
Quick Start
pip install steindb && stein scan sample.sql
That's it. No Oracle Client needed, no account required, works offline.
# Scan your Oracle schema
stein scan your-oracle-export.sql
# Convert with deterministic rules only (no AI, fully offline)
stein convert your-oracle-export.sql --output ./converted/ --rules-only
# Convert with AI assistance (BYOK -- your API keys)
export STEIN_API_KEY=sk-your-openai-key
stein convert your-oracle-export.sql --output ./converted/ --model gpt-4o
# PostgreSQL to Oracle (reverse direction)
stein convert --direction pg_to_oracle your-pg-export.sql --output ./converted/
# Verify the converted output
stein verify ./converted/
# Generate an HTML report
stein report ./converted/
Features
- Bidirectional -- Oracle to PostgreSQL AND PostgreSQL to Oracle. The only tool that does both.
- 90%+ automation -- Deterministic rules handle the majority with 100% accuracy. AI handles the remaining 10%.
- Built-in verification -- Every converted object gets a confidence score (0.0-1.0). Syntax-checked, EXPLAIN dry-run tested, structurally compared.
- Works offline -- Rules-only mode runs entirely on your machine. No cloud, no network calls, no data leaving your environment.
- BYOK (Bring Your Own Key) -- Use GPT-4o, Claude, Gemini, or local models via Ollama. Your code never touches our servers.
- 870+ golden test pairs -- Every accuracy claim is verifiable. Run
stein test --goldenyourself. - Handles the hard parts -- CONNECT BY, PL/SQL packages, AUTONOMOUS_TRANSACTION, Oracle empty string = NULL, and the other "silent killers" that break migrations.
Comparison
| Feature | SteinDB | Ora2Pg | AWS SCT |
|---|---|---|---|
| Automation rate | 90%+ | 40-60% | 40-60% |
| PL/SQL conversion | Rules + AI | Limited | Limited |
| Bidirectional (PG to Oracle) | Yes | No | No |
| Verification with confidence scores | Yes | No | No |
| Offline mode | Yes | Yes | No |
| BYOK model support | Yes | N/A | N/A |
| CONNECT BY handling | Automated | Manual | Partial |
| Package decomposition | Automated | Manual | Manual |
| Silent bug detection | 7 static analysis rules | No | No |
| Price (CLI) | Free | Free | AWS account required |
| Source available | Yes (BSL 1.1) | Yes (PostgreSQL license) | No |
Supported Conversions
35 rule modules covering 870+ constructs in both directions:
| Category | Examples | Status |
|---|---|---|
| Data Types | VARCHAR2, NUMBER, DATE, CLOB, BLOB (23 Oracle / 15 PG types) | Fully automated |
| Functions | NVL, DECODE, SYSDATE, NVL2, ROWNUM | Fully automated |
| DDL | CREATE TABLE, ALTER TABLE, indexes, constraints, sequences | Fully automated |
| PL/SQL | Procedures, functions, packages, triggers, exceptions | Rules + AI |
| DML | CONNECT BY, MERGE, (+) joins, analytic functions | Rules + AI |
| Static Analysis | Empty string = NULL, DATE vs TIMESTAMP, SELECT INTO bugs | 7 detection rules |
Internationalization
SteinDB CLI supports 18 languages: English, Japanese, Korean, Chinese (Simplified & Traditional), German, French, Portuguese (Brazil), Spanish, Hindi, Indonesian, Thai, Vietnamese, Turkish, Italian, Dutch, Polish, and Arabic.
Set your language:
export STEIN_LOCALE=ja # Japanese
stein scan sample.sql
Pricing
The CLI tool is free and open source (BSL 1.1). Rules-only mode works offline with no account required.
Paid tiers add AI-assisted conversion, team collaboration, and managed cloud features.
Cloud Service (Coming Soon)
SteinDB Cloud is an upcoming managed platform that extends the CLI:
- Web Playground -- paste SQL and convert instantly in your browser
- AI-Assisted Conversion -- hosted LLM inference for the ~10% the rule engine forwards
- Team Collaboration -- invite team members, share conversions, manage API keys
- Cloud Migration -- direct database-to-database migration between AWS RDS, GCP Cloud SQL, Azure PostgreSQL, and on-premise instances
- Post-Migration Monitoring -- continuous PostgreSQL performance monitoring after migration
- OAuth Login -- sign in with Google or GitHub
- Dashboard -- conversion history, usage analytics, billing management
Links
License
SteinDB is source-available under the Business Source License 1.1.
- You CAN: read, modify, self-host, and use in production for your own migrations.
- You CANNOT: offer SteinDB as a competing hosted service.
- After 4 years: each version converts to Apache License 2.0.
Same model as HashiCorp Terraform, Sentry, and CockroachDB.
Oracle is a registered trademark of Oracle Corporation. PostgreSQL is a registered trademark of the PostgreSQL Community Association of Canada. SteinDB is not affiliated with, endorsed by, or sponsored by Oracle Corporation or the PostgreSQL Global Development Group.
Metadata
Release files for steindb 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| steindb-0.1.0.tar.gz | 301.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| steindb-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 452.5 kB
Release files / steindb-0.1.0.tar.gz
| Download URL | steindb-0.1.0.tar.gz |
|---|---|
| Size | 301.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
af8bba200865762b6e224f6174837eaeb8032a9542e1a9afd7ba7f21127f69ff
|
|
BLAKE2b-256 checksum How to use checksums |
ce03002dffa4bcdaff9cd4d7c017e5761d6bc9e5aff88e581dd2c4c339f1ccdf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.4
|
Release files / steindb-0.1.0-py3-none-any.whl
| Download URL | steindb-0.1.0-py3-none-any.whl |
|---|---|
| Size | 151.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
98e2d599de2ecbcd41d9f8a74c75a324a0eb5351f1d9a5983abe84d6f43d3e0d
|
|
BLAKE2b-256 checksum How to use checksums |
79667f34ed01c5193f3299459f55f2c236f6910afd9587dc87bb86634b0ea292
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.4
|