用于将PostgreSQL表(和任何相关数据)分解为单独模式的实用工具。

pgexplode的Python项目详细描述


PG爆炸

一个实用程序,用于将PostgreSQL表(和任何相关数据)分解为单独的模式。在

示例

想象一下在一个名为exploder_test的数据库中有以下表结构和数据:

CREATETABLEtenant(idserialPRIMARYKEY,slugvarchar);CREATETABLErelated(idserialPRIMARYKEY,tenant_idintegerNOTNULLREFERENCEStenant(id),valuevarchar);INSERTINTOtenant(id,slug)VALUES(1,'alpha'),(2,'beta');INSERTINTOrelated(tenant_id,value)VALUES(1,'alpha-value-1'),(1,'alpha-value-2'),(1,'alpha-value-3'),(2,'beta-value-1'),(2,'beta-value-2'),(2,'beta-value-3'),(2,'beta-value-4'),(2,'beta-value-5');

运行以下命令:

^{pr2}$

将创建两个架构alphabeta,并复制表数据,如下所示:

+ alpha
  ~ tenant: 1
  ~ related: 3
+ beta
  ~ tenant: 1
  ~ related: 5

输出/调试SQL

向上面的命令添加一个--sql标志将输出正在运行的SQL,这在调整或时非常有用 调试:

-- alphaDROPSCHEMAIFEXISTS"alpha"CASCADE;CREATESCHEMA"alpha";CREATETABLE"alpha".tenant(LIKEpublic.tenantINCLUDINGALL);INSERTINTO"alpha".tenant(SELECT*FROMtenantWHEREid=1);CREATETABLE"alpha".related(LIKEpublic.relatedINCLUDINGALL);INSERTINTO"alpha".related(SELECTrelated.*FROMrelatedJOINtenantONrelated.tenant_id=tenant.idWHEREtenant.id=1);CREATESEQUENCE"alpha".related_id_seq;ALTERSEQUENCE"alpha".related_id_seqOWNEDBY"alpha".related.id;ALTERTABLE"alpha".relatedALTERidSETDEFAULTnextval('alpha.related_id_seq'::regclass);CREATESEQUENCE"alpha".tenant_id_seq;ALTERSEQUENCE"alpha".tenant_id_seqOWNEDBY"alpha".tenant.id;ALTERTABLE"alpha".tenantALTERidSETDEFAULTnextval('alpha.tenant_id_seq'::regclass);ALTERTABLE"alpha".relatedADDCONSTRAINTrelated_tenant_id_fkeyFOREIGNKEY(tenant_id)REFERENCES"alpha".tenant(id);-- betaDROPSCHEMAIFEXISTS"beta"CASCADE;CREATESCHEMA"beta";CREATETABLE"beta".tenant(LIKEpublic.tenantINCLUDINGALL);INSERTINTO"beta".tenant(SELECT*FROMtenantWHEREid=2);CREATETABLE"beta".related(LIKEpublic.relatedINCLUDINGALL);INSERTINTO"beta".related(SELECTrelated.*FROMrelatedJOINtenantONrelated.tenant_id=tenant.idWHEREtenant.id=2);CREATESEQUENCE"beta".related_id_seq;ALTERSEQUENCE"beta".related_id_seqOWNEDBY"beta".related.id;ALTERTABLE"beta".relatedALTERidSETDEFAULTnextval('beta.related_id_seq'::regclass);CREATESEQUENCE"beta".tenant_id_seq;ALTERSEQUENCE"beta".tenant_id_seqOWNEDBY"beta".tenant.id;ALTERTABLE"beta".tenantALTERidSETDEFAULTnextval('beta.tenant_id_seq'::regclass);ALTERTABLE"beta".relatedADDCONSTRAINTrelated_tenant_id_fkeyFOREIGNKEY(tenant_id)REFERENCES"beta".tenant(id);

您可以看到除了简单地创建每个表的副本之外,pgexplode还确保新表具有 序列表和它们自己的列被正确地键控。在

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

推荐PyPI第三方库


热门话题
java中atg十进制到双格式   音频如何使用Java播放默认Windows操作系统(不仅仅是“完成/完成”的声音?   java为什么Eclipse内存分析器不显示InetSocketAddress字符串值?   Java100线程对tomcat中等待的线程进行了计时,导致它在线程总数超过200个时暂停   如何在Java中转义POSIX扩展格式的正则表达式文本   java限制Vaadin中的窗口拖动运动   Java8模块与OSGi有何不同?   java在小程序中看不到GUI组件?   java排序映射不允许删除   java试图使用HibernateTransactionManager,但事务服务抛出HibernateException   java无法使用reflect包将变量传递给私有方法   在Java8上,从给定键列表的映射中提取值列表   java JavaFX表格菜单按钮列表显示文本,但不显示图形   java扫描仪nextInt()和hasNextInt()问题   java哈希映射还是哈希表?   JavaTomcat6.0。配置HTTP   如何使用Java对HTTP请求体进行流式处理