如何执行postgres'批处理文件的SQL查询?

时间:2016-01-19 15:18:02

标签: sql postgresql batch-file command-prompt

我需要从批处理文件中执行SQL。 我正在执行以下连接到Postgres并从表中选择数据

C:/pgsql/bin/psql -h %DB_HOST% -p 5432 -U %DB_USER% -d %DB_NAME% 
select * from test;

我可以连接到数据库,但是我收到了错误

  

'选择'不被视为内部或外部命令,   可操作程序或批处理文件。

有没有人遇到过这样的问题?

这是我正在尝试的查询之一,在shell脚本中有类似的功能,(如果有的话,请忽略查询中的语法错误)

copy testdata (col1,col2,col3) from '%filepath%/%csv_file%' with csv;

7 个答案:

答案 0 :(得分:5)

您可以将其传输到psql

(
echo select * from test;
) | C:/pgsql/bin/psql -h %DB_HOST% -p 5432 -U %DB_USER% -d %DB_NAME% 

当右括号是SQL查询的一部分时,必须使用三个插入符对它们进行转义。

( 
echo insert into testconfig(testid,scenarioid,testname ^^^) values( 1,1,'asdf'^^^);
) | psql -h %DB_HOST% -p 5432 -U %DB_USER% -d %DB_NAME%

答案 1 :(得分:1)

我同意Spidey:

  

1]如果使用sql传递文件,请使用-f或--file参数

当您要执行几个命令时,执行此操作的最佳方法是添加参数-f,然后在文件中键入没有任何“或”标记的路径(相对路径也适用):

psql -h %host% -p 5432 -U %user% -d %dbname% -f ..\..\folder\Data.txt

它也可以在.NET Core中使用。迁移后,我需要它来向数据库中添加基本数据。

答案 2 :(得分:0)

你不能把查询放在单独的行上,批处理解释器会假设它是另一个命令而不是psql的查询。我相信你也需要引用它。

答案 3 :(得分:0)

使用-f参数传递批处理文件名

C:/pgsql/bin/psql -h %DB_HOST% -p 5432 -U %DB_USER% -d %DB_NAME% -f 'sql_batch_file.sql'

http://www.postgresql.org/docs/current/static/app-psql.html

  

-f filename

     

- 文件名=

     

使用文件filename作为命令源,而不是以交互方式读取命令。处理完文件后,psql终止。这在很多方面等同于元命令\ i。

     

如果filename是 - (连字符),则读取标准输入直到EOF指示或\ q元命令。但请注意,在这种情况下不使用Readline(就像指定了-n一样)。

答案 4 :(得分:0)

请参阅documentation

1]如果您使用sql传递文件,请使用-f--file参数
2]如果您要传递单个命令,请使用-c--command参数

答案 5 :(得分:0)

如果您尝试使用shell脚本

psql postgresql://$username:$password@$host/$database < /app/sql_script/script.sql

答案 6 :(得分:0)

如果在Linux上运行,这对我有用(需要使用您的用户,数据库名称等更新下面的值)

psql "host=YOUR_HOST port=YOUR_PORT dbname=YOUR_DB_NAME user=YOUR_USER_NAME password=YOUR_PASSWORD" -f "fully_qualified_path_to_your_script.sql"