如何从批处理文件执行postgres的sql查询?

如何从批处理文件执行postgres的sql查询?,sql,postgresql,batch-file,command-prompt,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; 我能够连接到数据库,但是我得到了错误 “select”未被识别为内部或外部命令, 可操作的程序或批处理文件 有人面临过这样的问题吗 这是我正在尝试的查询之一,类似的东西在shell脚本中工作,如果有任何语法错误,请忽略查询中的语法错误

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

C:/pgsql/bin/psql -h %DB_HOST% -p 5432 -U %DB_USER% -d %DB_NAME% 
select * from test;
我能够连接到数据库,但是我得到了错误

“select”未被识别为内部或外部命令, 可操作的程序或批处理文件

有人面临过这样的问题吗

这是我正在尝试的查询之一,类似的东西在shell脚本中工作,如果有任何语法错误,请忽略查询中的语法错误

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

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

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

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

-file=文件名

使用文件名作为命令源,而不是以交互方式读取命令。处理完文件后,psql终止。这在许多方面相当于meta命令\i

如果文件名为-hyphen,则读取标准输入,直到出现EOF指示或\q meta命令。但是请注意,在这种情况下,Readline并没有像指定了-n一样使用

请参阅

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

,您可以通过管道将其传递到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] 如果使用sql传递文件,请使用-f或-file参数

当您要执行多个命令时,最好的方法是添加参数-f,然后只需键入文件路径,而不使用任何或“标记相对路径”,也可以:

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

它也适用于.NETCore。迁移后,我需要它将基本数据添加到我的数据库中。

如果您正在尝试shell脚本


psql postgresql://$username:$password@$host/$database如果在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"

在Shell脚本中,我使用@ketub,需要执行的herdoc查询中有批处理变量作为数据。我不太确定是否可以使用外部sql文件。@ketub:发布您想在问题中执行的查询示例。使用csv从“%filepath%/%csv_file%”复制testdata col1、col2、col3;这是我正在尝试的查询之一,类似的东西在shell脚本中工作,请忽略查询中的语法错误,如果存在下面提到的任何错误,请尝试在sql命令之前添加-c参数这是我正在尝试的当前查询,echo insert into testconfigtestid,scenarioid,testname值1,1,'asdf';|psql-h%DB_主机%-p5432-U%DB_用户%-d%DB_名称%,此时我得到的值是意外的。有什么建议吗?是的,请看我的第二个样本。每个右括号需要三个插入符号。。。名称1^^^^值值1^^^^如何在windows中将输出保存为csv文件??