Kyl*_*han 9 ruby-on-rails heroku database-migration
在将应用程序的数据库推送到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;"
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
PG :: InsufficientPrivilege:错误:必须是超级用户才能复制到文件或从文件复制提示:任何人都可以复制到stdout或从stdin复制.psql的\ copy命令也适用于任何人.:COPY countries FROM'/ app/db/migrate/Countries.txt'DELIMITER','CSV HEADER; 耙子流产了!发生错误,此以及所有后续迁移都已取消:
到目前为止,我已经尝试使用"\ copy"和"COPY FROM STDIN"作为一些旧问题,但不断出现语法错误.如果有人能指出我正确的方向,那将是伟大的.
编辑:以下是我引用的问题.一:
我试过这个:
execute "COPY countries FROM STDIN '#{Rails.root}/db/migrate/Countries.txt' DELIMITER ',' CSV HEADER;"
Run Code Online (Sandbox Code Playgroud)
还有这个:
execute "COPY countries FROM '#{Rails.root}/db/migrate/Countries.txt' STDIN DELIMITER ',' CSV HEADER;"
Run Code Online (Sandbox Code Playgroud)
二:
我试过这个:
execute \copy countries FROM STDIN '#{Rails.root}/db/migrate/Countries.txt' DELIMITER ',' CSV HEADER
Run Code Online (Sandbox Code Playgroud)
编辑二:
这是另一次尝试:
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;"
Run Code Online (Sandbox Code Playgroud)
我从这里得到的错误是:
PG :: SyntaxError:错误:"'/app/db/migrate/Countries.txt'或附近的语法错误"第1行:COPY国家/ app /db /migrate/Countries.txt'来自STDIN DE ... ^ :COPY countries'/app/db/migrate/Countries.txt'FROM STDIN DELIMITER','CSV HEADER; 耙子流产了!发生错误,此以及所有后续迁移都已取消:
PG :: SyntaxError:错误:语法错误在''/app/db/migrate/Countries.txt'或附近"第1行:COPY国家'/app/db/migrate/Countries.txt'FROM STDIN DE ...
编辑3:
我无法解决我遇到的问题,但找到了一个更简单的解决方案 - 创建一个本地转储并使用他们的导入工具将其上传到heroku.哪个可以在这里找到.
akh*_*med 14
意识到这个问题相当陈旧,我将为后代的利益提供另一个答案,因为它是第一个出现在Google上的查询.我发现一个简单的解决方案是:
(请注意,SUPERUSER是PostgreSQL标志,并不意味着您需要成为系统root用户).您需要psql在postgres用户下运行以下内容:
alter user <username> superuser
Run Code Online (Sandbox Code Playgroud)
如果你这样做,你将不再需要与之斗争\copy或STDIN进口.这是一种非常快速有效的捷径(尽管有点危险).
执行导入后,您可以通过执行以下操作来撤消超级用户权限:
alter user <username> nosuperuser
Run Code Online (Sandbox Code Playgroud)
此解决方案的灵感来自于这个答案.
通过stdin为我工作...(诚然,从命令行.内容的奇怪逃避是Windows-ish)
cat import.csv | psql -c "COPY cms.\"Contents\" FROM stdin DELIMITER ',' ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17823 次 |
| 最近记录: |