生成RDBMS的一致子集

rdbms-subsetter的Python项目详细描述


关系数据库管理系统子集图片::https://img.shields.io/pypi/v/rdbms subsetter.svg
:目标:https://pypi.python.org/pypi/rdbms subsetter
:alt:pypi status

……图片::https://circleci.com/gh/18f/rdbms-subsetter.svg?style=svg
:目标:https://circleci.com/gh/18f/rdbms subsetter
:alt:circleci status

…图片::https://api.codeculate.com/v1/badges/8fe62703d4999c07968c/可维护性
:目标:https://codeculate.com/github/18f/rdbms subsetter/可维护性
:alt:可维护性

。图片::https://api.codeculate.com/v1/badges/8fe62703d4999c07968c/test嫒coverage
:目标:https://codeculate.com/github/18f/rdbms subsetter/test嫒coverage
:alt:test coverage

。图片::https://gemnasium.com/badges/github.com/18f/rdbms subsetter.svg
:目标:https://gemnasium.com/github.com/18f/rdbms subsetter
:alt:gemnasium

定义后,所有父行
都将存在于子行中。

很适合从生产中创建测试/开发数据库。这很慢,
但是您需要多长时间生成一个测试/开发数据库?

用法:

rdbms subsetter<;source sqlalchemy connection string>;<;destination connection string>;<;要使用的行分数>;

示例::


子行将具有其外键所需的任何父行。它还将*尝试*包含属于每个父行的大多数子行(直到提供的`--children``参数,每个参数默认为3个),但它不能做出任何承诺。(要求所有子项会导致在
完全互连的数据库中无限传播,因为每个子记录都需要新的父记录,
需要新的子记录,需要新的父记录…
因此请谨慎地增加``--children`.)

表的变化很大(例如,数百到数十亿),
考虑使用`-l``标志,该标志通过对数公式设置行号目标

当设置`-l``时,如果``f``是指定的小数,
并且原始表有``n`行,
那么每个新表的行目标将是:

math.pow(10,math.log10(n)*f)


0.5的一小部分似乎会产生良好的结果,将10行转换为3行,
1000000到1000行,100000000到31622行是随机选择的,但是对于只有一个主键列的表,
可以使用
``force=<;tablename>;:<;primary key value>;``强制rdbms subsetter包含特定行(及其依赖项)。
这些行的子、孙等不受`--children``限制。

``rdbms subsetter``只执行插入;您的责任是首先设置目标数据库及其外键约束。最简单的方法是使用rdbms的dump实用程序。例如,对于postgresql,

::

dump--schema only-f schemadump.sql bigdb
createdb littledb
psql-f schemadump.sql littledb

默认情况下,行是从
数据库连接可见的架构中提取的。您还可以使用`--schema=<;name>;包含来自非默认模式
的行。``参数(可以多次使用)。
当前目标数据库必须在其自己的同名架构中包含相应的表(尚不支持在不同名称的架构之间移动)。

`--table`
(``-t``)和`--exclude table`(`-t```)参数(可以多次使用
)。这些参数采用通配符
(``*``)的表名或模式,并支持限定名(即``schema.table``)和简单的
名称。当同时给出`-t``和`-t``时,行为是只包括与至少一个`-t``开关匹配的表,而不包括`-t``开关。

对于具有复杂外键关系的复杂模式,子集提取可能会失败。要禁用写缓冲,将buffer参数设置为0::

rdbms subsetter postgresql://:@/bigdb postgresql://:@/littledb 0.05-b 0


例如,如果您使用mysql myisam
,并且无法定义约束,那么可以使用`--config``指定一个
配置文件。配置文件应该在json中指定约束
。例如,

{
"constraints":{
"(子表名)":[
{
"引用的架构":null,
"引用的表":"(父表名)",
"引用的列":["(父表中的约束列1)","(中的约束列2"父级)",],
"约束列":["(子级中的约束列1)","(子级中的约束列2)",],
}
],
},
"表":["schema1.table1","schema2.table2"],
"架构":["schema1","schema2"]

您可以限定"child-table-name",即
"schema-name.child-table-name"。还支持跨架构约束。

``rdbms subsetter``将这些约束视为实外键,并按上述方式获取父行和子行。

``tables``和``schemas``是可选的。

``tables``与传递的``--table``元素合并。在命令行上。

``schemas``与在命令行上传递的`--schema``元素合并。



并指定在调用类似于`--import=my.signals.signals_handlers``的脚本时模块
,那么当在db子设置过程中发送相应的信号时,您在模块中注册的任何信号处理程序都将被调用。

是否添加了"subsetter.signal\u row"`.

一个示例信号处理模块::


**kwargs):
print("添加的行用源db:{}调用,kwargs:{}"。format(源db,kwargs))

一个``subsetter.db``实例。

``kwargs``包含:

-``target-db```一个``subsetter.db``实例。

-``source-row```一个``sqlalchemy.engine.rowproxy``包含将插入行中的值。

-``target-table``一个``sqlalchemy.table`。


-``优先级排序的```:a``bool``表示是否应包括所有子行、孙子行等。

pip install psycopg2

*数据库。
(不是*源*数据库的大小!)

开发

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JavaFX TableView更新单元格,不更新对象值   在扫描器中使用分隔符的java   java OkHttp 4.9.2,连接无法重用,导致端口耗尽   eclipse中的c JNI:运行Java代码   java是否在出厂的所有硬件设备中都有/mnt/sdcard/Android/data文件夹(或等效文件夹)?   Java,在eclipse中访问资源文件夹中的图像   java为什么Bluemix dashDB操作抛出SqlSyntaxErrorException,SQLCODE=1667?   JavaHtmlUnitWebClient。getPage不处理javascript   Google API认证的java问题   java如何将JSON数组反序列化为Apache beam PCollection<javaObject>   ServerSocket停止接收命令,java/安卓   来自Java类的安卓 Toast消息   java如何自动重新加载应用程序引擎开发服务器?   java是否可以尝试/捕获一些东西来检查是否抛出了异常?   java如何做到这一点当我按下load game时,它不仅会加载信息,还会将您带到游戏中?   Java选项Xmx代表什么?   Java映射,它在插入时打印值   设置“ulimit c unlimited”后,java无法生成系统核心转储