97 lines
2.6 KiB
Go
97 lines
2.6 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"git.warky.dev/wdevs/relspecgo/pkg/readers"
|
|
"git.warky.dev/wdevs/relspecgo/pkg/readers/pgsql"
|
|
)
|
|
|
|
func main() {
|
|
// Example PostgreSQL connection string
|
|
// Format: postgres://username:password@localhost:5432/database_name
|
|
connectionString := "postgres://user:password@localhost:5432/mydb"
|
|
|
|
// Create reader options
|
|
options := &readers.ReaderOptions{
|
|
ConnectionString: connectionString,
|
|
}
|
|
|
|
// Create PostgreSQL reader
|
|
reader := pgsql.NewReader(options)
|
|
|
|
// Read the entire database
|
|
db, err := reader.ReadDatabase()
|
|
if err != nil {
|
|
log.Fatalf("Failed to read database: %v", err)
|
|
}
|
|
|
|
// Display database information
|
|
fmt.Printf("Database: %s\n", db.Name)
|
|
fmt.Printf("Type: %s\n", db.DatabaseType)
|
|
fmt.Printf("Version: %s\n", db.DatabaseVersion)
|
|
fmt.Printf("Schemas: %d\n\n", len(db.Schemas))
|
|
|
|
// Iterate through schemas
|
|
for _, schema := range db.Schemas {
|
|
fmt.Printf("Schema: %s\n", schema.Name)
|
|
fmt.Printf(" Tables: %d\n", len(schema.Tables))
|
|
fmt.Printf(" Views: %d\n", len(schema.Views))
|
|
fmt.Printf(" Sequences: %d\n", len(schema.Sequences))
|
|
|
|
// Display table details
|
|
for _, table := range schema.Tables {
|
|
fmt.Printf(" Table: %s.%s\n", schema.Name, table.Name)
|
|
fmt.Printf(" Columns: %d\n", len(table.Columns))
|
|
fmt.Printf(" Constraints: %d\n", len(table.Constraints))
|
|
fmt.Printf(" Indexes: %d\n", len(table.Indexes))
|
|
fmt.Printf(" Relationships: %d\n", len(table.Relationships))
|
|
|
|
// Display columns
|
|
for _, col := range table.Columns {
|
|
fmt.Printf(" - %s: %s", col.Name, col.Type)
|
|
if col.IsPrimaryKey {
|
|
fmt.Printf(" [PK]")
|
|
}
|
|
if col.NotNull {
|
|
fmt.Printf(" NOT NULL")
|
|
}
|
|
fmt.Println()
|
|
}
|
|
}
|
|
|
|
// Display view details
|
|
for _, view := range schema.Views {
|
|
fmt.Printf(" View: %s.%s\n", schema.Name, view.Name)
|
|
fmt.Printf(" Columns: %d\n", len(view.Columns))
|
|
fmt.Printf(" Definition: %s\n", view.Definition)
|
|
}
|
|
|
|
// Display sequence details
|
|
for _, seq := range schema.Sequences {
|
|
fmt.Printf(" Sequence: %s.%s\n", schema.Name, seq.Name)
|
|
fmt.Printf(" Start: %d, Increment: %d\n", seq.StartValue, seq.IncrementBy)
|
|
if seq.OwnedByTable != "" {
|
|
fmt.Printf(" Owned by: %s.%s\n", seq.OwnedByTable, seq.OwnedByColumn)
|
|
}
|
|
}
|
|
|
|
fmt.Println()
|
|
}
|
|
|
|
// Example: Read just the first schema
|
|
schema, err := reader.ReadSchema()
|
|
if err != nil {
|
|
log.Fatalf("Failed to read schema: %v", err)
|
|
}
|
|
fmt.Printf("First schema: %s\n", schema.Name)
|
|
|
|
// Example: Read just the first table
|
|
table, err := reader.ReadTable()
|
|
if err != nil {
|
|
log.Fatalf("Failed to read table: %v", err)
|
|
}
|
|
fmt.Printf("First table: %s.%s\n", table.Schema, table.Name)
|
|
}
|