如何在heroku上执行.sql脚本?
Posted
技术标签:
【中文标题】如何在heroku上执行.sql脚本?【英文标题】:how to execute a .sql script on heroku? 【发布时间】:2013-02-20 15:42:54 【问题描述】:我有一个包含一堆插入命令的 .sql 文件,我想在 heroku 上的 postgres 数据库上执行这些命令。但我不知道该怎么做:-
如果我可以访问 postgres 控制台,我会输入以下内容:
psql -h localhost -d database -U username -f datafile.sql
但似乎 heroku 不支持此命令。我试过了
heroku pg:psql
但这不允许我输入文件。
还有其他选择吗?
【问题讨论】:
【参考方案1】:我将建议另一种方法,因为我已经从这个问题中受益,并且我正在寻找更好的选项来做到这一点(就速度而言)。
我将数据库种子设置为环境变量。使用Sequelize
将是这样的(下面的代码仅用于演示调节):
// Node.js app
if (process.env.RESTARTDB)
sequelize.sync( force: true ).then(() =>
// "init" is a raw SQL query
sequelize.query(init);
);
如果您不想每次查询 SQL
文件时都重新启动应用程序,则此方法不推荐,但它比使用 heroku pg:psql
快得多.
Here 你可以找到更多关于如何配置你的变量的信息。
【讨论】:
【参考方案2】:为什么不直接使用 psql?
如果您查看 heroku config
的输出,您将看到您的应用程序正在使用的数据库 URL(DATABASE_URL 键) - 如果您将其分解为正确的位以便与 psql
一起使用,所有将做个好人。
例如
DATABASE_URL: postgres://username:password@host:port/dbname
变成
psql -h host -p port -d dbname -U username -f datafile.sql
【讨论】:
我收到错误:FATAL: no pg_hba.conf entry for host ...
确保您使用 SSL 进行连接 - 可能需要在连接字符串上使用 &ssl=require
。
现在,psql postgres://username:password@host:port/dbname -f datafile.sql
就够了。【参考方案3】:
对于像为数据库播种这样的事情,我推荐 Richard Brown 的回答:使用 Rails 种子机制或类似 rake 任务的脚本可能会更好。
也就是说,能够对 sql(原始或文件)进行管道传输是一项有用的功能,尤其是对于诸如简单查找或例行查询之类的幂等事务。在这种情况下,您可以使用以下任何方式执行本地 sql:
$ cat file.sql | heroku pg:psql --app app_name
$ echo "select * from table;" | heroku pg:psql --app app_name
$ heroku pg:psql --app app_name < file.sql
【讨论】:
小提示,--app app_name
不是必需的。我从我的 heroku 应用程序所在的目录运行 heroku pg:psql
并检测到应用程序名称。除此之外,这很好用!
@levibostian 一个 git repo 可以连接到多个 Heroku 应用程序 thourgh
@leo 你可能是对的,也可能是错的,我不确定。我已经有好几年没用heroku了。我无法再帮助这个问题或我的评论。【参考方案4】:
我喜欢可测试和可重复的更新。当我需要更新数据库时,我会编写一个 rake 任务来执行更新;这样,您可以先针对测试运行它,以确保在生产中运行之前输出正确。
您没有提及这是初始数据库加载还是稍后运行,但将新数据加载到 Rails 数据库的惯例是创建一个 db:seed
rake 文件,您可以在您的 db:migrate
任务之后执行该文件完成了。
见:http://justinfrench.com/notebook/a-custom-rake-task-to-reset-and-seed-your-database 还有:http://railscasts.com/episodes/179-seed-data
【讨论】:
链接显示:您正在寻找的“用于重置和播种数据库的自定义 Rake 任务”已被删除 旧链接会发生这种情况。 Archive.org 救援:web.archive.org/web/20130312172900/http://justinfrench.com/…以上是关于如何在heroku上执行.sql脚本?的主要内容,如果未能解决你的问题,请参考以下文章