dbcapabilities

package
v0.0.0-...-ba04163 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 25, 2025 License: AGPL-3.0 Imports: 5 Imported by: 0

Documentation

Overview

Package dbcapabilities provides a shared registry describing the capabilities of databases supported by the platform. Microservices can import this package to make decisions based on uniform metadata (system databases, CDC, paradigms).

Minimal usage example:

import "github.com/redbco/redb-open/pkg/dbcapabilities"

func usesCDC(db string) bool {
    return dbcapabilities.SupportsCDC(dbcapabilities.DatabaseID(db))
}

Example: Checking CDC support when you only have a database_type string (e.g., "postgres") stored in your service's local database:

import (
    "strings"
    "github.com/redbco/redb-open/pkg/dbcapabilities"
)

// databaseType comes from your local DB (e.g., "postgres", "mysql", ...)
func databaseSupportsCDC(databaseType string) bool {
    canonical := dbcapabilities.DatabaseID(strings.ToLower(databaseType))
    return dbcapabilities.SupportsCDC(canonical)
}

// For additional info (system DB names, paradigms, etc.):
func getDatabaseCapability(databaseType string) (dbcapabilities.Capability, bool) {
    canonical := dbcapabilities.DatabaseID(strings.ToLower(databaseType))
    return dbcapabilities.Get(canonical)
}

The package exposes constants for IDs (e.g., dbcapabilities.PostgreSQL) and a registry `All` for advanced consumers.

Index

Constants

This section is empty.

Variables

