Heroku pg:拉不能填充架构

时间:2014-09-16 13:40:54

标签: windows postgresql heroku heroku-toolbelt

所以我已经阅读了pg:pull上的documentation,但似乎无法让它发挥作用。当我使用正确的参数运行命令时,将获取我的Heroku数据库并创建本地数据库,但架构未在本地填充;例如,没有创建表,没有设置触发器,没有约束,没有数据等等。

这是我的数据库的heroku pg:info日志:

=== HEROKU_POSTGRESQL_ORANGE_URL (DATABASE_URL)
Plan:        Hobby-dev
Status:      Available
Connections: 1
PG Version:  9.3.3
Created:     2014-04-02 19:24 UTC
Data Size:   7.4 MB
Tables:      6
Rows:        1376/10000 (In compliance)
Fork/Follow: Unsupported
Rollback:    Unsupported

以下是我使用的命令:

PGUSER=postgres PGPASSWORD=password heroku pg:pull HEROKU_POSTGRESQL_ORANGE mylocaldb --app myappname

我无法弄清楚如何设置PGUSERPGPASSWORD的环境变量(如果有人能指出我正确的方向,那么你将获得+1我读了this question并回答无效。

mylocaldb已创建,但架构未填写。

命令运行后,这是pg_dump

pg_dump: reading schemas
pg_dump: reading user-defined tables
pg_dump: reading extensions
pg_dump: reading user-defined functions
pg_dump: reading user-defined types
pg_dump: reading procedural languages
pg_dump: reading user-defined aggregate functions
pg_dump: reading user-defined operators
pg_dump: reading user-defined operator classes
pg_dump: reading user-defined operator families
pg_dump: reading user-defined text search parsers
pg_dump: reading user-defined text search templates
pg_dump: reading user-defined text search dictionaries
pg_dump: reading user-defined text search configurations
pg_dump: reading user-defined foreign-data wrappers
pg_dump: reading user-defined foreign servers
pg_dump: reading default privileges
pg_dump: reading user-defined collations
pg_dump: reading user-defined conversions
pg_dump: reading type casts
pg_dump: reading table inheritance information
pg_dump: reading event triggers
pg_dump: finding extension members
pg_dump: finding inheritance relationships
pg_dump: reading column info for interesting tables
pg_dump: finding the columns and types of table "phrases"
pg_dump: finding default expressions of table "phrases"
pg_dump: finding the columns and types of table "users"
pg_dump: finding default expressions of table "users"
pg_dump: finding the columns and types of table "favorite_phrases"
pg_dump: finding the columns and types of table "favorite_users"
pg_dump: finding the columns and types of table "phrasebooks"
pg_dump: finding default expressions of table "phrasebooks"
pg_dump: finding the columns and types of table "phrasebooks_phrases"
pg_dump: flagging inherited columns in subtables
pg_dump: reading indexes
pg_dump: reading indexes for table "phrases"
pg_dump: reading indexes for table "users"
pg_dump: reading indexes for table "favorite_phrases"
pg_dump: reading indexes for table "favorite_users"
pg_dump: reading indexes for table "phrasebooks"
pg_dump: reading indexes for table "phrasebooks_phrases"
pg_dump: reading constraints
pg_dump: reading foreign key constraints for table "phrases"
pg_dump: reading foreign key constraints for table "users"
pg_dump: reading foreign key constraints for table "favorite_phrases"
pg_dump: reading foreign key constraints for table "favorite_users"
pg_dump: reading foreign key constraints for table "phrasebooks"
pg_dump: reading triggers
pg_dump: reading triggers for table "phrases"
pg_dump: reading triggers for table "users"
pg_dump: reading triggers for table "favorite_phrases"
pg_dump: reading triggers for table "favorite_users"
pg_dump: reading triggers for table "phrasebooks"
pg_dump: reading rewrite rules
pg_dump: reading large objects
pg_dump: reading dependency data
pg_dump: saving encoding = UTF8
pg_dump: saving standard_conforming_strings = on
pg_dump: saving database definition
pg_restore: [archiver] did not find magic string in file header
pg_dump: [custom archiver] WARNING: ftell mismatch with expected position -- fte
ll used
pg_dump: [custom archiver] WARNING: ftell mismatch with expected position -- fte
ll used
pg_dump: dumping contents of table favorite_phrases
pg_dump: [custom archiver] WARNING: ftell mismatch with expected position -- fte
ll used
pg_dump: dumping contents of table favorite_users
pg_dump: [custom archiver] WARNING: ftell mismatch with expected position -- fte
ll used
pg_dump: dumping contents of table phrasebooks
pg_dump: [custom archiver] WARNING: ftell mismatch with expected position -- fte
ll used
pg_dump: dumping contents of table phrasebooks_phrases
pg_dump: [custom archiver] WARNING: ftell mismatch with expected position -- fte
ll used
pg_dump: dumping contents of table phrases
pg_dump: [custom archiver] could not write to output file: Invalid argument

我需要在本地进行某种进一步的配置吗?如果重要的话,我正在使用tsquery的自定义停用词词典,而不是在本机上本地设置...我怀疑这会是{{1}中的问题虽然......非常感谢任何帮助!

编辑:我刚尝试在桌面上运行此命令,其他本地站点已配置完所有内容。没有骨头。我得到了完全相同的结果。以下是所述本地计算机上pg_dump的输出,以防万一:

which psql

2 个答案:

答案 0 :(得分:9)

我写了pg:pullpg:push命令。

pg:pullpg:push都使用pg_dump命令直接管道pg_restoresource code)。不幸的是,截至2014年9月,这个问题的窗口pg:push,pull存在问题。这些问题并非不可克服,所以如果你以后再来这个问题,请检查一下是否有问题。固定的。

env命令used herehere我不认为是在Windows上,这就是为什么你不得不做PGUSER和PGPASSWORD的原因。但env的原因是pg_dump需要的环境变量与pg_restore不同。

我用a stab at fixing that一次,使用popen独立设置命令,然后将它们连接在一起而不是使用管道。但是,我无法让它工作,不得不停下来。

我很乐意审核任何可以解决这个问题的修补程序,只需在提及heroku / heroku项目的拉取请求时提及我。

很抱歉我未能解决此问题:(

相反,在修复此问题之前,您可以直接单独使用pg_dumppg_restore命令。它作为一个两步过程更加繁琐,并且必须查找远程凭据,但它可以完成工作。 gen_pg_*_command方法中的关联来源显示了如何使用pg_dumppg_restore

答案 1 :(得分:0)

@will的答案在常规Heroku开发的情况下是完美的,但在私有空间的情况下失败。正如Heroku Postgres and Heroku Private Spaces :: External connections所述:

  

与我们的业余爱好,标准版和高级版的Heroku Postgres数据库不同,私人数据库无法通过本地计算机访问

作为一种变通方法,您可以将数据库复制到非私有数据库,然后您可以将数据库转储为本地补偿。