postgresql - Postgresql查询中的COPY命令

标签 postgresql copy

美好的一天!

我想咨询一下Postgresql中的COPY命令。 我有这张 table :

CREATE TABLE pm_monitor_temporary
(
  date timestamp NOT NULL,
  targetid varchar(128) NOT NULL,
  value1 float8 NOT NULL,
  value2 float8 NOT NULL,
  value3 float8 NOT NULL,
  value4 float8 NOT NULL,
  value5 float8 NOT NULL,
  value6 float8 NOT NULL,
  datastatus1 varchar(2) NOT NULL,
  datastatus2 varchar(2) NOT NULL,
  datastatus3 varchar(2) NOT NULL,
  datastatus4 varchar(2) NOT NULL,
  datastatus5 varchar(2) NOT NULL,
  datastatus6 varchar(2) NOT NULL,
  granularity int4 NOT NULL,
  neid varchar(16) NOT NULL,
  CONSTRAINT pm_monitor_pkey PRIMARY KEY (date, targetid, granularity, neid)
);

我确实创建了一个函数,它将 csv 内容复制到给定文件路径(文件的绝对路径)的表中。我的sql函数似乎有问题。:

Create Or Replace Function copycsv_pm_monitor_temp(filePath  varchar(1025))
Returns void As
$BODY$
DECLARE
  sql varchar(1025);
BEGIN
    sql := 'COPY  pm_monitor_temporary FROM {' || filePath ||
      '| stdin} using DELIMITERS ',' ' || ';' ;
    EXECUTE sql;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

这将编译,但是当我运行我的 java 代码时,这最终会导致错误。我错过了什么?

Caused by: org.postgresql.util.PSQLException: ERROR: query "SELECT  'COPY                  pm_monitor_temporary FROM {' ||  $1  || '| stdin} using DELIMITERS ',' ' || ';'" returned     2 columns

最佳答案

您没有正确处理您的引用,并且不小心得到了一个有效语法的语句,它没有正确数量的结果列。你那里也有一些其他问题。

这个:

    sql := 'COPY  pm_monitor_temporary FROM {' || filePath ||
      '| stdin} using DELIMITERS ',' ' || ';' ;

应该是这样的:

    sql := 'COPY pm_monitor_temporary FROM ''' || filePath ||
      ''' WITH (FORMAT csv, DELIMITER '','')';

关于postgresql - Postgresql查询中的COPY命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10105478/

相关文章:

postgresql - PostgreSQL 中不存在 double 类型

PHP和pgbouncer处于事务模式: current transaction is aborted

php - 问答: Ex- and Import Database values with more than 1 Table in XML

Git复制文件保存历史

postgresql - 在 Windows 7 上使用 PIP、virtualenv、psycopg2、Django 的 Heroku 教程

sql - 任何查询的数组列的 Postgres 索引类型

android - 以编程方式复制/system/app/*.apk 到 sdcard

c# - 在另一个列表中添加列表副本的最佳方法是什么?

c++ - 了解二维数组的复制

language-agnostic - 深拷贝和浅拷贝有什么区别?