View Source
var All = map[DatabaseType]Capability{
	PostgreSQL: {
		Name:                     "PostgreSQL",
		ID:                       PostgreSQL,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"postgres"},
		SupportsCDC:              true,
		CDCMechanisms:            []string{"logical_decoding", "wal2json", "pgoutput"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       false,
		SupportedVendors:         []string{"custom", "aws-rds", "aws-aurora", "azure-database", "gcp-cloudsql", "supabase", "heroku-postgres"},
		DefaultPort:              5432,
		DefaultSSLPort:           5432,
		ConnectionStringTemplate: "postgresql://{username}:{password}@{host}:{port}/{database}?sslmode={sslmode}",
		Paradigms:                []DataParadigm{ParadigmRelational},
		PrimaryContainers:        []PrimaryContainer{ContainerTable},
		Aliases:                  []string{"postgresql", "pgsql"},
	},
	MySQL: {
		Name:                     "MySQL",
		ID:                       MySQL,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"mysql"},
		SupportsCDC:              true,
		CDCMechanisms:            []string{"binlog"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       false,
		SupportedVendors:         []string{"custom", "aws-rds", "aws-aurora", "azure-database", "gcp-cloudsql"},
		DefaultPort:              3306,
		DefaultSSLPort:           3306,
		ConnectionStringTemplate: "mysql://{username}:{password}@{host}:{port}/{database}?tls={tls}",
		Paradigms:                []DataParadigm{ParadigmRelational},
		PrimaryContainers:        []PrimaryContainer{ContainerTable},
		Aliases:                  []string{"aurora-mysql"},
	},
	MariaDB: {
		Name:                     "MariaDB",
		ID:                       MariaDB,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"mysql"},
		SupportsCDC:              true,
		CDCMechanisms:            []string{"binlog"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       false,
		SupportedVendors:         []string{"custom", "mariadb-corporation", "aws-rds", "azure-database"},
		DefaultPort:              3306,
		DefaultSSLPort:           3306,
		ConnectionStringTemplate: "mysql://{username}:{password}@{host}:{port}/{database}?tls={tls}",
		Paradigms:                []DataParadigm{ParadigmRelational},
		PrimaryContainers:        []PrimaryContainer{ContainerTable},
	},
	SQLServer: {
		Name:                     "Microsoft SQL Server",
		ID:                       SQLServer,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"master"},
		SupportsCDC:              true,
		CDCMechanisms:            []string{"cdc", "change_tracking"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active", "active-passive"},
		SupportedVendors:         []string{"custom", "azure-sql", "aws-rds", "gcp-sqlserver"},
		DefaultPort:              1433,
		DefaultSSLPort:           1433,
		ConnectionStringTemplate: "sqlserver://{username}:{password}@{host}:{port}/{database}?encrypt={encrypt}&trustservercertificate={trustservercertificate}",
		Paradigms:                []DataParadigm{ParadigmRelational},
		PrimaryContainers:        []PrimaryContainer{ContainerTable},
		Aliases:                  []string{"sqlserver", "mssql", "azure-sql"},
	},
	Oracle: {
		Name:                     "Oracle Database",
		ID:                       Oracle,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"CDB$ROOT"},
		SupportsCDC:              true,
		CDCMechanisms:            []string{"logminer", "goldengate"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active", "active-passive"},
		SupportedVendors:         []string{"custom", "oracle-cloud", "aws-rds", "azure-oracle"},
		DefaultPort:              1521,
		DefaultSSLPort:           1521,
		ConnectionStringTemplate: "oracle://{username}:{password}@{host}:{port}/{database}?server={server}&ssl={ssl}",
		Paradigms:                []DataParadigm{ParadigmRelational},
		PrimaryContainers:        []PrimaryContainer{ContainerTable},
	},
	TiDB: {
		Name:                     "TiDB",
		ID:                       TiDB,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"INFORMATION_SCHEMA", "mysql"},
		SupportsCDC:              true,
		CDCMechanisms:            []string{"tidb-binlog", "changefeed"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active"},
		SupportedVendors:         []string{"custom", "pingcap-cloud", "tidb-cloud"},
		DefaultPort:              4000,
		DefaultSSLPort:           4000,
		ConnectionStringTemplate: "tidb://{username}:{password}@{host}:{port}/{database}?sslmode={sslmode}&tidb_cluster_id={tidb_cluster_id}",
		Paradigms:                []DataParadigm{ParadigmRelational},
		PrimaryContainers:        []PrimaryContainer{ContainerTable},
		Aliases:                  []string{"tidb", "pingcap-tidb"},
	},
	ClickHouse: {
		Name:                     "ClickHouse",
		ID:                       ClickHouse,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"system"},
		SupportsCDC:              false,
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active", "active-passive"},
		SupportedVendors:         []string{"custom", "clickhouse-cloud", "altinity"},
		DefaultPort:              8123,
		DefaultSSLPort:           9000,
		ConnectionStringTemplate: "clickhouse://{username}:{password}@{host}:{port}/{database}?secure={secure}&compress={compress}",
		Paradigms:                []DataParadigm{ParadigmColumnar},
		PrimaryContainers:        []PrimaryContainer{ContainerTable},
	},
	DB2: {
		Name:                     "IBM Db2",
		ID:                       DB2,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"SYSIBM"},
		SupportsCDC:              true,
		CDCMechanisms:            []string{"ibm-cdc"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active", "active-passive"},
		SupportedVendors:         []string{"custom", "ibm-cloud"},
		DefaultPort:              50000,
		DefaultSSLPort:           50000,
		ConnectionStringTemplate: "db2://{username}:{password}@{host}:{port}/{database}?security={security}",
		Paradigms:                []DataParadigm{ParadigmRelational},
		PrimaryContainers:        []PrimaryContainer{ContainerTable},
		Aliases:                  []string{"ibm-db2"},
	},
	CockroachDB: {
		Name:                     "CockroachDB",
		ID:                       CockroachDB,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"system"},
		SupportsCDC:              true,
		CDCMechanisms:            []string{"changefeed"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active"},
		SupportedVendors:         []string{"custom", "cockroach-cloud"},
		DefaultPort:              26257,
		DefaultSSLPort:           26257,
		ConnectionStringTemplate: "postgresql://{username}:{password}@{host}:{port}/{database}?sslmode={sslmode}&options={options}",
		Paradigms:                []DataParadigm{ParadigmRelational},
		PrimaryContainers:        []PrimaryContainer{ContainerTable},
		Aliases:                  []string{"cockroachdb"},
	},
	Cassandra: {
		Name:                     "Apache Cassandra",
		ID:                       Cassandra,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"system"},
		SupportsCDC:              true,
		CDCMechanisms:            []string{"commitlog-cdc"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active"},
		SupportedVendors:         []string{"custom", "datastax-astara", "aws-keyspaces"},
		DefaultPort:              9042,
		DefaultSSLPort:           9042,
		ConnectionStringTemplate: "cassandra://{username}:{password}@{host}:{port}/{database}?consistency={consistency}&ssl={ssl}",
		Paradigms:                []DataParadigm{ParadigmWideColumn, ParadigmTimeSeries},
		PrimaryContainers:        []PrimaryContainer{ContainerTable},
	},
	DynamoDB: {
		Name:                     "Amazon DynamoDB",
		ID:                       DynamoDB,
		HasSystemDatabase:        false,
		SupportsCDC:              true,
		CDCMechanisms:            []string{"streams"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       false,
		SupportedVendors:         []string{"aws-dynamodb"},
		DefaultPort:              443,
		DefaultSSLPort:           443,
		ConnectionStringTemplate: "dynamodb://{username}:{password}@{host}?endpoint={endpoint}&table={table}",
		Paradigms:                []DataParadigm{ParadigmKeyValue, ParadigmWideColumn},
		PrimaryContainers:        []PrimaryContainer{ContainerKeyValuePair},
	},
	MongoDB: {
		Name:                     "MongoDB",
		ID:                       MongoDB,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"admin"},
		SupportsCDC:              true,
		CDCMechanisms:            []string{"change_streams"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active", "active-passive"},
		SupportedVendors:         []string{"custom", "mongodb-atlas", "azure-cosmosdb-mongo"},
		DefaultPort:              27017,
		DefaultSSLPort:           27017,
		ConnectionStringTemplate: "mongodb://{username}:{password}@{host}:{port}/{database}?ssl={ssl}",
		Paradigms:                []DataParadigm{ParadigmDocument},
		PrimaryContainers:        []PrimaryContainer{ContainerCollection},
	},
	Redis: {
		Name:                     "Redis",
		ID:                       Redis,
		HasSystemDatabase:        false,
		SupportsCDC:              false,
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active", "active-passive"},
		SupportedVendors:         []string{"custom", "aws-elasticache", "azure-redis", "gcp-memorystore"},
		DefaultPort:              6379,
		DefaultSSLPort:           6379,
		ConnectionStringTemplate: "redis://{username}:{password}@{host}:{port}/{database}?ssl={ssl}",
		Paradigms:                []DataParadigm{ParadigmKeyValue, ParadigmTimeSeries},
		PrimaryContainers:        []PrimaryContainer{ContainerKeyValuePair},
	},
	Neo4j: {
		Name:                     "Neo4j",
		ID:                       Neo4j,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"system"},
		SupportsCDC:              false,
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active"},
		SupportedVendors:         []string{"custom", "neo4j-aura"},
		DefaultPort:              7474,
		DefaultSSLPort:           7473,
		ConnectionStringTemplate: "neo4j://{username}:{password}@{host}:{port}/{database}?ssl={ssl}",
		Paradigms:                []DataParadigm{ParadigmGraph},
		PrimaryContainers:        []PrimaryContainer{ContainerNode, ContainerRelationship},
	},
	Elasticsearch: {
		Name:                     "Elasticsearch",
		ID:                       Elasticsearch,
		HasSystemDatabase:        false,
		SupportsCDC:              false,
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active"},
		SupportedVendors:         []string{"custom", "elastic-cloud", "aws-opensearch", "azure-elasticsearch"},
		DefaultPort:              9200,
		DefaultSSLPort:           9200,
		ConnectionStringTemplate: "elasticsearch://{username}:{password}@{host}:{port}/{database}?ssl={ssl}",
		Paradigms:                []DataParadigm{ParadigmSearchIndex},
		PrimaryContainers:        []PrimaryContainer{ContainerSearchDocument},
	},
	OpenSearch: {
		Name:                     "OpenSearch",
		ID:                       OpenSearch,
		HasSystemDatabase:        false,
		SupportsCDC:              false,
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active"},
		SupportedVendors:         []string{"custom", "aws-opensearch"},
		DefaultPort:              9200,
		DefaultSSLPort:           9200,
		ConnectionStringTemplate: "opensearch://{username}:{password}@{host}:{port}/{database}?ssl={ssl}",
		Paradigms:                []DataParadigm{ParadigmSearchIndex},
		PrimaryContainers:        []PrimaryContainer{ContainerSearchDocument},
		Aliases:                  []string{"opensearch", "aws-opensearch"},
	},
	Solr: {
		Name:                     "Apache Solr",
		ID:                       Solr,
		HasSystemDatabase:        false,
		SupportsCDC:              false,
		HasUniqueIdentifier:      false,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"solrcloud"},
		SupportedVendors:         []string{"custom"},
		DefaultPort:              8983,
		DefaultSSLPort:           8983,
		ConnectionStringTemplate: "http://{host}:{port}/solr/{collection}",
		Paradigms:                []DataParadigm{ParadigmSearchIndex},
		PrimaryContainers:        []PrimaryContainer{ContainerSearchDocument},
		Aliases:                  []string{"solr", "apache-solr"},
	},
	CosmosDB: {
		Name:                     "Azure Cosmos DB",
		ID:                       CosmosDB,
		HasSystemDatabase:        false,
		SupportsCDC:              true,
		CDCMechanisms:            []string{"change_feed"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       false,
		SupportedVendors:         []string{"azure-cosmosdb"},
		DefaultPort:              443,
		DefaultSSLPort:           443,
		ConnectionStringTemplate: "cosmosdb://{username}:{password}@{host}:{port}/{database}?ssl={ssl}",
		Paradigms:                []DataParadigm{ParadigmDocument, ParadigmKeyValue, ParadigmGraph},
		PrimaryContainers:        []PrimaryContainer{ContainerCollection, ContainerNode, ContainerRelationship},
	},
	Snowflake: {
		Name:                     "Snowflake",
		ID:                       Snowflake,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"SNOWFLAKE"},
		SupportsCDC:              true,
		CDCMechanisms:            []string{"streams"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       false,
		SupportedVendors:         []string{"snowflake"},
		DefaultPort:              443,
		DefaultSSLPort:           443,
		ConnectionStringTemplate: "snowflake://{username}:{password}@{host}:{port}/{database}?ssl={ssl}",
		Paradigms:                []DataParadigm{ParadigmColumnar},
		PrimaryContainers:        []PrimaryContainer{ContainerTable},
	},
	Iceberg: {
		Name:                     "Apache Iceberg",
		ID:                       Iceberg,
		HasSystemDatabase:        false,
		SupportsCDC:              false,
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"partitioning", "bucketing"},
		SupportedVendors:         []string{"custom", "aws-s3", "azure-blob", "gcp-storage", "spark", "trino", "presto"},
		DefaultPort:              8080,
		DefaultSSLPort:           8443,
		ConnectionStringTemplate: "iceberg://{username}:{password}@{host}:{port}/{database}?catalog={catalog}&warehouse={warehouse}",
		Paradigms:                []DataParadigm{ParadigmColumnar, ParadigmObjectStore},
		PrimaryContainers:        []PrimaryContainer{ContainerTable},
		Aliases:                  []string{"apache-iceberg"},
	},
	Milvus: {
		Name:                     "Milvus",
		ID:                       Milvus,
		HasSystemDatabase:        false,
		SupportsCDC:              false,
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active"},
		SupportedVendors:         []string{"custom", "zilliz-cloud"},
		DefaultPort:              19530,
		DefaultSSLPort:           19530,
		ConnectionStringTemplate: "milvus://{username}:{password}@{host}:{port}/{database}?ssl={ssl}",
		Paradigms:                []DataParadigm{ParadigmVector},
		PrimaryContainers:        []PrimaryContainer{ContainerEmbedding},
	},
	Weaviate: {
		Name:                     "Weaviate",
		ID:                       Weaviate,
		HasSystemDatabase:        false,
		SupportsCDC:              false,
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active"},
		SupportedVendors:         []string{"custom", "weaviate-cloud"},
		DefaultPort:              8080,
		DefaultSSLPort:           8080,
		ConnectionStringTemplate: "weaviate://{username}:{password}@{host}:{port}/{database}?ssl={ssl}",
		Paradigms:                []DataParadigm{ParadigmVector},
		PrimaryContainers:        []PrimaryContainer{ContainerEmbedding},
	},
	Pinecone: {
		Name:                     "Pinecone",
		ID:                       Pinecone,
		HasSystemDatabase:        false,
		SupportsCDC:              false,
		HasUniqueIdentifier:      true,
		SupportsClustering:       false,
		SupportedVendors:         []string{"pinecone"},
		DefaultPort:              8080,
		DefaultSSLPort:           8080,
		ConnectionStringTemplate: "pinecone://{username}:{password}@{host}:{port}/{database}?ssl={ssl}",
		Paradigms:                []DataParadigm{ParadigmVector},
		PrimaryContainers:        []PrimaryContainer{ContainerEmbedding},
	},
	Chroma: {
		Name:                     "Chroma",
		ID:                       Chroma,
		HasSystemDatabase:        false,
		SupportsCDC:              false,
		HasUniqueIdentifier:      false,
		SupportsClustering:       false,
		SupportedVendors:         []string{"custom"},
		DefaultPort:              8000,
		DefaultSSLPort:           8000,
		ConnectionStringTemplate: "chroma://{username}:{password}@{host}:{port}/{database}?ssl={ssl}",
		Paradigms:                []DataParadigm{ParadigmVector},
		PrimaryContainers:        []PrimaryContainer{ContainerEmbedding},
	},
	LanceDB: {
		Name:                     "LanceDB",
		ID:                       LanceDB,
		HasSystemDatabase:        false,
		SupportsCDC:              false,
		HasUniqueIdentifier:      false,
		SupportsClustering:       false,
		SupportedVendors:         []string{"custom"},
		DefaultPort:              6666,
		DefaultSSLPort:           6666,
		ConnectionStringTemplate: "lancedb://{username}:{password}@{host}:{port}/{database}?ssl={ssl}",
		Paradigms:                []DataParadigm{ParadigmVector},
		PrimaryContainers:        []PrimaryContainer{ContainerEmbedding},
	},
	DuckDB: {
		Name:                     "DuckDB",
		ID:                       DuckDB,
		HasSystemDatabase:        false,
		SupportsCDC:              false,
		HasUniqueIdentifier:      false,
		SupportsClustering:       false,
		SupportedVendors:         []string{"custom"},
		DefaultPort:              8080,
		DefaultSSLPort:           8080,
		ConnectionStringTemplate: "duckdb://{username}:{password}@{host}:{port}/{database}?ssl={ssl}",
		Paradigms:                []DataParadigm{ParadigmRelational},
		PrimaryContainers:        []PrimaryContainer{ContainerTable},
	},
	HANA: {
		Name:                     "SAP HANA",
		ID:                       HANA,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"SYSTEMDB"},
		SupportsCDC:              true,
		CDCMechanisms:            []string{"sda", "sdi", "triggers"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active"},
		SupportedVendors:         []string{"custom", "sap-cloud"},
		DefaultPort:              30015,
		DefaultSSLPort:           30015,
		ConnectionStringTemplate: "hdb://{username}:{password}@{host}:{port}?database={database}",
		Paradigms:                []DataParadigm{ParadigmRelational, ParadigmColumnar},
		PrimaryContainers:        []PrimaryContainer{ContainerTable},
		Aliases:                  []string{"sap-hana", "hdb", "saphana"},
	},
	EdgeDB: {
		Name:                     "EdgeDB",
		ID:                       EdgeDB,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"edgedb"},
		SupportsCDC:              false,
		HasUniqueIdentifier:      false,
		SupportsClustering:       false,
		SupportedVendors:         []string{"custom", "edgedb-cloud"},
		DefaultPort:              5656,
		DefaultSSLPort:           5656,
		ConnectionStringTemplate: "edgedb://{username}:{password}@{host}:{port}/{database}?ssl={ssl}",
		Paradigms:                []DataParadigm{ParadigmRelational, ParadigmGraph},
		PrimaryContainers:        []PrimaryContainer{ContainerTable, ContainerNode, ContainerRelationship},
		Aliases:                  []string{"gel", "geldata"},
	},
	S3: {
		Name:                     "Amazon S3",
		ID:                       S3,
		HasSystemDatabase:        false,
		SupportsCDC:              false,
		HasUniqueIdentifier:      true,
		SupportsClustering:       false,
		SupportedVendors:         []string{"aws-s3"},
		DefaultPort:              443,
		DefaultSSLPort:           443,
		ConnectionStringTemplate: "s3://{username}:{password}@{host}:{port}/{database}?ssl={ssl}",
		Paradigms:                []DataParadigm{ParadigmObjectStore},
		PrimaryContainers:        []PrimaryContainer{ContainerBlob},
		Aliases:                  []string{"aws-s3"},
	},
	GCS: {
		Name:                     "Google Cloud Storage",
		ID:                       GCS,
		HasSystemDatabase:        false,
		SupportsCDC:              false,
		HasUniqueIdentifier:      true,
		SupportsClustering:       false,
		SupportedVendors:         []string{"gcp-storage"},
		DefaultPort:              443,
		DefaultSSLPort:           443,
		ConnectionStringTemplate: "gs://{username}:{password}@{host}:{port}/{database}?ssl={ssl}",
		Paradigms:                []DataParadigm{ParadigmObjectStore},
		PrimaryContainers:        []PrimaryContainer{ContainerBlob},
		Aliases:                  []string{"google-cloud-storage"},
	},
	AzureBlob: {
		Name:                     "Azure Blob Storage",
		ID:                       AzureBlob,
		HasSystemDatabase:        false,
		SupportsCDC:              false,
		HasUniqueIdentifier:      true,
		SupportsClustering:       false,
		SupportedVendors:         []string{"azure-blob"},
		DefaultPort:              443,
		DefaultSSLPort:           443,
		ConnectionStringTemplate: "az://{username}:{password}@{host}:{port}/{database}?ssl={ssl}",
		Paradigms:                []DataParadigm{ParadigmObjectStore},
		PrimaryContainers:        []PrimaryContainer{ContainerBlob},
		Aliases:                  []string{"azure-blob", "azureblob"},
	},
	MinIO: {
		Name:                     "MinIO",
		ID:                       MinIO,
		HasSystemDatabase:        false,
		SupportsCDC:              false,
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active"},
		SupportedVendors:         []string{"custom"},
		DefaultPort:              9000,
		DefaultSSLPort:           9000,
		ConnectionStringTemplate: "minio://{username}:{password}@{host}:{port}/{database}?ssl={ssl}",
		Paradigms:                []DataParadigm{ParadigmObjectStore},
		PrimaryContainers:        []PrimaryContainer{ContainerBlob},
	},
	InfluxDB: {
		Name:                     "InfluxDB",
		ID:                       InfluxDB,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"_monitoring", "_tasks"},
		SupportsCDC:              true,
		CDCMechanisms:            []string{"tasks", "telegraf"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active"},
		SupportedVendors:         []string{"custom", "influxdata-cloud"},
		DefaultPort:              8086,
		DefaultSSLPort:           8086,
		ConnectionStringTemplate: "http://{host}:{port}?org={org}&bucket={bucket}&token={token}",
		Paradigms:                []DataParadigm{ParadigmTimeSeries},
		PrimaryContainers:        []PrimaryContainer{ContainerTimeSeriesPoint},
		Aliases:                  []string{"influx"},
	},
	TimescaleDB: {
		Name:                     "TimescaleDB",
		ID:                       TimescaleDB,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"postgres"},
		SupportsCDC:              true,
		CDCMechanisms:            []string{"logical_decoding", "wal2json", "pgoutput"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-passive"},
		SupportedVendors:         []string{"custom", "timescale-cloud"},
		DefaultPort:              5432,
		DefaultSSLPort:           5432,
		ConnectionStringTemplate: "postgresql://{username}:{password}@{host}:{port}/{database}?sslmode={sslmode}",
		Paradigms:                []DataParadigm{ParadigmTimeSeries, ParadigmRelational},
		PrimaryContainers:        []PrimaryContainer{ContainerTimeSeriesPoint, ContainerTable},
		Aliases:                  []string{"timescale"},
	},
	Prometheus: {
		Name:                     "Prometheus",
		ID:                       Prometheus,
		HasSystemDatabase:        false,
		SupportsCDC:              true,
		CDCMechanisms:            []string{"federation", "remote_write"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active"},
		SupportedVendors:         []string{"custom"},
		DefaultPort:              9090,
		DefaultSSLPort:           9090,
		ConnectionStringTemplate: "http://{host}:{port}",
		Paradigms:                []DataParadigm{ParadigmTimeSeries},
		PrimaryContainers:        []PrimaryContainer{ContainerTimeSeriesPoint},
		Aliases:                  []string{"prom"},
	},
	QuestDB: {
		Name:                     "QuestDB",
		ID:                       QuestDB,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"sys"},
		SupportsCDC:              false,
		HasUniqueIdentifier:      true,
		SupportsClustering:       false,
		SupportedVendors:         []string{"custom", "questdb-cloud"},
		DefaultPort:              8812,
		DefaultSSLPort:           8812,
		ConnectionStringTemplate: "postgresql://{username}:{password}@{host}:{port}/{database}?sslmode={sslmode}",
		Paradigms:                []DataParadigm{ParadigmTimeSeries, ParadigmRelational},
		PrimaryContainers:        []PrimaryContainer{ContainerTimeSeriesPoint, ContainerTable},
		Aliases:                  []string{"quest"},
	},
	VictoriaMetrics: {
		Name:                     "VictoriaMetrics",
		ID:                       VictoriaMetrics,
		HasSystemDatabase:        false,
		SupportsCDC:              true,
		CDCMechanisms:            []string{"remote_write"},
		HasUniqueIdentifier:      false,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active"},
		SupportedVendors:         []string{"custom", "victoriametrics-cloud"},
		DefaultPort:              8428,
		DefaultSSLPort:           8428,
		ConnectionStringTemplate: "http://{host}:{port}",
		Paradigms:                []DataParadigm{ParadigmTimeSeries},
		PrimaryContainers:        []PrimaryContainer{ContainerTimeSeriesPoint},
		Aliases:                  []string{"vm", "victoria"},
	},
	BigQuery: {
		Name:                     "Google BigQuery",
		ID:                       BigQuery,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"INFORMATION_SCHEMA"},
		SupportsCDC:              true,
		CDCMechanisms:            []string{"change_history", "log_analytics"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       false,
		SupportedVendors:         []string{"gcp-bigquery"},
		DefaultPort:              443,
		DefaultSSLPort:           443,
		ConnectionStringTemplate: "bigquery://{project_id}/{dataset}?location={location}",
		Paradigms:                []DataParadigm{ParadigmColumnar},
		PrimaryContainers:        []PrimaryContainer{ContainerTable},
		Aliases:                  []string{"bq"},
	},
	Redshift: {
		Name:                     "Amazon Redshift",
		ID:                       Redshift,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"dev"},
		SupportsCDC:              true,
		CDCMechanisms:            []string{"kinesis", "eventbridge"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-passive"},
		SupportedVendors:         []string{"aws-redshift"},
		DefaultPort:              5439,
		DefaultSSLPort:           5439,
		ConnectionStringTemplate: "postgresql://{username}:{password}@{host}:{port}/{database}?sslmode={sslmode}",
		Paradigms:                []DataParadigm{ParadigmColumnar},
		PrimaryContainers:        []PrimaryContainer{ContainerTable},
		Aliases:                  []string{"aws-redshift"},
	},
	Synapse: {
		Name:                     "Azure Synapse Analytics",
		ID:                       Synapse,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"master"},
		SupportsCDC:              true,
		CDCMechanisms:            []string{"cdc", "change_tracking"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-passive"},
		SupportedVendors:         []string{"azure-synapse"},
		DefaultPort:              1433,
		DefaultSSLPort:           1433,
		ConnectionStringTemplate: "sqlserver://{username}:{password}@{host}:{port}/{database}?encrypt={encrypt}",
		Paradigms:                []DataParadigm{ParadigmColumnar},
		PrimaryContainers:        []PrimaryContainer{ContainerTable},
		Aliases:                  []string{"azure-synapse"},
	},
	Databricks: {
		Name:                     "Databricks",
		ID:                       Databricks,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"information_schema"},
		SupportsCDC:              true,
		CDCMechanisms:            []string{"delta_cdf"},
		HasUniqueIdentifier:      true,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active"},
		SupportedVendors:         []string{"databricks-cloud", "aws-databricks", "azure-databricks", "gcp-databricks"},
		DefaultPort:              443,
		DefaultSSLPort:           443,
		ConnectionStringTemplate: "databricks://{host}:{port}?token={token}&http_path={http_path}",
		Paradigms:                []DataParadigm{ParadigmColumnar, ParadigmObjectStore},
		PrimaryContainers:        []PrimaryContainer{ContainerTable},
		Aliases:                  []string{"databricks-sql"},
	},
	Druid: {
		Name:                     "Apache Druid",
		ID:                       Druid,
		HasSystemDatabase:        true,
		SystemDatabases:          []string{"INFORMATION_SCHEMA", "sys"},
		SupportsCDC:              true,
		CDCMechanisms:            []string{"kafka_indexing"},
		HasUniqueIdentifier:      false,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active"},
		SupportedVendors:         []string{"custom", "imply-cloud"},
		DefaultPort:              8888,
		DefaultSSLPort:           8888,
		ConnectionStringTemplate: "http://{host}:{port}/druid/v2/sql",
		Paradigms:                []DataParadigm{ParadigmColumnar, ParadigmTimeSeries},
		PrimaryContainers:        []PrimaryContainer{ContainerTable, ContainerTimeSeriesPoint},
		Aliases:                  []string{"druid"},
	},
	ApachePinot: {
		Name:                     "Apache Pinot",
		ID:                       ApachePinot,
		HasSystemDatabase:        false,
		SupportsCDC:              true,
		CDCMechanisms:            []string{"kafka_stream", "pulsar_stream"},
		HasUniqueIdentifier:      false,
		SupportsClustering:       true,
		ClusteringMechanisms:     []string{"active-active"},
		SupportedVendors:         []string{"custom", "startree-cloud"},
		DefaultPort:              8099,
		DefaultSSLPort:           8099,
		ConnectionStringTemplate: "http://{host}:{port}",
		Paradigms:                []DataParadigm{ParadigmColumnar},
		PrimaryContainers:        []PrimaryContainer{ContainerTable},
		Aliases:                  []string{"pinot"},
	},
}

