如何在Heroku psql CLI中执行\pset元命令后再运行查询?
解决Heroku CLI psql无法使用\pset tuples_only或-t参数的问题
以下几种方法可以绕过Heroku CLI的限制,直接获取原生psql的输出格式:
方法1:直接用本地psql连接Heroku数据库(推荐)
Heroku会提供数据库的连接URL,你可以直接用本地安装的psql客户端连接,这样就能使用所有原生psql的参数:
- 获取数据库连接URL:
heroku config:get DATABASE_URL
- 直接带参数执行查询:
psql $(heroku config:get DATABASE_URL) -t -c 'select 1'
或者将URL存入变量避免重复获取:
DB_URL=$(heroku config:get DATABASE_URL) psql "$DB_URL" -t -c 'select 1'
这种方法完全绕过Heroku CLI的psql封装,所有原生psql的选项(包括\pset tuples_only、-t等)都能正常使用,适合频繁执行查询的场景。
方法2:通过heroku run在dyno上执行原生psql
利用heroku run在应用的dyno中直接调用psql命令,这样可以使用原生参数:
heroku run "psql $DATABASE_URL -t -c 'select 1'"
如果需要执行多行命令(比如先设置tuples_only再查询),可以用here-doc:
heroku run bash <<EOF psql \$DATABASE_URL <<SQL \pset tuples_only select 1; SQL EOF
注意:这种方法会启动一个临时dyno,若超出免费额度可能产生少量费用,适合偶尔执行的场景。
方法3:使用heroku psql的-f选项读取标准输入
之前的管道输入失败是因为没有指定-f -(表示从标准输入读取命令脚本),加上该选项即可:
printf '\pset tuples_only\nselect 1;\n' | heroku psql -f -
或者用echo:
echo -e '\pset tuples_only\nselect 1;' | heroku psql -f -
这样Heroku CLI会将标准输入的内容作为psql命令脚本执行,而不是当成数据库名。
内容的提问来源于stack exchange,提问作者Ciro Santilli OurBigBook.com
相关产品推荐
相关产品推荐

