首页 文章

使用STDIN的PostgreSQL复制命令

提问于
浏览
0

我需要将CSV文件中的数据加载到PostgreSQL中的表中 . 我不是超级用户使用复制命令 . 当我从postgreSQL网站上读到几个主题时,我开始知道使用 STDINSTDOUT\copy 命令 .

我尝试了相同但得到错误 . 我实际上尝试的是我在'D:/test/test.csv'中的CSV文件试图加载tablename:test使用下面的复制命令

命令: \copy test from stdin.

1)什么是STDIN以及我必须分配文件路径的位置

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

谢谢 .

2 回答

  • 1

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

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

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

    还 - 你不必运行 from stdin ,下面应该也可以运行:

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

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

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

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

    您可以找到更多信息here .

    希望这个答案能帮到你 .

相关问题