All is a registry of capabilities keyed by the canonical database ID.

Functions

func GetSystemDatabaseName

func GetSystemDatabaseName(databaseType string) (string, error)

GetSystemDatabaseName returns the system database name for instance connections

func HasSystemDB

func HasSystemDB(id DatabaseType) bool

HasSystemDB is a convenience accessor for HasSystemDatabase.

func HasSystemDBString

func HasSystemDBString(name string) bool

HasSystemDBString reports system DB presence using a free-form name (id or alias).

func IsLocalhostVariant

func IsLocalhostVariant(host string) bool

IsLocalhostVariant checks if the given host is a localhost variant. This includes "localhost", "127.x.x.x", and "::1".

func IsPrivateAddress

func IsPrivateAddress(host string) bool

IsPrivateAddress determines if a host address is private/local. Returns true for:

  • localhost and loopback IPs (127.0.0.0/8, ::1)
  • Private IPv4 ranges: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16
  • Private IPv6 ranges: fc00::/7 (unique local), fe80::/10 (link-local)

Returns false for:

  • Public IPv4 addresses (outside private ranges)
  • Public IPv6 addresses (outside private ranges)
  • Hostnames (non-IP strings) - treated as public (DBaaS services with global DNS)

func IsValidConnectionType

func IsValidConnectionType(connectionType string) bool

