Heroku pg:pull 未能填充架构 [英] Heroku pg:pull failing to populate schema

查看:19
本文介绍了Heroku pg:pull 未能填充架构的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我已经阅读了关于 文档pg:pull,但似乎无法让它工作.当我使用正确的参数运行命令时,我的 Heroku DB 被获取并创建了一个本地数据库,但架构没有在本地填充;例如,没有创建表,没有设置触发器,没有约束,没有数据等.

So I've read the documentation on pg:pull, but can't seem to get it to work. When I run the command with the correct parameters, my Heroku DB is fetched and a local database is created, but the schema is not filled in locally; e.g., no tables are created, no triggers are set up, no constraints, no data, etc.

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

Here's the heroku pg:info log for my database:

=== 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

这是我正在使用的命令:

Here is the command that I'm using:

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

我不知道如何为 PGUSERPGPASSWORD 设置环境变量(如果有人能指出我正确的方向,你会得到一个+1. 我阅读了这个问题并回答无济于事).

I couldn't figure out how to set the environment variables for PGUSER and PGPASSWORD (if anyone can point me in the right direction there, you'll get a +1. I read this question and answer to no avail).

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

mylocaldb is created, but the schema is not filled in.

这是运行命令后的 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 使用自定义停用词词典,该词典尚未在本机本地(尚未)设置...我怀疑这会是 中的问题pg_dump 不过……非常感谢您的帮助!

Is there some kind of further configuration that I need to do locally for this to work? If it matters, I am using a custom stop-word dictionary for tsquery which isn't set up locally (yet) on this machine... I doubt that would be a problem in the pg_dump though... Any help is much appreciated!

编辑:我只是尝试在我的桌面上运行这个命令,另一个本地站已经配置了一切.没有骨头.我得到了完全相同的结果.以下是上述本地机器上 which psql 的输出,以防万一:

Edit: I just tried running this command on my desktop, the other local station that has everything configured. No bones. I'm getting the exact same results. Below is the output of which psql on said local machine, just in case:

$ which psql
/c/Program Files/PostgreSQL/9.3/bin/psql

推荐答案

我编写了 pg:pullpg:push 命令.

I wrote the pg:pull and pg:push commands.

pg:pullpg:push 都使用 pg_dump 命令和管道直接到 pg_restore (源代码).不幸的是,截至 2014 年 9 月本回答发布时,Windows 上的 pg:push,pull 存在问题.这些问题并非不可克服,因此如果您稍后再访问此答案,请检查看看它是否可能已修复.

pg:pull and pg:push both use the pg_dump command and pipe that directly to pg_restore (source code). Unfortunately, there are problems with pg:push,pull on windows as of the time of this answer, September 2014. These problems are not insurmountable, so if you are coming to this answer sometime later, please check to see if it might have been fixed.

env 命令使用这里这里我不t 认为是在 windows 上,这就是为什么你必须做 PGUSER 和 PGPASSWORD 的东西.然而,env 的原因是 pg_dump 需要与 pg_restore 不同的环境变量.

The env command used here and here I don't think is on windows, which is why you're having to do the PGUSER and PGPASSWORD stuff. However the reason for the env is that pg_dump needs different environment variables than pg_restore.

我曾经尝试修复该问题,使用 popen 进行设置命令独立,然后将它们连接在一起而不是使用管道.但是,我无法让它正常工作,不得不停下来.

I took a stab at fixing that once, by using popen to set up the commands independently, then wire them together instead of using a pipe. However, I couldn't quite get it working, and had to stop.

我很乐意查看所有补丁并解决此问题,只需在对 heroku/heroku 项目的拉取请求中@提及我即可.

I'd be very happy to review any patches that go all the way and fix this issue, just @ mention me on a pull request to the heroku/heroku project.

抱歉我没能解决这个问题:(

Sorry for my failing to fix this issue :(

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

Instead, and until this is fixed, you can use the pg_dump and pg_restore commands separately, directly. It's more cumbersome as a 2 step process, and having to look up the remote credentials, but it would get the job done. The linked source in the gen_pg_*_command methods show how to use pg_dump and pg_restore.

这篇关于Heroku pg:pull 未能填充架构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