首页 > 解决方案 > 在存储函数中使用 COPY FROM STDIN

问题描述

我正在尝试将数据从存储的 PostgreSQL 函数复制到表中。行的数据和表名是从java程序接收的,导致错误的部分是这个:

_copyquery := FORMAT('COPY %s FROM STDIN (DELIMITER ''|'', FORMAT CSV); %s \.', _tablename, _stdin);
execute _copyquery;

其中 _tablename 是表的名称,而 _stdin 是格式如下的数据行:

12|34|139901177705664|1545226308991|991389|1545226308991|1545226308991|0|0|0|0|0|0|000|0.0.0.0|0.0.0.0|2328620776|0|0|0|0|0|0|0|0.0.0.0|0.0.0.0|0|0|0|0||0|0|0|-|0|0|0|0|0|195.46.227.124|33840|10.110.186.41|2123|2|0|3090304976|0.0.0.0|::|0|||0|0|0|0|0|0|0|0|2|5

我得到的错误是:

错误:“12”处或附近的语法错误

其中“12”始终是第一个字段,最常见的是 12 或 3。任何想法为什么这不起作用?

标签: postgresqlstdinplpgsql

解决方案


我发现我的请求目前无法执行,并已决定使用CopyManager以编程方式插入数据。请记住,我使用插入语句处理的数据量会变慢,这是一个很好的解决方案。


推荐阅读