IsValidConnectionType checks if a connection type string is valid.

func NormalizeHost

func NormalizeHost(host string) string

NormalizeHost converts localhost variants to a canonical form. It converts "localhost", "127.0.0.1", and "::1" to "localhost". All other hosts remain unchanged (no DNS resolution is performed).

func SupportsCDC

func SupportsCDC(id DatabaseType) bool

SupportsCDC reports whether CDC-style replication is supported.

func SupportsCDCString

func SupportsCDCString(name string) bool

SupportsCDCString reports CDC support using a free-form name (id or alias).

func SupportsParadigm

func SupportsParadigm(id DatabaseType, p DataParadigm) bool

SupportsParadigm reports whether the database supports a given data paradigm.

func SupportsParadigmString

func SupportsParadigmString(name string, p DataParadigm) bool

SupportsParadigmString reports whether the database supports a given paradigm using a free-form name.

func SupportsPrimaryContainer

func SupportsPrimaryContainer(id DatabaseType, container PrimaryContainer) bool

SupportsPrimaryContainer checks if a database supports a specific primary container type.

func SupportsPrimaryContainerString

func SupportsPrimaryContainerString(name string, container PrimaryContainer) bool

SupportsPrimaryContainerString checks if a database (by name/alias) supports a specific primary container type.

