Postgres: \copy 语法

2024-05-05

使用 CentOS 7 上的 PostgreSQL 9.5,我创建了一个名为sample还有几张桌子。我有.csv数据输入/home/MyUser/data对于每张桌子。 例如,存在TableName.csv用于餐桌"TableName".

如何将 csv 文件加载到每个表中?


我所尝试的方法不起作用,我不知道我做错了什么。

从数据库内加载

$ psql sample

sample=# COPY "TableName" FROM '/home/MyUser/data/TableName.csv' WITH CSV;

ERROR:  could not open file "/home/MyUser/data/TableName.csv" for reading: Permission denied

这意味着存在文件权限问题。所有文件在data/ are -rw-r--r--目录本身是drwxr-xr-x。所以文件权限不应该是问题(除非我遗漏了一些东西)。互联网上说COPY权限有问题并尝试\copy.

从 CLI 加载

$ psql \copy sample FROM /home/MyUser/data/TableName.csv WITH CSV

psql: warning: extra command-line argument "FROM" ignored
psql: warning: extra command-line argument "/home/MyUser/data/TableName.csv" ignored
psql: warning: extra command-line argument "WITH" ignored
psql: warning: extra command-line argument "CSV" ignored
psql: FATAL:  Peer authentication failed for user "sample"

这似乎是一个语法错误,但我没有发现文档特别有帮助(man psql then /\copy)。我也尝试了以下方法,得到了相同的结果。

$ psql \copy sample."TableName" FROM /home/MyUser/data/TableName.csv WITH CSV
$ psql \copy sample FROM /home/MyUser/data/TableName.csv WITH DELIMITER ','

还有其他几种排列会产生类似的错误。

使用的网络资源

  • https://www.postgresql.org/docs/9.5/static/app-psql.html https://www.postgresql.org/docs/9.5/static/app-psql.html

  • https://www.postgresql.org/docs/9.5/static/sql-copy.html https://www.postgresql.org/docs/9.5/static/sql-copy.html

  • 从具有单引号数据的 csv 文件加载 postgreSQL 数据的正确 COPY 命令? https://stackoverflow.com/questions/12856377/the-correct-copy-command-to-load-postgresql-data-from-csv-file-that-has-single-q

  • https://soleil4716.wordpress.com/2010/08/19/using-copy-command-in-postgresql/ https://soleil4716.wordpress.com/2010/08/19/using-copy-command-in-postgresql/

  • 我可以在 postgresql 的函数中使用 \copy 命令吗? https://stackoverflow.com/questions/32188644/can-i-use-copy-command-into-a-function-of-postgresql

  • https://wiki.postgresql.org/wiki/COPY https://wiki.postgresql.org/wiki/COPY


关于权限:

不要忘记要访问您需要权限的文件all路径中的目录。例如,如果操作系统用户postgres没有权限/home/MyUser目录,您会收到观察到的错误消息。

About \copy:

你必须使用-c提供命令的选项psql:

$ psql -c "\copy sample FROM '/home/MyUser/data/TableName.csv' WITH (FORMAT CSV)"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Postgres: \copy 语法 的相关文章

随机推荐