如何在批处理文件中通过 URI 连接到数据库后在 psql 中使用 \copy?
How to use \copy in psql after connecting to a database via URI in a batch file?
我想制作一个 .bat 文件,它将转到一个目录,更改代码页(因为我的文件夹包含来自我母语的字符)然后在 psql 中打开数据库,然后使用 \copy 将一些表从数据库导出到我电脑上的文件夹,然后退出数据库并关闭命令。如果我手动执行它,它就像一个魅力,但 .bat 文件在进入数据库后停止。
cd C:\Program Files\PostgreSQL.6\bin
chcp 1250
psql "postgres://<heres_my_URI>"
\copy <table_name> to 'G:\<path>\name.csv' with
DELIMITER ',' header csv;
\copy <table_name> to 'G:\<path>\name.csv' with
DELIMITER ',' header csv;
\q
exit
我希望 .bat 文件将 csv 下载到路径并在之后自行关闭。
但是 .bat 在进入数据库之前一切正常,然后它只显示:
<mydatabase_name> =>
直到我按下 \q
或
\copy <table_name> to 'G:\<path>\name.csv' with
DELIMITER ',' header csv;
手动操作,不会发生任何事情。在我退出 DB 后,它向我显示了所有关于 \copy 无法识别的错误。我如何让它发挥作用?感谢您的帮助:)
您可以使用命令参数传递 sql:
psql "postgres://" -c "copy to 'G:\name.csv' with DELIMITER ',' header csv; copy to 'G:\name.csv' with
分隔符 ',' header csv;"
你需要将所有要由psql执行的语句放在一个单独的文件中,而不是在
主 .bat
文件:
.bat
文件:
chcp 1250
psql "postgres://<heres_my_URI>" -f script.sql
exit
script.sql
:
\copy <table_name> to 'G:\<path>\name.csv' with DELIMITER ',' header csv
\copy <table_name> to 'G:\<path>\name.csv' with DELIMITER ',' header csv
确保每个 \copy
命令都在一行中,因为它必须如此。不过,它不必以分号结尾。
我想制作一个 .bat 文件,它将转到一个目录,更改代码页(因为我的文件夹包含来自我母语的字符)然后在 psql 中打开数据库,然后使用 \copy 将一些表从数据库导出到我电脑上的文件夹,然后退出数据库并关闭命令。如果我手动执行它,它就像一个魅力,但 .bat 文件在进入数据库后停止。
cd C:\Program Files\PostgreSQL.6\bin
chcp 1250
psql "postgres://<heres_my_URI>"
\copy <table_name> to 'G:\<path>\name.csv' with
DELIMITER ',' header csv;
\copy <table_name> to 'G:\<path>\name.csv' with
DELIMITER ',' header csv;
\q
exit
我希望 .bat 文件将 csv 下载到路径并在之后自行关闭。
但是 .bat 在进入数据库之前一切正常,然后它只显示:
<mydatabase_name> =>
直到我按下 \q
或
\copy <table_name> to 'G:\<path>\name.csv' with
DELIMITER ',' header csv;
手动操作,不会发生任何事情。在我退出 DB 后,它向我显示了所有关于 \copy 无法识别的错误。我如何让它发挥作用?感谢您的帮助:)
您可以使用命令参数传递 sql: psql "postgres://" -c "copy to 'G:\name.csv' with DELIMITER ',' header csv; copy to 'G:\name.csv' with 分隔符 ',' header csv;"
你需要将所有要由psql执行的语句放在一个单独的文件中,而不是在
主 .bat
文件:
.bat
文件:
chcp 1250
psql "postgres://<heres_my_URI>" -f script.sql
exit
script.sql
:
\copy <table_name> to 'G:\<path>\name.csv' with DELIMITER ',' header csv
\copy <table_name> to 'G:\<path>\name.csv' with DELIMITER ',' header csv
确保每个 \copy
命令都在一行中,因为它必须如此。不过,它不必以分号结尾。