func ValidateConnectionString

func ValidateConnectionString(connectionString string) error

ValidateConnectionString validates a connection string without fully parsing it

Types

type Capability

type Capability struct {
	// Human-friendly vendor or product name, e.g., "PostgreSQL".
	Name string `json:"name"`

	// Canonical ID used across the codebase (see DatabaseType constants), e.g., "postgres".
	ID DatabaseType `json:"id"`

	// Whether the database exposes a built-in/system database and its typical names.
	HasSystemDatabase bool     `json:"hasSystemDatabase"`
	SystemDatabases   []string `json:"systemDatabases,omitempty"`

	// Whether Change Data Capture (CDC) style replication is supported.
	SupportsCDC   bool     `json:"supportsCDC"`
	CDCMechanisms []string `json:"cdcMechanisms,omitempty"`

	// Whether the instance has a unique identifier
	HasUniqueIdentifier bool `json:"hasUniqueIdentifier"`

	// Clustering support
	SupportsClustering   bool     `json:"supportsClustering"`
	ClusteringMechanisms []string `json:"clusteringMechanisms,omitempty"`

	// List of hosting providers that support the database
	SupportedVendors []string `json:"supportedVendors,omitempty"`

	// Default ports
	DefaultPort    int `json:"defaultPort"`
	DefaultSSLPort int `json:"defaultSSLPort"`

	// Connection string template
	ConnectionStringTemplate string `json:"connectionStringTemplate"`

	// Primary data storage paradigms supported.
	Paradigms []DataParadigm `json:"paradigms"`

	// Primary data containers supported by this database.
	// These represent the actual container types where data is stored (tables, collections, nodes, etc.)
	PrimaryContainers []PrimaryContainer `json:"primaryContainers"`

	// Common aliases (directory names, drivers, env labels) that map to this database.
	Aliases []string `json:"aliases,omitempty"`
}

