#mysql #postgresql #golang #language #management #shared

libruster

Ruster是一个使用ffi进行数据库管理的库,支持psql/pg_dump + mysql/mysqldump,可用于其他语言(如Golang)。

12个稳定版本

1.3.1 2021年11月26日
1.2.10 2021年11月24日
1.1.1 2021年11月24日
1.0.0 2021年11月24日

#1148数据库接口

每月 34 次下载

MIT 协议

2.5MB
551

包含 (ELF可执行文件/库, 1.5MB) main_shared, (WOFF字体, 290KB) doc/noto-sans-kr-v13-korean-regular.woff, (WOFF字体, 190KB) doc/FiraSans-Medium.woff, (WOFF字体, 135KB) doc/FiraSans-Medium.woff2, (WOFF字体, 185KB) doc/FiraSans-Regular.woff, (WOFF字体, 130KB) doc/FiraSans-Regular.woff2 等等12个

ruster

docs Rust Reference Coverage Status crates.io MIT licensed Continuous integration

Ruster是一个使用ffi进行数据库管理的库,支持psql/pg_dump + mysql/mysqldump,由Rust编写。

生成的C静态库和共享库可以在其他语言中重用(例如Golang)。

构建ruster

项目的构建产生2个go可执行文件,1个静态库(libruster.a)和1个共享库(libruster.so)。

C函数的头文件在lib/ruster.h中,必须在代码生成之前存在。

make build-shared
make build-static

使用ruster

PostgreSQL

/*
#cgo LDFLAGS: -L./lib -lruster
#include "./lib/ruster.h"
*/
import "C"

import (
     "os"
)

func main() {
  os.Getenv("PGPASSWORD")
  err := func() error {
    C.pg_dump_database(
    C.CString("localhost"),
    C.CString("5432"),
    C.CString("postgres"),
    C.CString("postgres"),
    C.CString("pg_dump.sql"),
    C.CString("true"),
    );
     return nil
   }
   if err() == nil {
    func() {
      C.psql_restore_database(
      C.CString("localhost"),
      C.CString("5432"),
      C.CString("postgres"),
      C.CString("postgres"),
      C.CString("pg_dump.sql"),
      C.CString("true"),
      );
    }()
  }
}

MySQL - Mariadb

/*
#cgo LDFLAGS: -L./lib -lruster
#include "./lib/ruster.h"
*/
import "C"

import (
     "os"
)

func main() {
  os.Getenv("MYSQL_PWD")
  err := func() error {
    C.mysqldump_database(
      C.CString("localhost"),
      C.CString("3306"),
      C.CString("root"),
      C.CString("mysql"),
      C.CString("dump.sql"),
      C.CString("true"),
    );
      return nil
  }
  time.Sleep(time.Duration(250)*time.Millisecond)
  if err() == nil {
    func() {
      C.mysql_restore_database(
        C.CString("localhost"),
        C.CString("3306"),
        C.CString("root"),
        C.CString("mysql"),
        C.CString("dump.sql"),
        C.CString("true"),
      );
    }()
  }
}

运行ruster示例

make run-shared
make run-static

基准测试

./time main_shared
./time main_static

测试

./time test-rust-lib

依赖项

~3–12MB
~114K SLoC