如何在postgreSQL过程中从tsv文件导入数据?

How to import data from tsv file in postgreSQL procedure?

提问人:Nano_Watcher 提问时间:3/5/2023 更新时间:3/5/2023 访问量:128

问:

我有一个程序:

CREATE OR REPLACE PROCEDURE import(IN tablename varchar, IN path text, IN separator char) AS $$
    BEGIN
            EXECUTE format('COPY %s FROM ''%s'' DELIMITER ''%s'' CSV HEADER;', tablename, path, separator);
    END;
$$ LANGUAGE plpgsql;

我是这样称呼的:CALL import('transactions', '/home/vladimir/Desktop/RetailAnalitycs_v1.0/datasets/Transactions.tsv','\t');

此选项适用于 macOS,但不适用于 linux,可能是什么原因? 产生以下错误:[58P01] ERROR: could not open file "/home/vladimir/Desktop/RetailAnalitycs_v1.0/datasets/Transactions.tsv" for reading: No such file or directory Подсказка: COPY FROM instructs the PostgreSQL server process to read a file. You may want a client-side facility such as psql's \copy.

但我 100% 确定文件的路径是正确的。

我尝试使用不同的分隔符,重写了程序,询问了 chatgpt。

SQL PostgreSQL 过程 错误消息传递

评论

0赞 nbk 3/5/2023
Postgres 程序不能具有对文件的访问权限,因为它们通常只属于用户
0赞 Adrian Klaver 3/5/2023
Postgres 服务器位于何处,与另一台计算机位于同一台机器上?/home/vladimir/ ...
0赞 Nano_Watcher 3/6/2023
@Adrian Klaver 服务器位于文件所在的同一台本地计算机上。我唯一注意到的是 Postgres 服务器正在通过 docker 容器运行。
0赞 Nano_Watcher 3/6/2023
@ndk 我可以尝试做什么?我真的尝试了互联网上推荐给我的一切。
1赞 Adrian Klaver 3/6/2023
COPY作为服务器用户工作,并从其角度工作。显然,服务器无法到达 Docker 容器外部以访问路径。您需要将文件移动到服务器可以访问的路径。"/home/vladimir/Desktop ...

答: 暂无答案