你用pg_dump 倾倒一个数据库,看看产生的sql语句都是copy from stdin 来插入数据的

解决方案 »

  1.   

    copy from 是不是仅仅是初始化的时候或者是数据库复制的时候用啊?Insert时能不能用呢?对于PostgreSQL的大量插入操作有什么优化的措施吗?
      

  2.   

    postgresql的文档中有相关描述,剪切下来,共参考,希望对你有所帮助:
    copy from  的格式如下:
    COPY [ BINARY ] table [ WITH OIDS ]
        FROM { 'filename' | stdin }
        [ [USING] DELIMITERS 'delimiter' ]
        [ WITH NULL AS 'null string' ]输入 
    BINARY
    改变字段格式行为,强制所有数据都使用二进制格式存储和读取, 而不是以文本的方式. DELIMITERS 和 WITH NULL 选项和二进制格式无关. table
    现存表的名字. WITH OIDS
    拷贝每行的内部唯一对象标识(OID). filename
    输入或输出的 Unix 文件的绝对文件名. stdin
    声明输入是来自客户端应用. stdout
    声明输入前往客户端应用. delimiter
    用于在文件中每行中分隔各个字段的字符. null string
    个代表 NULL 值的字串。缺省是 "\N" (反斜杠-N)。 当然,你可以自己挑一个空字串。 输出 
    COPY 
    拷贝成功完成. ERROR: reason 
    拷贝失败,原因在错误信息里. COPY 在 PostgreSQL表和标准文件系统文件之间交换数据. COPY TO 把一个表的所有内容都拷贝到一个文件, 而 COPY FROM 从一个文件里拷贝数据到一个表里 (把数据附加到表中已经存在的内容里). COPY 指示 PostgreSQL 后端直接从文件中读写数据. 如果声明了文件名,那么该文件必须为后 端可见,而且文件名必须从后端的角度声明.如果声明的是 stdin 或 stdout, 数据通过客户前端流到后端. 提示: 不要把 COPY 和 psql 指令 \copy 混淆在一起. \copy 调用 COPY FROM stdin 或 COPY TO stdout,然后抓取/存储 psql 客户端可以访问的一个文件里. 因此,使用 \copy 的时候, 可访问性和访问权限取决于客户端而不是服务器端