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 ¶
- Variables
- func GetSystemDatabaseName(databaseType string) (string, error)
- func HasSystemDB(id DatabaseType) bool
- func HasSystemDBString(name string) bool
- func IsLocalhostVariant(host string) bool
- func IsPrivateAddress(host string) bool
- func IsValidConnectionType(connectionType string) bool
- func NormalizeHost(host string) string
- func SupportsCDC(id DatabaseType) bool
- func SupportsCDCString(name string) bool
- func SupportsParadigm(id DatabaseType, p DataParadigm) bool
- func SupportsParadigmString(name string, p DataParadigm) bool
- func SupportsPrimaryContainer(id DatabaseType, container PrimaryContainer) bool
- func SupportsPrimaryContainerString(name string, container PrimaryContainer) bool
- func ValidateConnectionString(connectionString string) error
- type Capability
- func Get(id DatabaseType) (Capability, bool)
- func GetByConnectionType(connectionType string) (Capability, bool)
- func GetByName(name string) (Capability, bool)
- func MustGet(id DatabaseType) Capability
- func MustGetByConnectionType(connectionType string) Capability
- func MustGetByName(name string) Capability
- type ConnectionDetails
- type DataParadigm
- type DatabaseType
- type PrimaryContainer
Constants ¶
This section is empty.
Variables ¶
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 ¶
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 ¶
HasSystemDBString reports system DB presence using a free-form name (id or alias).
func IsLocalhostVariant ¶
IsLocalhostVariant checks if the given host is a localhost variant. This includes "localhost", "127.x.x.x", and "::1".
func IsPrivateAddress ¶
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 ¶
IsValidConnectionType checks if a connection type string is valid.
func NormalizeHost ¶
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 ¶
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 ¶
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 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.