在存储函数中使用 COPY FROM STDIN
Using COPY FROM STDIN in a stored function
我正在尝试将数据从存储的 PostgreSQL 函数复制到 table。行的数据和 table 名称是从 java 程序接收的,导致错误的部分是:
_copyquery := FORMAT('COPY %s FROM STDIN (DELIMITER ''|'', FORMAT CSV); %s \.', _tablename, _stdin);
execute _copyquery;
其中 _tablename 是 table 的名称,_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
我得到的错误是:
ERROR: syntax error at or near "12"
其中“12”始终是第一个字段,最常见的是 12 或 3。
知道为什么这行不通吗?
我发现我的请求目前无法执行,因此决定使用 CopyManager 以编程方式插入数据。请记住,我使用插入语句处理的数据量会变慢,这是一个很好的解决方案。
我正在尝试将数据从存储的 PostgreSQL 函数复制到 table。行的数据和 table 名称是从 java 程序接收的,导致错误的部分是:
_copyquery := FORMAT('COPY %s FROM STDIN (DELIMITER ''|'', FORMAT CSV); %s \.', _tablename, _stdin);
execute _copyquery;
其中 _tablename 是 table 的名称,_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
我得到的错误是:
ERROR: syntax error at or near "12"
其中“12”始终是第一个字段,最常见的是 12 或 3。 知道为什么这行不通吗?
我发现我的请求目前无法执行,因此决定使用 CopyManager 以编程方式插入数据。请记住,我使用插入语句处理的数据量会变慢,这是一个很好的解决方案。