Capability describes what a database supports in a way that microservices can consume uniformly.

func Get

func Get(id DatabaseType) (Capability, bool)

Get returns capabilities for the given ID and a boolean indicating existence.

func GetByConnectionType

func GetByConnectionType(connectionType string) (Capability, bool)

GetByConnectionType returns the Capability by looking up using a connection type string. This is useful for refactoring existing code that uses connection type strings.

func GetByName

func GetByName(name string) (Capability, bool)

GetByName returns the Capability by looking up using a free-form name (id or alias).

func MustGet

func MustGet(id DatabaseType) Capability

MustGet returns capabilities for the given ID and panics if not found.

func MustGetByConnectionType

func MustGetByConnectionType(connectionType string) Capability

MustGetByConnectionType returns the Capability by connection type or panics if unknown.

func MustGetByName

func MustGetByName(name string) Capability

MustGetByName returns the Capability by name or panics if unknown.

type ConnectionDetails

type ConnectionDetails struct {
	DatabaseType   string            `json:"database_type"`
	DatabaseVendor string            `json:"database_vendor"`
	Host           string            `json:"host"`
	Port           int32             `json:"port"`
	Username       string            `json:"username"`
	Password       string            `json:"password"`
	DatabaseName   string            `json:"database_name"`
	SSL            bool              `json:"ssl"`
	SSLMode        string            `json:"ssl_mode"`
	Parameters     map[string]string `json:"parameters"`
	IsSystemDB     bool              `json:"is_system_db"`
	SystemDBName   string            `json:"system_db_name,omitempty"`
}

