↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

已结束支持的版本: 6.5 / 6.3
历史版本。 PostgreSQL 6.3 已结束支持。 请参阅 当前版本手册.

45.6. 与 COPY 命令相关的函数

Postgres 中的 copy 命令可以选择从 libpq 所用的网络连接读取或向其写入。因此,需要能直接访问此网络连接的函数,应用才能充分利用这一能力。

  • PQgetline 把一行由后端服务器传来的以换行符结尾的字符读入大小为 length 的缓冲区字符串。与 fgets(3) 一样,此例程最多把 length-1 个字符复制到 string 中;但与 gets(3) 相似,它会把结尾的换行符转换为空字符。PQgetline 在 EOF 处返回 EOF,整行已读完返回 0,缓冲区已满但结尾换行符尚未读到返回 1。注意,应用必须检查新的一行是否由单个字符 "." 组成,这表示后端服务器已发送完 copy 命令的结果。因此,如果应用可能收到超过 length-1 个字符的行,就必须非常仔细地检查 PQgetline 的返回值。../src/bin/psql/psql.c 中的代码包含正确处理 copy 协议的例程。

    int PQgetline(PGconn *conn,
                  char *string,
                  int length)
  • PQputline 向后台服务器发送一个以空字符结尾的字符串。应用必须显式发送单个字符 ".",以告知后端它已发送完数据。

    void PQputline(PGconn *conn,
                   char *string);
  • PQendcopy 与后端同步。此函数等待后端完成 copy。它应当在用 PQputline 向后端发送完最后一个字符串之后,或用 PGgetline 从后端收到最后一个字符串之后发出。必须发出此函数,否则后端可能与前端"out of sync"(失去同步)。从此函数返回后,后端就准备好接收下一条查询了。成功完成时返回值为 0,否则非零。

    int PQendcopy(PGconn *conn);

    PQexec(conn, "create table foo (a int4, b char16, d float8)");
    PQexec(conn, "copy foo from stdin");
    PQputline(conn, "3<TAB>hello world<TAB>4.5\n");
    PQputline(conn,"4<TAB>goodbye world<TAB>7.11\n");
    ...
    PQputline(conn,".\n");
    PQendcopy(conn);

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.