Heroku上的PostgreSQL ETL过程

Dav*_*d S 3 python django pg-dump heroku postgresql-9.1

我被赋予了在Heroku上托管的PostgreSQL 9.1数据库(我们可以称之为Master)之间编写ETL(提取,转换,加载)进程的任务,以及另一个用于应用程序的数据副本. Heroku(Cedar Stack)托管了PostgreSQL数据库.我们的主要开发堆栈是Python 2.7.2,Django 1.3.3和PostgreSQL 9.1.正如你们许多人所知,Heroku中的文件系统在你能做的事情上是有限的,我不确定我是否完全理解Ephemeral Filesystem的规则.

所以,我想弄清楚我的选择是什么.显而易见的是,我可以编写一个Django管理命令,并有两个独立的数据库连接(以及一组目标和源模型),并通过这种方式抽取数据并在此过程中处理ETL.虽然有效,但我的初步测试表明这是一种非常缓慢的方法.显然,更快的方法是使用PostreSQL COPY功能.但是,通常如果我这样做,我将能够将其写入文件,然后使用psql将其拉入.任何人在Heroku上的两个专用PostgreSQL数据库之间做了这样的事情吗?任何建议或提示将不胜感激.

hgm*_*mnz 6

一种解决方案可能是在Postgres土地上进行整个ETL过程.也就是说,使用dblink扩展将数据从源数据库提取到目标数据库.这可能是也可能不够,但值得研究.

您可以在heroku dyno上自由使用文件系统,但我不认为这是一个防弹解决方案.它的工作方式是你可以很好地写入文件系统,但只要该进程退出,就会将数据放入其中.根本不保证该文件系统的大小,但它非常大,除非您需要数百GB的存储空间.

最后,你可以通过转换一些会话级postgres旋钮来加快一些过程.而不是在这里列出它们,只需阅读优秀的postgres文档.

编辑:我们现在支持Postgres FDW,这是dblink的更好替代方案:http://www.postgresql.org/docs/current/static/postgres-fdw.html