我使用Ruby生成一堆SQL命令,并将其存储到文件中。
然后我登录到我的PostgreSQL数据库。然后我做了类似的事情:
\i /tmp/bla.sql
这会填充我的数据库。
这一切都很好,这里没问题。
我不喜欢我必须使用 \ i 的手动部分(因为我最终需要这个才能在cron作业中工作,我认为像 \ i 仅在您直接进入交互式psql提示时才可用。)
所以现在我的问题是:
是否可以从命令行使用直接开始读取外部文件的psql命令?
答案 0 :(得分:3)
您可以直接使用psql命令,如下所示。 适用于Ubuntu和Mint。在Windows上它应该是完全相同的......
psql -U user -d database -f filepath
示例:
psql -U postgres -d testdb -f /home/you/file.sql
有关详情,请查看官方文档:http://www.postgresql.org/docs/current/static/app-psql.html
答案 1 :(得分:0)
当您尝试使用cron执行sql文件时,您还需要设置环境 - 数据库名称,密码等。这是一个简单的shell脚本代码段,可以完成所有操作
source /var/lib/pgsql/scripts/.pgenv
echo $PATH
psql << AAA
select current_date;
select sp_pg_myprocedure(current_date);
AAA
在.pgenv中,您可以设置诸如
之类的值export PGPORT=<yourport>
export PGHOST=<yourhost>
export PGDATA=<yourdatadir>
还有一个.pgpass文件,以便提供密码。 http://www.postgresql.org/docs/current/static/libpq-pgpass.html 用你想做的任何东西替换完成SELECT的部分,或者像@Kuchi所示那样做。