将应用程序数据库推送到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是PostgreSQL标志,并不意味着您需要成为系统根用户)。您需要在
psql
用户下的postgres
中运行以下命令:alter user <username> superuser
如果这样做,则不再需要与
\copy
或STDIN
导入进行斗争。这是一个非常快捷有效的快捷方式(尽管有点危险)。完成以下操作后,您可以撤消 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/