我需要从批处理文件中执行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;
答案 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)
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"