使用STDIN的PostgreSQL复制命令

时间:2018-01-17 05:56:44

标签: sql postgresql

我需要将CSV文件中的数据加载到PostgreSQL中的表中。并且我不是超级用户使用复制命令。当我从postgreSQL网站上阅读几个主题时,我发现我使用\copySTDIN来了解STDOUT命令。

我尝试了相同但却出错。实际上我在尝试的是什么 我的CSV文件位于' D:/test/test.csv'尝试使用下面的复制命令加载tablename:test

命令:\copy test from stdin.

  1. 究竟是什么STDIN以及我必须分配文件路径的地方

  2. 还有一个疑问是我只需要在psql中运行此命令,或者我可以在SQL工作台中运行它。

2 个答案:

答案 0 :(得分:5)

1)stdin是标准输入 - 意味着您必须粘贴(或键入)数据

2)是\copypsql meta-command,而不是SQL,因此只能在psql中执行...

  

执行前端(客户端)副本。这是一个运行的操作   SQL COPY命令,而不是服务器读取或写入   指定的文件,psql读取或写入文件并路由数据   服务器和本地文件系统之间。这意味着该文件   可访问性和权限是本地用户的权限,而不是   服务器,并且不需要SQL超级用户权限。

也 - 您不必运行from stdin,下面也可以运行:

\copy test from 'D:/test/test.csv'

答案 1 :(得分:2)

当您将大型结构化数据批量加载到数据库中时,命令COPY对您很有用。 根据我的经验,我们在这里注意到一些事情。

  1. 当您的命令在其他命令的管道之后使用时使用STDIN,例如: CAT xyz.csv | psql -U postgres -c "COPY test FROM STDIN" 这个命令,我知道只能在命令行中运行。

  2. 您可以使用语法从文件加载数据 COPY test FROM '/tmp/xyz.csv' 此命令可以在psql和pgAdmin中运行,但请注意文件的路径必须位于服务器上或服务器可以到达的位置,并且系统用户(运行数据库守护程序)的权限也可以访问和读取文件。

  3. 您可以找到更多信息here

    希望这个答案可以帮到你。