Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在heroku上执行.sql脚本?_Sql_Postgresql_Heroku - Fatal编程技术网

如何在heroku上执行.sql脚本?

如何在heroku上执行.sql脚本?,sql,postgresql,heroku,Sql,Postgresql,Heroku,我有一个.sql文件,其中包含一系列插入命令,我想在heroku上的postgres数据库上执行这些命令。但我不知道怎么做:- 如果我可以访问postgres控制台,我会键入以下内容: psql -h localhost -d database -U username -f datafile.sql $ cat file.sql | heroku pg:psql --app app_name $ echo "select * from table;" | heroku pg:psql --ap

我有一个.sql文件,其中包含一系列插入命令,我想在heroku上的postgres数据库上执行这些命令。但我不知道怎么做:-

如果我可以访问postgres控制台,我会键入以下内容:

psql -h localhost -d database -U username -f datafile.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
但heroku似乎不支持这个命令。我试过了

heroku pg:psql
但这不允许我输入文件


还有其他选择吗?

我喜欢可测试和可重复的更新。当我需要更新数据库时,我编写一个rake任务来执行更新;通过这种方式,您可以首先对测试运行它,以确保在投入生产运行之前输出是正确的

您没有提到这是初始数据库加载还是稍后运行,但将新数据加载到Rails数据库的惯例是创建一个
db:seed
rake文件,您可以在
db:migrate
任务完成后执行该文件

见:
而且:

对于像创建数据库这样的事情,我推荐Richard Brown的答案:可以说,使用Rails种子机制或者像rake任务这样的脚本更好

这就是说,能够管道化sql(原始或文件)是一个有用的特性,特别是对于简单查找或例行查询之类的幂等项。在这种情况下,您可以使用以下任一选项执行本地sql:

psql -h localhost -d database -U username -f datafile.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
$cat file.sql | heroku pg:psql--应用程序名称
$echo“从表中选择*”| heroku pg:psql--应用程序名称
$heroku pg:psql——应用程序名称
为什么不直接使用psql

如果您查看
heroku config
的输出,您将看到应用程序正在使用的数据库URL(数据库URL键)-如果您将其拆分为正确的位,以便与
psql
一起使用,那么一切都会很好

乙二醇

变成

psql -h host -p port -d dbname -U username -f datafile.sql

我将建议另一种方法,因为我已经从这个问题中受益,我寻找了更好的选择(就速度而言)

我将数据库种子设定为环境变量。使用
Sequelize
时,会出现如下情况(下面的代码仅用于演示条件):

//Node.js应用程序
if(process.env.RESTARTDB){
sync({force:true})。然后(()=>{
//“init”是一个原始SQL查询
sequelize.query(init);
});
}
如果您不想每次查询
SQL
文件时都重新启动应用程序,则不建议使用此方法,但它比使用
heroku pg:psql
要快得多


您可以找到有关如何配置VAR的更多信息。请注意,
--app app_name
不是必需的。我从我的heroku应用程序所在的目录运行heroku pg:psql
,它检测应用程序名。除此之外,这工作的伟大@levibostian git repo可以连接到多个Heroku应用程序thourgh@leo你可能是对的,也可能是错的,我不确定。我已经好几年没有用过heroku了。我再也帮不上这个问题或我的评论了。我得到了一个错误:
致命:主机没有pg_hba.conf条目…
请确保您正在使用SSL进行连接-可能需要连接字符串上的
&SSL=require
。该链接显示:“一个自定义Rake任务,用于重置和种子设置数据库”您正在寻找的已被删除的旧链接。Archive.org来拯救: