SQL 中有没有办法将目录中包含的所有 .csv 导入我的 postgres 表? (窗口操作系统)

Posted

技术标签:

【中文标题】SQL 中有没有办法将目录中包含的所有 .csv 导入我的 postgres 表? (窗口操作系统)【英文标题】:Is there a way in SQL to import ALL .csv contained in a directory to my postgres table? (window os) 【发布时间】:2014-03-06 01:31:59 【问题描述】:

SQL 中有没有办法将目录中包含的所有 csv 导入我的 postgres 表?

感谢您的帮助。

【问题讨论】:

可能重复的问题***.com/questions/18533625/… 这不是很有帮助 将文件合二为一,然后导入。对于没有标题的文件,在 cmd 中运行:copy *.csv all.txt 这通常是您使用的 SQL 客户端的功能,而不是数据库服务器的功能。 【参考方案1】:

这根本不是 PostgreSQL 特有的。您需要使用循环为每个文件调用一次psql,为每个输入文件生成一个包含\include 命令的主文件,或者连接所有输入文件然后运行它们。

所有这些任务都是使用操作系统命令提示符工具完成的,与 PostgreSQL 无关。

连接文件并运行结果:

type *.sql | psql

使用cmd.exe 的循环语法对它们进行循环(未经测试,请参阅How to loop through files matching wildcard in batch file 和Iterate all files in a directory using a 'for' loop 了解详细信息):

FOR %%f IN (*.sql) DO (
  echo %%~nf
  psql -f %%~nf
)

我相信第三种方式也是可能的。这可能有效(在 unix 机器上的真实 shell 中等效)但未经测试,因为我没有方便地使用 Windows:

FOR %%f IN (*.sql) DO (
  echo "\include %%~nf"
) | psql

据我所知,这些都不能保证文件以任何特定的顺序运行。您需要在 Windows shell 上查找文档。

就个人而言 - 我建议在 Powershell 或 Perl 或其他比 cmd.exe 批处理语言更糟糕的脚本语言中执行此类操作。

无论哪种方式,所有文件都必须具有系统默认的 1 字节文本编码,或者必须包含明确的 SET client_encoding= ... 语句。

【讨论】:

非常感谢克雷格!

以上是关于SQL 中有没有办法将目录中包含的所有 .csv 导入我的 postgres 表? (窗口操作系统)的主要内容,如果未能解决你的问题,请参考以下文章

用SQL怎么把一列所有字符串中包含的空格都删除呢

将 d3.csv 方法转换为 d3.csv.parse 方法

php PHP:获取我的images目录中包含的所有文件名列表[重复]

git列出本地文件夹中包含的所有repos的所有活动分支

有没有办法在 robocopy 脚本中包含带有变音符号的文件路径?

如何设置 QMenu 中包含的 QActions 的可访问名称