使用STDIN的postgresqlcopy命令
我需要将CSV文件中的数据加载到PostgreSQL中的表中。我不是使用copy命令的超级用户。当我从postgreSQL网站上读到一些主题时,我开始了解使用使用STDIN的postgresqlcopy命令,sql,postgresql,Sql,Postgresql,我需要将CSV文件中的数据加载到PostgreSQL中的表中。我不是使用copy命令的超级用户。当我从postgreSQL网站上读到一些主题时,我开始了解使用STDIN和STDOUT的\copy命令 我也尝试过同样的方法,但都出现了错误。实际上我想做的是 我的CSV文件位于“D:/test/test.CSV”中,试图使用下面的复制命令加载到tablename:test中 命令:\stdin复制测试。 STDIN到底是什么?我必须在哪里分配文件路径 还有一个疑问是,我是否只需要在psql中运行这个
STDIN
和STDOUT
的\copy
命令
我也尝试过同样的方法,但都出现了错误。实际上我想做的是
我的CSV文件位于“D:/test/test.CSV”中,试图使用下面的复制命令加载到tablename:test中
命令:\stdin复制测试。
当您将大型结构化数据批量加载到数据库中时,命令COPY对您很有用。 根据我的经验,我们这里有一些值得注意的事情
CAT xyz.csv | psql-U postgres-c“从标准文本复制测试”
我知道这个命令只在命令行中运行从“/tmp/xyz.csv”复制测试
此命令可以在psql和pgAdmin中运行,但请注意,文件路径必须位于服务器上或服务器可以访问的位置,并且系统用户(运行数据库守护程序)可以访问和读取文件的权限\copy
是psql
不是SQL,因此只能在psql中执行
执行前端(客户端)复制。这是一个运行
SQL COPY命令,但不是服务器读取或写入
指定的文件,psql读取或写入该文件并路由数据
在服务器和本地文件系统之间。这意味着该文件
可访问性和权限是本地用户的,而不是用户的
服务器,并且不需要SQL超级用户权限
另外-您不必从stdin运行,下面的代码也可以运行:
\copy test from 'D:/test/test.csv'
@:Mabu Kloesen:谢谢您的重播,但我的文件存在于另一台服务器中。当我运行上面的命令时,它显示访问被拒绝,您必须superuser@Rajesh:这意味着您的数据库服务器无法使用运行数据库守护程序的用户访问另一台服务器上的文件。您可以通过将表中的数据复制到一个文件中,然后将其加载到另一个文件中进行检查和理解来尝试使用和理解它。@MabuKloesen否,这意味着从文件中复制的仅限于超级用户,无论文件权限如何:感谢您的重播我收到了以下错误执行SQL命令时出错:\copy test from'D:/test/test.csv'delimiter','csv错误:语法错误在“\”位置或附近:1\copy test from'D:/test/test.csv'delimiter','csv^1语句失败。执行时间:0.01srun\copy
仅使用psql
执行。如果您这样做了-请分享我使用psql运行的屏幕快照,我得到的错误是:没有这样的文件或目录注意:我的文件在本地计算机中,PostgreSQL托管在服务器中。'D:/test/test.csv'
应该托管在客户端,您应该从客户端运行psql
。是的-我的意思是您应该从同一台计算机运行psql
有``文件的机器