SQL中有没有办法将目录中包含的所有csv导入到我的postgres表?
谢谢你的帮助。
这根本不是PostgreSQL特有的。您需要使用循环为每个文件调用psql
一次,为每个输入文件生成一个包含include
命令的主文件,或者连接所有输入文件,然后运行它们。
所有这些任务都是用操作系统命令提示符工具完成的,与PostgreSQL无关。
连接文件并运行结果:
type *.sql | psql
要使用cmd.exe
令人惊讶、难以置信的丑陋for循环语法来循环它们(未经测试,请参阅如何在批处理文件中循环匹配通配符的文件,并使用';for';循环迭代目录中的所有文件以了解详细信息):
FOR %%f IN (*.sql) DO (
echo %%~nf
psql -f %%~nf
)
我相信第三条路也是可能的。这可能会起作用(在unix盒子上的真实shell中也可以起作用),但尚未经过测试,因为我手头没有方便的Windows:
FOR %%f IN (*.sql) DO (
echo "include %%~nf"
) | psql
据我所知,这些都不能保证文件以任何特定的顺序运行。您需要在Windows外壳上查找文档。
就我个人而言,我建议用Powershell、Perl或其他比cmd.exe批处理语言更糟糕的脚本语言来做这类事情。
无论哪种方式,所有文件都必须具有系统默认的1字节文本编码,或者必须包含显式SET client_encoding= ...
语句。