ConnectionDetails holds parsed connection information

func ParseConnectionString

func ParseConnectionString(connectionString string) (*ConnectionDetails, error)

ParseConnectionString parses a connection string and returns connection details

type DataParadigm

type DataParadigm string

DataParadigm enumerates the primary data storage paradigms a database supports.

const (
	ParadigmRelational  DataParadigm = "relational"    // Tables, schemas, SQL
	ParadigmDocument    DataParadigm = "document"      // Collections, documents
	ParadigmKeyValue    DataParadigm = "keyvalue"      // Key/Value
	ParadigmGraph       DataParadigm = "graph"         // Nodes/Edges
	ParadigmColumnar    DataParadigm = "columnar"      // Columnar analytics
	ParadigmWideColumn  DataParadigm = "widecolumn"    // Wide-column (e.g., Cassandra)
	ParadigmSearchIndex DataParadigm = "searchindex"   // Inverted indices (e.g., Elasticsearch)
	ParadigmVector      DataParadigm = "vector"        // Vector embeddings
	ParadigmTimeSeries  DataParadigm = "timeseries"    // Time-series specialized
	ParadigmObjectStore DataParadigm = "objectstorage" // Object/blob storage
)

type DatabaseType

type DatabaseType string

DatabaseType is the canonical identifier for a database technology supported by reDB. Use these constants to look up capability information.

