将应用程序数据库推送到Heroku之后,我在迁移应用程序数据库时遇到问题。触发错误的代码部分如下:

execute "COPY countries FROM '#{Rails.root}/db/migrate/Countries.txt' DELIMITER ',' CSV HEADER;"
execute "COPY regions FROM '#{Rails.root}/db/migrate/Regions.txt' DELIMITER ',' CSV HEADER;"
execute "COPY cities FROM '#{Rails.root}/db/migrate/Cities.txt' DELIMITER ',' CSV HEADER;"

这是我得到的错误:

PG::InsufficientPrivilege:错误:必须 super 用户才能复制文件或从文件复制
提示:任何人都可以复制到stdout或从stdin中复制。 psql的\copy命令也适用于任何人。
:从“/app/db/migrate/Countries.txt”DELIMITER“、CSV HEADER中复制国家/地区;
耙子流产了!
发生错误,此错误和所有以后的迁移被取消:

到目前为止,我已经尝试使用“\copy”和“COPY FROM STDIN”作为一些老问题提出的建议,但一直会出现语法错误。如果有人能指出我正确的方向,那就太好了。

编辑:这是我要引用的问题。 One:

我尝试了这个:
execute "COPY countries FROM STDIN '#{Rails.root}/db/migrate/Countries.txt' DELIMITER ',' CSV HEADER;"

和这个:
execute "COPY countries FROM '#{Rails.root}/db/migrate/Countries.txt' STDIN DELIMITER ',' CSV HEADER;"

Two:

我尝试了这个:
execute \copy countries FROM STDIN '#{Rails.root}/db/migrate/Countries.txt' DELIMITER ',' CSV HEADER

编辑两个:

这是另一种尝试:
execute "COPY countries '#{Rails.root}/db/migrate/Countries.txt' FROM STDIN DELIMITER ',' CSV HEADER;"
execute "COPY regions '#{Rails.root}/db/migrate/Regions.txt' FROM STDIN DELIMITER ',' CSV HEADER;"
execute "COPY cities '#{Rails.root}/db/migrate/Cities.txt' FROM STDIN DELIMITER ',' CSV HEADER;"

我从中得到的错误是:

PG::SyntaxError:错误:“'/app/db/migrate/Countries.txt'”或附近的语法错误
第1行:从STDIN DE ...复制国家/地区的“/app/db/migrate/Countries.txt”
^
:从STDIN DELIMITER中复制国家/地区的“/app/db/migrate/Countries.txt”、“CSV HEADER”;
耙子流产了!
发生错误,此错误和所有以后的迁移被取消:

PG::SyntaxError:错误:“'/app/db/migrate/Countries.txt'”或附近的语法错误
第1行:从STDIN DE ...复制国家/地区的“/app/db/migrate/Countries.txt”

编辑3:

我无法解决遇到的问题,但是找到了一个更简单的解决方案-创建本地转储,然后使用其导入工具将其上传到heroku。可以找到here

最佳答案

意识到这个问题已经很久了,我将为子孙后代的利益提供另一个答案,因为这是第一个出现在Google上的查询。我发现一个简单的解决方案是:

  • 授予用户SUPERUSER临时电源。

  • (请注意,SUPERUSER是PostgreSQL标志,并不意味着您需要成为系统根用户)。您需要在psql用户下的postgres中运行以下命令:
    alter user <username> superuser
    

    如果这样做,则不再需要与\copySTDIN导入进行斗争。这是一个非常快捷有效的快捷方式(尽管有点危险)。

    完成以下操作后,您可以撤消 super 用户特权:
    alter user <username> nosuperuser
    

    该解决方案的灵感来自this答案。

    关于ruby-on-rails - 部署到Heroku "ERROR: must be superuser to COPY to or from a file",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22446144/

    10-13 00:48