#database-schema #postgresql #schema #sqlx #database

db-schema

一个简单的库,用于从数据库中检索模式信息

2 个版本

0.2.1 2023年4月2日
0.2.0 2023年4月2日

1268开发工具

每月下载量 25 次

MIT 许可证

22KB
369 行 代码

README

此包提供了一套函数,用于生成针对各种 PostgreSQL 模式对象的 SQL 语句,例如表、视图、物化视图、函数、触发器和索引。生成的 SQL 语句可用于模式反查、文档或迁移目的。

特性

该模块提供了一个 PgSchema 结构体,它接受一个命名空间(模式名称)作为输入,并公开了生成以下模式对象的 SQL 语句的方法

  • 枚举
  • 复合类型
  • 视图
  • 物化视图
  • 函数
  • 触发器
  • 索引

用法

  1. 使用所需的命名空间(模式名称)创建 PgSchema 的实例。

rust

use your_module_name::PgSchema;

let schema = PgSchema::new("your_schema_name");
  1. 使用可用的方法生成所需模式对象的 SQL 语句。

rust

// Get the SQL statements for all enums in the schema
let enums_sql = schema.enums();

// Get the SQL statements for all composite types in the schema
let types_sql = schema.types();

// Get the SQL statements for all tables in the schema
let tables_sql = schema.tables();

// Get the SQL statements for all views in the schema
let views_sql = schema.views();

// Get the SQL statements for all materialized views in the schema
let mviews_sql = schema.mviews();

// Get the SQL statements for all functions in the schema
let functions_sql = schema.functions();

// Get the SQL statements for all triggers in the schema
let triggers_sql = schema.triggers();

// Get the SQL statements for all indexes in the schema
let indexes_sql = schema.indexes();

您还可以使用 get_* 方法生成所需模式对象的 SQL 语句。这些方法接受一个 PgPool 实例作为输入,并返回一个 Result<Vec<String>, sqlx::Error>

示例

以下是一个示例,说明如何检索给定命名空间(模式名称)中所有模式对象的 SQL 语句

rust

use your_module_name::PgSchema;
use sqlx::PgPool;

async fn generate_sql_statements_for_schema(pool: &PgPool) -> Result<(), sqlx::Error> {
    let schema = PgSchema::new("your_schema_name");

    let enums = schema.get_enums(pool).await?;
    let types = schema.get_types(pool).await?;
    let tables = schema.get_tables(pool).await?;
    let views = schema.get_views(pool).await?;
    let mviews = schema.get_mviews(pool).await?;
    let functions = schema.get_functions(pool).await?;
    let triggers = schema.get_triggers(pool).await?;
    let indexes = schema.get_indexes(pool).await?;

    println!("Enums: {:?}", enums);
    println!("Types: {:?}", types);
    println!("Tables: {:?}", tables);
    println!("Views: {:?}", views);
    println!("Materialized Views: {:?}", mviews);
    println!("Functions: {:?}", functions);
    println!("Triggers: {:?}", triggers);
    println!("Indexes: {:?}", indexes);

    Ok(())
}

测试

代码还包括测试以验证 PgSchema 结构体的功能。要运行测试,请执行以下命令

sh

cargo nextest run

依赖关系

~0–16MB
~220K SLoC