const (
	// Relational SQL
	PostgreSQL  DatabaseType = "postgres"
	MySQL       DatabaseType = "mysql"
	MariaDB     DatabaseType = "mariadb"
	SQLServer   DatabaseType = "mssql"
	Oracle      DatabaseType = "oracle"
	TiDB        DatabaseType = "tidb"
	ClickHouse  DatabaseType = "clickhouse"
	DB2         DatabaseType = "db2"
	CockroachDB DatabaseType = "cockroach"
	DuckDB      DatabaseType = "duckdb"
	HANA        DatabaseType = "hana"

	// NoSQL / Other paradigms
	Cassandra     DatabaseType = "cassandra"
	DynamoDB      DatabaseType = "dynamodb"
	MongoDB       DatabaseType = "mongodb"
	Redis         DatabaseType = "redis"
	Neo4j         DatabaseType = "neo4j"
	Elasticsearch DatabaseType = "elasticsearch"
	OpenSearch    DatabaseType = "opensearch"
	Solr          DatabaseType = "solr"
	CosmosDB      DatabaseType = "cosmosdb"

	// Analytics / Columnar / Cloud warehouses
	Snowflake DatabaseType = "snowflake"
	Iceberg   DatabaseType = "iceberg"

	// Vectors / AI
	Milvus   DatabaseType = "milvus"
	Weaviate DatabaseType = "weaviate"
	Pinecone DatabaseType = "pinecone"
	Chroma   DatabaseType = "chroma"
	LanceDB  DatabaseType = "lancedb"

	// Other
	EdgeDB DatabaseType = "edgedb"

	// Object Storage
	S3        DatabaseType = "s3"
	GCS       DatabaseType = "gcs"
	AzureBlob DatabaseType = "azure_blob"
	MinIO     DatabaseType = "minio"

	// Time Series
	InfluxDB        DatabaseType = "influxdb"
	TimescaleDB     DatabaseType = "timescaledb"
	Prometheus      DatabaseType = "prometheus"
	QuestDB         DatabaseType = "questdb"
	VictoriaMetrics DatabaseType = "victoriametrics"

	// Cloud Data Warehouses
	BigQuery DatabaseType = "bigquery"
	Redshift DatabaseType = "redshift"
	Synapse  DatabaseType = "synapse"

	// Analytics Platforms
	Databricks  DatabaseType = "databricks"
	Druid       DatabaseType = "druid"
	ApachePinot DatabaseType = "apachepinot"
)

func IDs

func IDs() []DatabaseType

IDs returns the list of all known database IDs.

func ParseID

func ParseID(name string) (DatabaseType, bool)

ParseID attempts to resolve an arbitrary database name (canonical id, alias, or product name) to a canonical DatabaseType. Returns false if unknown.

type PrimaryContainer

type PrimaryContainer string

PrimaryContainer represents the primary data storage container type that holds actual data. These map to the 9 primary data containers in the UnifiedModel.

const (
	ContainerTable           PrimaryContainer = "table"             // Tabular Record Sets (Relational, Wide-Column)
	ContainerCollection      PrimaryContainer = "collection"        // Documents (Document Databases)
	ContainerNode            PrimaryContainer = "node"              // Graph Nodes (Graph Databases)
	ContainerRelationship    PrimaryContainer = "relationship"      // Graph Relationships (Graph Databases)
	ContainerEmbedding       PrimaryContainer = "embedding"         // Vector Embeddings (Vector Databases)
	ContainerKeyValuePair    PrimaryContainer = "key_value_pair"    // Key-Value Items (Key-Value Stores)
	ContainerSearchDocument  PrimaryContainer = "search_document"   // Search Documents (Search Engines)
	ContainerTimeSeriesPoint PrimaryContainer = "time_series_point" // Time-Series Data Points (Time-Series Databases)
	ContainerBlob            PrimaryContainer = "blob"              // Binary Large Objects (Object Storage)
)

func GetPrimaryContainers

func GetPrimaryContainers(id DatabaseType) []PrimaryContainer

GetPrimaryContainers returns all primary containers supported by a database.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL